Guía de seguridad y protección del servidor web Nginx

Mejores prácticas de seguridad de Nginx.


Nginx es el servidor web de más rápido crecimiento en la industria, y actualmente, ocupa el puesto número dos en participación de mercado.

Inicialmente se lanzó en 2004, y desde entonces se ha ganado una excelente reputación y se ha utilizado en los principales sitios más concurridos..

Hay una razón para eso: Nginx es ardientemente rápido.

En este artículo, hablaré sobre algunas de las guías esenciales para asegurar el Nginx para un entorno de producción. Así que empecemos.

SSL / TLS

Implementar certificado SSL

El primer paso en la seguridad web es tener SSL implementado para que pueda acceder a las aplicaciones web con https y agregar una capa de cifrado en la comunicación.

  • Use OpenSSL para generar CSR con 2048 bit y sha-2

openssl req -nodes -new -sha256 -newkey rsa: 2048 -keyout bestflare.key -out bestflare.csr

  • El comando anterior generará CSR y archivos de claves en el trabajo actual directamente. No olvides cambiar el nombre del archivo .csr y .key.

Obtenga la CSR firmada por una autoridad de certificación y una vez que tenga el certificado firmado, puede implementarlo en Nginx como se muestra a continuación.

  • Inicie sesión en el servidor Nginx
  • Vaya a la carpeta conf donde tiene un archivo ssl.conf.

Nota: En la instalación predeterminada en Linux, tendrá este archivo en /etc/nginx/conf.d.

  • Edite el archivo y agregue lo siguiente, lo que permitirá que Nginx escuche en el puerto 443

servidor {
escuchar 443 ssl;
nombre_servidor bestflare.com;
ssl en
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
}

Nota: no olvide cambiar el certificado y la ruta del archivo de clave.

  • Guarde la configuración y reinicie el Nginx. Un certificado SSL se implementa con éxito.

bestflare-ssl-cert

Optimización SSL / TLS

Tener SSL no significa que sea completamente seguro y ahí, como experto en seguridad web, debe aplicar una configuración para proteger el servidor web.

Para empezar, recomendaría ejecutar un Escaneo SSL contra el sitio web para encontrar el puntaje y la vulnerabilidad esencial.

ssl-labs-rating-c

Entonces, la calificación actual de SSL Labs es “C” y un objetivo es hacerlo “A”

Deshabilitar protocolos SSL / TLS débiles

SSL 3, TLS 1.0 y TLS 1.1 son vulnerables, y solo permitiremos un protocolo TLS 1.2 fuerte.

  • Edite el archivo ssl.conf y agréguelo a continuación en el bloque del servidor

ssl_protocols TLSv1.2;

  • Guarde el archivo ssl.conf y reinicie el Nginx

Deshabilitar conjuntos de cifrado débiles

Los conjuntos de cifrado débiles pueden generar vulnerabilidad como un logjam, y es por eso que necesitamos permitir solo un cifrado fuerte.

  • Agregue lo siguiente al bloque del servidor en el archivo 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! RC! ! MD5! EXP! PSK! SRP! DSS";

  • Guarde el archivo y reinicie Nginx

Instalar certificado de cadena

No tener un certificado de cadena también afecta la calificación general y esto puede mostrar un error al navegar en un navegador moderno como Chrome. Necesita obtener un certificado de cadena de la autoridad. En su mayoría lo encontrarás en su sitio web o solo en Google.

  • Agregue el contenido del certificado de cadena en el certificado del sitio web como se muestra a continuación. En mi ejemplo, sería /opt/cert/bestflare.pem

cadena cert

  • Guarde el archivo y reinicie el Nginx

Asegure a Diffie-Hellman para TLS

Diffie-Hellman es menos seguro de lo que se creía. Una de las mejores prácticas agregadas recientemente en una lista es asegurar a Diffie-hellman. Generar DH GROUP único y agregar ssl_dhparam en el archivo ssl.conf hace esto.

  • Genere un grupo DH único utilizando OpenSSL

openssl dhparam -out dhparams.pem 4096

  • Tardará unos minutos y generará un archivo dhparams.pem en un directorio de trabajo actual
  • Copie dhparams.pem a la carpeta cert
  • Modifique ssl.conf y agregue lo siguiente en el bloque del servidor

