Taller 3 Hardening Nginx
Taller 3 Hardening Nginx
Taller 3 Hardening Nginx
SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son protocolos web que se utilizan
para proteger el tráfico de datos normal envolviéndolos en forma cifrada.
Esta tecnología cuenta con un sistema de certificados que permite la comunicación privada
entre servidores y clientes. Crea una ruta segura para que los servidores envíen tráfico a los
clientes sin que otras partes alteren la información.
En este tutorial, lo guiaremos a través del proceso de creación de un certificado SSL / TLS
autofirmado y su uso en Nginx. En este caso, estamos usando el servidor.
requisitos
Ejecute el siguiente comando para crear un certificado y una clave autofirmada mediante SSL:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.crt
Abre: Esta herramienta de línea de comandos se utiliza para generar y administrar el
certificado OpenSSL, las claves y otros archivos.
Req.: Este es un subcomando que indica que se debe utilizar la gestión de solicitud de
firma de certificado (CSR) X.509. X.509 es el estándar de infraestructura para claves
públicas al que se adhieren TLS y SSL para la gestión de claves y certificados. En
nuestro caso estamos generando un nuevo certificado X.509 y por esta razón estamos
usando req.
-x509: Esto cambia el subcomando req. Informa a la utilidad que estamos creando un
certificado autofirmado en lugar de generar una CSR.
-Nodo: Esto le dice a OpenSSL que no proteja el certificado con una frase de
contraseña. Una frase de contraseña evita que Nginx lea nuestro archivo cuando se
inicia el servidor.
Días 365: Esto define la duración de la validez del certificado.
-nuevo clave rsa: 2048: Este es un comando que dice que estamos generando una
nueva clave y un nuevo certificado al mismo tiempo. Rsa: 2048 Indica al servicio que
genere una clave RSA de 2048 bits.
-keyout: Esta es una línea que le dice a OpenSSL que guarde la clave privada que creó.
-fuera: La línea le dice a OpenSSL dónde guardar el certificado creado.
Después del comando anterior, se le pedirá que responda algunas preguntas sobre el
certificado que desea generar.
Léalos atentamente y dé las respuestas correctas para completar el proceso. La línea
importante de esta sección requiere el nombre común, como SU nombre o el nombre de
dominio completo (FQDN) del servidor. En este caso, ingrese su nombre de dominio o la
dirección IP pública asignada al servidor. .
Necesitará estos archivos como referencia en los ajustes de configuración de Nginx. También
es importante crear un grupo DH (Diffie-Hellman) fuerte, que es esencial para negociar el
secreto hacia adelante con los clientes.
Sin embargo, antes de hacer eso, debemos hacer algunos ajustes en nuestra configuración
para dividir las secciones comunes en unidades reutilizables.
En este tutorial, vamos a copiar la configuración proporcionada por este sitio, pero
cambiaremos algunas líneas.
En este caso, estamos agregando nuestro solucionador de DNS para varias necesidades
ascendentes. Además, comentaremos la línea que es responsable del encabezado de
seguridad de transporte.
Sin embargo, comience haciendo una copia de seguridad del archivo de configuración actual:
$ sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-
available/example.com.bak
Abra su archivo y ajuste la línea apropiada como se muestra a continuación:
$ sudo nano /etc/nginx/sites-available/example.com
/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
En su archivo de configuración actual, actualice las instrucciones de la lista para el tráfico SSL
del servidor en el puerto 443 y SSL. También agregue los archivos de fragmentos que creó en
los dos pasos anteriores::
/etc/nginx/sites-available/example.com
server {
listen 443 ssl;
listen [::]:443 ssl;
include snippets/self-signed.conf;
include snippets/ssl-params.conf;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
. . .
}
Después del corchete de cierre (}) del bloque de arriba, agregue otro bloque de servidor al
suyo Archivo de configuración:
/etc/nginx/sites-available/example.com
. . .
server {
listen80;
listen [::]:80;
return302 https://$server_name$request_uri;
}
Si el firewall ufw está activado, debe ajustar la configuración del sistema para permitir el
tráfico de datos a través de SSL.
Una vez completada la instalación, Nginx registra varios perfiles con ufw.
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Debería tener un resultado como este para mostrar que su servidor web solo permite tráfico
HTTP:
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Para garantizar que el tráfico HTTPS fluya sin problemas, habilite el perfil “Nginx completo” y
elimine el perfil HTTP Nginx redundante:
producción
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Paso 4: reinicie Nginx para que los cambios surtan efecto
Después de realizar los ajustes en el firewall, reinicie el servicio Nginx para que los cambios
surtan efecto.
Además, asegúrese de que no haya errores en sus archivos. Para hacer esto, ejecute el
siguiente comando:
$ sudo nginx -t
https: // dominio_servidor
Dado que el certificado aún no está firmado por una autoridad de certificación confiable, lo
más probable es que reciba una advertencia como la siguiente:
Es posible que vea una advertencia que aparece porque el certificado SSL creado
anteriormente no fue firmado por una autoridad de certificación confiable:
Para verificar que el reenvío de contenido HTTP funciona correctamente, ingrese lo siguiente:
http: // dominio_servidor_o_IP
Si los resultados del icono de candado son los mismos, significa que la redirección está
funcionando correctamente.
Si está seguro de que solo desea permitir el tráfico cifrado, es importante cambiar la
configuración de Nginx para crear una redirección permanente.
Utilice el siguiente comando para abrir el archivo de configuración del bloque del servidor:
return301 https://$server_name$request_uri;
$ sudo nginx -t