No universo da segurança para servidores, o NGINX desponta como uma poderosa ferramenta, oferecendo não apenas funcionalidades essenciais de um servidor web, mas também recursos avançados, como proxy reverso e balanceamento de carga.
Neste artigo, exploramos os fundamentos do NGINX, seu papel em empresas renomadas e suas características distintas.
O que significa NGINX?
O termo NGINX, pronunciado “engine-ex,” é um servidor web open-source, também utilizado como proxy reverso e balanceador de carga.
Algumas empresas que utilizam o NGINX:
• Atlassian
• T-Mobile
• GitLab
• DuckDuckGo
• Microsoft
• IBM
• Adobe
• Salesforce
• Cisco
• Apple
• Intel
O NGINX foi projetado para possibilitar uma utilização de pouca memória e uma elevada simultaneidade. Em vez de criar novos processos para cada requisição web, o NGINX usa uma abordagem assíncrona e orientada para eventos, na qual as requisições são gerenciadas em um único segmento.
Algumas características encontradas no NGINX
• Proxy reverso com armazenamento em cache
• IPv6
• Balanceamento de carga
• Suporte para o FastCGI com cache
• WebSockets
• Manipulação de arquivos estáticos, arquivos de índice e indexação automática
• TLS/SSL com SNI
Como verificar se você está utilizando o NGINX
Na maioria dos sites, pode simplesmente verificar o cabeçalho HTTP server para ver se ele diz NGINX. Você pode ver os cabeçalhos HTTP ao abrir o separador “Rede” no Chrome DevTools. Contudo, o cabeçalho HTTP nem sempre revela o servidor web subjacente. Por exemplo, se seu site WordPress estiver por trás de um serviço de proxy, como o Cloudflare, o cabeçalho HTTP server dirá Cloudflare.
Agora, sabendo os princípios básicos, vamos esclarecer…
Para que serve um proxy reverso?
Um proxy reverso é um servidor que fica na frente dos servidores web e encaminha as requisições do cliente (por exemplo, navegador web) para esses servidores web. Os proxy reversos normalmente são implementados para ajudar a aumentar a segurança, o desempenho e a confiabilidade.
E para que serve um balanceador de carga?
O balanceamento de carga é o método de distribuir o tráfego de rede igualmente em um grupo de recursos que oferecem suporte a uma aplicação. As aplicações modernas devem processar milhões de usuários simultaneamente e retornar o texto, vídeos, imagens e outros dados corretos para cada usuário de maneira rápida e confiável. Para lidar com volumes tão altos de tráfego, a maioria das aplicações tem muitos servidores de recursos com dados duplicados entre eles. Um balanceador de carga é um dispositivo que fica entre o usuário e o grupo de servidores e atua como um facilitador invisível, garantindo que todos os servidores de recursos sejam usados igualmente.
O balanceamento de carga direciona e controla o tráfego da Internet entre os servidores de aplicações e seus visitantes ou clientes. Como resultado, ele melhora a disponibilidade, e escalabilidade, a segurança e a performance de uma aplicação.
Agora, vamos esclarecer sobre o ponto importante que visa a segurança para servidores:
É importante considerar que o servidor NGINX é mais eficiente, consumindo menos recursos do que o Apache, e se tornou recentemente o servidor web mais popular no mundo.
Trabalhando com HTTPS no NGINX
O uso de HTTPS para navegação em websites se tornou uma prática padrão, essencial inclusive para sites pessoais e blogs (como o que você está lendo agora). O Google já leva em consideração o uso de certificados de segurança para o ranqueamento no sistema de busca, como um dos parâmetros do conceito de Page Experience.
Você pode instalar um certificado de segurança no seu servidor NGINX gratuitamente usando o Certbot. Alguns serviços de hospedagem também oferecem instalações gratuitas ou pagas em seus planos.
Uma vez instalado, você pode redirecionar todo o tráfego para a versão segura do seu site com HTTPS usando o código abaixo no bloco server do arquivo de configuração dentro da pasta sites-enabled.
Exemplo:
# Force HTTPS
#
server {
listen 80;
listen [::]:80;
access_log off;
error_log off;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
No código acima, todos os acessos via porta 80 (http) no domínio example.com e com o subdomínio www.example.com serão redirecionados para o endereço https://example.com. Note o $request_uri, que repassa o caminho de arquivos que possa vir depois do domínio na barra de endereços.
Também é recomendável bloquear o acesso via porta 80 no endereço IP do seu servidor. No caso, o servidor retorna um erro 444 (connection closed without response).
# Block access using server IP
#
server {
listen 80 default_server;
server_name _;
return 444;
}
Para bloquear o acesso direto via IP inclusive via HTTPS, forçando o usuário a acessar pelo domínio do seu site, você pode adaptar o bloco de configurações do site com SSL em seu servidor usando o seguinte código:
server {
…
server_name example.com www.example.com;
if ($host !~ ^(example.com|www.example.com)$){
return 400;
}
…
}
Neste exemplo, se o usuário acessa o servidor por algo diferente de example.com ou www.example.com, o NGINX retorna para o usuário um erro 400 (Bad Request). Note que o erro 444 não pode ser retornado por conta do handshake na conexão SSL.
Protegendo pastas com senha no NGINX
Outra dica de segurança no NGINX é proteger o acesso a pastas e arquivos confidenciais ou administrativos com senha, para evitar acessos não autorizados.
Primeiro é necessário criarmos um arquivo de senha com as credenciais de acesso. Para criar uma senha criptografada, use o comando openssl password no terminal. Insira e confirme a senha desejada. O comando retornará a versão criptografada da sua senha:
# Criar uma senha criptografada
openssl password
# Exemplo de retorno após a entrada da senha desejada
/PUfiF9t9VXnI
Copie o valor retornado. Agora vamos criar o arquivo com os dados de autenticação. Neste exemplo, nomearemos o arquivo como autenticacao e salvaremos dentro da pasta /etc/nginx/.
# Criar o arquivo /etc/nginx/autenticacao no editor de texto
sudo nano /etc/nginx/autenticacao
No editor de texto, você especificará o nome de usuário, seguido por dois pontos, e a senha criptografada que criou nos passos anteriores. Por exemplo, john_doe:/PUfiF9t9VXnI. Salve e feche o arquivo.
Agora vamos modificar o arquivo de configuração do NGINX. Abra o arquivo de configuração correspondente ao site desejado na pasta /etc/nginx/sites-available/. Neste exemplo, faremos a configuração na pasta /restrito/.
server {
…
location / {
try_files $uri $uri/ =404;
}
location ^~ /restrito/ {
auth_basic “Admin Login”;
auth_basic_user_file /etc/nginx/autenticacao;
}
…
}
Salve o arquivo no editor de texto e reinicie o servidor NGINX com o comando sudo systemctl reload nginx. Quando algum usuário acessar o endereço example.com/restrito, ele verá um prompt do navegador exigindo nome de usuário e senha definido no arquivo autenticacao para acessá-lo.
Cabeçalhos de segurança no NGINX
Por fim, uma configuração importante que evita, entre outros, a injeção de código malicioso e clickjacking. Pode ser configurado tanto no arquivo correspondente ao site na pasta sites-available quanto no arquivo de configuração geral do NGINX, com o comando add_header.
A configuração dos cabeçalhos depende do nível de segurança que você precisa oferecer no seu site, mas segue abaixo um exemplo.
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection “1; mode=block”;
add_header Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ https://ssl.google-analytics.com; img-src ‘self’ https://ssl.google-analytics.com; style-src ‘self’ ‘unsafe-inline’ https://fonts.googleapis.com; font-src ‘self’ https://themes.googleusercontent.com; object-src ‘none'”;
Conclusão
Em conclusão, a implementação efetiva de práticas de segurança no NGINX é crucial para salvaguardar servidores contra ameaças digitais. Desde a configuração do HTTPS até a proteção de pastas com senha e a adoção de cabeçalhos de segurança, cada passo contribui para um ambiente mais robusto e resistente. Ao aproveitar ao máximo as capacidades do NGINX, os administradores de servidores podem garantir não apenas desempenho excepcional, mas também uma defesa sólida contra potenciais vulnerabilidades. Ao celebrarmos o primeiro ano do NGINX, reconhecemos não apenas sua popularidade, mas sua importância na construção de um ecossistema online mais seguro e confiável.