ssl_dhparam /opt/cert/dhparams.pem;

  • Guarde el archivo y reinicie el Nginx

Eso debería ser suficiente para la optimización SSL / TLS y vamos a probar la URL nuevamente para ver la calificación.

ssllabs-a-rating

Woo ho! Así que ahora puedes ver que es “UNA” calificación por SSLLabs. Bien hecho!

Aquí está completo ssl.conf

# Configuración del servidor HTTPS
servidor {
escuchar 443 ssl;
nombre_servidor bestflare.com;
ssl en
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers en;
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! RC! ! MD5! EXP! PSK! SRP! DSS";
ssl_dhparam /opt/cert/dhparams.pem;
}

Fuga de información

En la instalación predeterminada de Nginx, se revelará mucha información confidencial, que puede ayudar a los piratas informáticos a prepararse para un ataque.

Si está trabajando en un entorno de cumplimiento PCI, esto se considera una vulnerabilidad de fuga de información y debe corregir el elemento.

Debe usar server_tokens off para deshabilitar la fuga de información. He explicado esto en mi artículo anterior. Eliminar versión del encabezado del servidor Banner en Nginx

Seguridad de aplicaciones web

La configuración predeterminada de Nginx no es perfecta y puede tener muchas vulnerabilidades, por eso las endurecemos para que sea segura.

Deshabilitar métodos HTTP no deseados

La mayoría de las veces, solo necesitas OBTENER, CABEZA & POSTAR solicitud HTTP en su aplicación web. Permitir RASTREO o ELIMINAR es arriesgado, ya que puede permitir el ataque de Rastreo entre sitios y potencialmente permitir que un pirata informático robe la información de las cookies.

  • Modifique nginx.conf y agregue los siguientes en el bloque del servidor

if ($ request_method! ~ ^ (GET | HEAD | POST) $)
{
volver 405;
}

Guarde el archivo y reinicie el Nginx. Esto ahora mostrará 405 No permitido si alguien está tratando de usar TRACE, DELETE, PUT, OPTIONS.

Chandans-iMac: ~ chandan $ telnet bestflare.com 80
Intentando 128.199.100.162…
Conectado a bestflare.com.
El carácter de escape es ‘^]’.
TRACE / HTTP / 1.1
Anfitrión: prueba
HTTP / 1.1 405 no permitido
Servidor: nginx
Fecha: sábado, 11 de julio de 2015 06:04:34 GMT
Tipo de contenido: texto / html
Longitud del contenido: 166
Conexión: cerrar

Clickjacking Attack

Puede inyectar X-FRAME-OPTIONS en el encabezado HTTP para evitar un ataque de clickjacking.

Esto se logra al agregar a continuación en el archivo nginx.conf

add_header X-Frame-Options "SAMEORIGIN";

El encabezado anterior indicará a un navegador que cargue los recursos SOLO desde el mismo origen.

Protección X-XSS

Inyecte el encabezado HTTP con protección X-XSS para mitigar el ataque de secuencias de comandos entre sitios.

  • Modifique el archivo nginx.conf para agregar lo siguiente

add_header X-XSS-Protection "1; modo = bloque";

  • Guarde el archivo de configuración y reinicie Nginx. Puedes usar el Prueba de encabezados herramienta para verificar después de la implementación.

También puede estar interesado en implementar encabezados seguros recomendados por OWASP que se explican aquí.

Implementar Mod Security WAF

Agregue una capa adicional de seguridad mediante la implementación de ModSecurity de firewall de aplicaciones web con OWASP Core Rule Set.

Alternativamente, si puede considerar el uso de seguridad basada en la nube como SUCURI frente al servidor Nginx.

Mantenga Nginx actualizado

Por último, pero no menos importante, debe mantener su Nginx actualizado, ya que hay muchas mejoras de rendimiento, correcciones de seguridad y nuevas funciones que se están agregando..

Espero que esto te ayude a mantener tu Nginx seguro.

A continuación, puede estar interesado en aprender a construir Nginx para un alto rendimiento desde cero.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map