Guía de seguridad y refuerzo del servidor web Nginx
Mejores prácticas de seguridad de Nginx.
Nginx es el más rápido growEs el servidor web líder en la industria y actualmente ocupa la segunda posición en participación de mercado.
fue inicialally lanzado en 2004 y desde entonces se ha ganado una excelente reputación y se ha utilizado en el millón de 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 la Nginx para un entorno de producción. Así que empecemos.
SSL / TLS
Implementar certificado SSLate
El primer paso en la seguridad web es implementar SSL para que pueda acceder a las aplicaciones web con https y agregar una capa de encryption en comunicación.
- Uso OpenSSL generarate RSC con 2048 bit y sha-2
openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
- El comando anterior generaráate CSR y archivos clave en la actualidad trabajando directamente. No olvide cambiar el nombre de los archivos .csr y .key.
Obtener el CSR firmado por un certificadoate autoridad y una vez que tenga el certificado firmadoate, puede implementarlos 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, que permitirá a Nginx escuchar en el puerto 443
server {
listen 443 ssl;
server_name bestflare.com;
ssl on;
ssl_certificate /opt/cert/bestflare.pem;
ssl_certificate_key /opt/cert/bestflare.key;
}
Nota: no olvides cambiar el certificado.ate y ruta del archivo clave.
- Guarde la configuración y reinicie Nginx. Un certificado SSL se implementó correctamente.
Optimización SSL / TLS
Tener SSL no significa que sea completamente seguro y ahí es donde, 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 la puntuación y la vulnerabilidad esencial.
Entonces, la calificación actual de SSL Labs es "DO" y un objetivo es convertirlo en "A"
Disable 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 agregue a continuación en el bloque del servidor
ssl_protocols TLSv1.2;
- Guarde el archivo ssl.conf y reinicie Nginx
Disable conjuntos de cifrado débiles
Los conjuntos de cifrado débiles pueden conducir a una vulnerabilidad como un atolladero, y es por eso que debemos permitir solo 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 !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
- Guarde el archivo y reinicie Nginx
Instalar certificado de cadenaate
No tener certificado de cadenaate también afecta la calificación general y esto puede mostrar un error cuando browsing en un b modernorowsEs como Chrome. Necesitas obtener un certificado de cadena.ate de la autoridad. Principalmente lo encontrará en su sitio web o simplemente en Google.
- Agregue el contenido del certificado de cadena en el certificado del sitio web.ate como abajo. En mi ejemplo, sería /opt/cert/bestflare.pem
- Guarde el archivo y reinicie Nginx
Asegure Diffie-Hellman para TLS
Diffie-Hellman es menos segura de lo que se creía. Una de las mejores prácticas lately agregado en una lista es para asegurar a Diffie-hellman. Generar un GRUPO DH único y agregar ssl_dhparam en el archivo ssl.conf hace esto.
- eneroate Grupo DH único mediante OpenSSL
openssl dhparam -out dhparams.pem 4096
- Tardará unos minutos y se generará.ate 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 Nginx
Eso debería ser suficiente para la optimización de SSL / TLS y probemos la URL nuevamente para ver la calificación.
¡Woo ho! Entonces ahora puedes ver que es "UN" calificación de SSLLabs. ¡Bien hecho!
Aquí 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;
}
Fuga de información
En la instalación predeterminada de Nginx tendrás mucha información confidencial revdescubierto, lo que puede ayudar a los piratas informáticos a prepararse para un ataque.
Si está trabajando en un entorno de cumplimiento de PCI, esto se considera una vulnerabilidad de fuga de información y debe corregir el elemento.
Tienes que usar server_tokens para disable la fuga de información. Esto lo he explicado en mi p.revioso artículo. Eliminar la versión del banner de encabezado del servidor en Nginx
Seguridad de aplicaciones web
La configuración predeterminada de Nginx no es perfecta y puede tener muchas vulnerabilidades, por eso las reforzamos para que sea segura.
Disable métodos HTTP no deseados
La mayoría de las veces, solo necesita una solicitud HTTP GET, HEAD y POST en su aplicación web. Permitir TRACE o DELETE es riesgoso ya que puede permitir ataques y potenciales ataques de seguimiento entre sitios.ally permitir que un hackerteal la información de las cookies.
- Modifique nginx.conf y agregue lo siguiente en el bloque del servidor
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
Guarde el archivo y reinicie Nginx. Esto ahora mostrará 405 No permitido si alguien está intentando usar RASTREO, ELIMINACIÓN, PONER, OPCIONES.
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
Puede inyectar X-FRAME-OPTIONS en el encabezado HTTP para prevEnt un ataque de clickjacking.
Esto se logra agregando a continuación en el archivo nginx.conf
add_header X-Frame-Options "SAMEORIGIN";
El encabezado superior indicará abrowser para cargar los recursos SÓLO desde el mismo origen.
Protección X-XSS
Inyecte encabezado HTTP con protección X-XSS para mitigarate Ataque de secuencias de comandos entre sitios.
- Modifique el archivo nginx.conf para agregar lo siguiente
add_header X-XSS-Protection "1; mode=block";
- 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 WAF Mod Security
Agregue una capa adicional de seguridad implementando Web Application Firewall ModSecurity Conjunto de reglas básicas de OWASP.
Alternativamente, si puede considerar el uso de seguridad basada en la nube como SUCURI frente al servidor Nginx.
Mantenga Nginx actualizadoate
Por último, pero no menos importante, debes mantener tu Nginx actualizadoate Como hay muchas mejoras de rendimiento, se están agregando correcciones de seguridad y nuevas funciones.
Espero que esto le ayude a mantener su Nginx seguro.
A continuación, puede que le interese aprender a construya Nginx para un alto rendimiento desde cero.