Práticas recomendadas de segurança do Nginx.
O Nginx é o servidor web que mais cresce no setor e, atualmente, ocupa a segunda posição em participação de mercado.
Foi lançado inicialmente em 2004 e, desde então, ganhou uma excelente reputação e é usado nos milhões de sites mais movimentados.
Há uma razão para isso – o Nginx é muito rápido.
Neste artigo, falarei sobre alguns dos guias essenciais para garantir o Nginx para um ambiente de produção . Então vamos começar.
SSL/TLS
Implementar certificado SSL
O primeiro passo na segurança da web é ter o SSL implementado para que você possa acessar aplicativos da web com https e adicionar uma camada de criptografia na comunicação.
- Usar OpenSSL para gerar CSR com 2048 bit e sha-2
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
- O comando acima irá gerar arquivos CSR e chave no trabalho atual diretamente. Não se esqueça de alterar o nome do arquivo .csr e .key.
Obtenha o CSR assinado por uma autoridade de certificação e, depois de ter o certificado assinado, você pode implementá-lo no Nginx conforme abaixo.
- Entrar no servidor Nginx
- Vá para a pasta conf onde você tem um arquivo ssl.conf.
Nota: Na instalação padrão no Linux, você terá este arquivo em /etc/nginx/conf.d.
- Edite o arquivo e adicione o seguinte, o que permitirá que o Nginx escute na porta 443
server {
listen 443 ssl;
server_name bestflare.com;
ssl on;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
}
Observação: não se esqueça de alterar o certificado e o caminho do arquivo de chave.
- Salve a configuração e reinicie o Nginx. Um certificado SSL foi implementado com sucesso.
Otimização SSL/TLS
Ter SSL não significa que seja totalmente seguro e é aí que, como Web Especialista em segurança, você precisa aplicar uma configuração para proteger o servidor da web.
Para começar, eu recomendaria executar um Verificação SSL contra o site para encontrar a pontuação e vulnerabilidade essencial.
Portanto, a classificação atual do SSL Labs é “C” e um alvo é torná-lo “A”.
Desativar protocolos SSL/TLS fracos
SSL 3, TLS 1.0 e TLS 1.1 são vulneráveis e permitiremos apenas um protocolo TLS 1.2 forte.
- Edite o arquivo ssl.conf e adicione abaixo no bloco do servidor
ssl_protocols TLSv1.2;
- Salve o arquivo ssl.conf e reinicie o Nginx
Desabilitar conjuntos de cifras fracos
Conjuntos de cifras fracos podem levar à vulnerabilidade como um engarrafamento e é por isso que precisamos permitir apenas cifras fortes.
- Adicione o seguinte ao bloco do servidor no arquivo ssl.conf
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
- Salve o arquivo e reinicie o Nginx
Instalar Certificado de Cadeia
Não ter um certificado de cadeia também afeta a classificação geral e isso pode mostrar um erro ao navegar em um navegador moderno como Chrome. Você precisa obter um certificado de cadeia da autoridade. Principalmente você encontrará em seu site ou apenas no Google.
- Adicione o conteúdo do certificado da cadeia no certificado do site, como abaixo. No meu exemplo, seria /opt/cert/bestflare.pem
- Salve o arquivo e reinicie o Nginx
Diffie-Hellman seguro para TLS
Diffie-Hellman é menos seguro do que se acreditava. Uma das melhores práticas adicionadas recentemente em uma lista é proteger Diffie-hellman. Gerar DH GROUP exclusivo e adicionar ssl_dhparam no arquivo ssl.conf faz isso.
- Gerar grupo DH exclusivo usando OpenSSL
openssl dhparam -out dhparams.pem 4096
- Levará alguns minutos e irá gerar um arquivo dhparams.pem em um diretório de trabalho atual
- Copie dhparams.pem para a pasta cert
- Modifique ssl.conf e adicione o seguinte no bloco do servidor
ssl_dhparam /opt/cert/dhparams.pem;
- Salve o arquivo e reinicie o Nginx
Isso deve ser suficiente para otimização de SSL/TLS e vamos testar a URL novamente para ver a classificação.
Uau! Então agora você pode ver que é “A” classificação por SSLLabs. Bom trabalho!
Aqui está completo ssl.conf
# HTTPS server configuration
server {
listen 443 ssl;
server_name bestflare.com;
ssl on;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
ssl_dhparam /opt/cert/dhparams.pem;
}
Vazamento de informação
Na instalação padrão do Nginx, muitas informações confidenciais serão reveladas, o que pode ajudar os hackers a se prepararem para um ataque.
Se você estiver trabalhando em um ambiente de conformidade com PCI, isso é considerado uma vulnerabilidade de vazamento de informações e deve corrigir o item.
Você tem que usar server_tokens off para desabilitar o vazamento de informações. Eu expliquei isso no meu artigo anterior. Remover versão do banner de cabeçalho do servidor no Nginx
Web Segurança de aplicativos
A configuração padrão do Nginx não é perfeita e pode ter muitas vulnerabilidades, por isso nós as protegemos para torná-la segura.
Desativar métodos HTTP indesejados
Na maioria das vezes, você precisa apenas de solicitações HTTP GET, HEAD & POST em seu aplicativo da web. Permitir TRACE ou DELETE é arriscado, pois pode permitir um ataque de rastreamento entre sites e potencialmente permitir que um hacker roube as informações do cookie.
- Modifique nginx.conf e adicione o seguinte no bloco do servidor
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
Salve o arquivo e reinicie o Nginx. Isso agora mostrará 405 Não permitido se alguém estiver tentando usar TRACE, DELETE, PUT, OPTIONS.
Chandans-iMac:~ chandan$ telnet bestflare.com 80
Trying 128.199.100.162...
Connected to bestflare.com.
Escape character is '^)'.
TRACE / HTTP/1.1
Host: testing
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Sat, 11 Jul 2015 06:04:34 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
Ataque de clickjacking
Você pode injetar X-FRAME-OPTIONS no cabeçalho HTTP para evitar um ataque de clickjacking.
Isso é obtido adicionando abaixo no arquivo nginx.conf
add_header X-Frame-Options "SAMEORIGIN";
O cabeçalho acima instruirá um navegador a carregar os recursos APENAS da mesma origem.
Proteção X-XSS
Injete o cabeçalho HTTP com proteção X-XSS para mitigar o ataque de script entre sites.
- Modifique o arquivo nginx.conf para adicionar o seguinte
add_header X-XSS-Protection "1; mode=block";
- Salve o arquivo de configuração e reinicie o Nginx. Você pode usar o Teste de cabeçalhos ferramenta para verificar após a implementação.
Você também pode estar interessado em implementar cabeçalhos seguros recomendados pela OWASP que são explicados aqui .
Implementar Mod Security WAF
Adicione uma camada adicional de segurança implementando Web Firewall de aplicativos ModSecurity com Conjunto de Regras Básicas OWASP.
Alternativamente, se você pode considerar o uso de segurança baseada em nuvem como SUCURI na frente do servidor Nginx.
Mantenha o Nginx atualizado
Por último, mas não menos importante, você precisa manter seu Nginx atualizado, pois há muitos aprimoramentos de desempenho, correções de segurança e novos recursos sendo adicionados.
Espero que isso ajude você a manter seu Nginx seguro.
Em seguida, você pode estar interessado em aprender a construir Nginx para alto desempenho a partir do zero .