NginxGenericName Web Guia de segurança e proteção do servidor

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.

bestflare-ssl-cert

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.

ssl-labs-rating-c

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

cert-chain

  • 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.

ssllabs-a-rating

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 .

Artigos relacionados