0% encontró este documento útil (0 votos)
5 vistas8 páginas

Taller 3 Hardening Nginx

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1/ 8

Cómo configurar Nginx para usar un certificado SSL / TLS autofirmado

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

Antes de comenzar, necesitará lo siguiente:

 Un usuario no root con permisos sudo


 Un servidor Nginx instalado

Ahora profundicemos en el proceso.

Paso 1: cree un certificado autofirmado


Al implementar certificados SSL / TLS, se utilizan certificados públicos y una clave privada. El
certificado SSL es un documento público que se comparte con los clientes que solicitan el
contenido. Por otro lado, la clave SSL se utiliza para cifrar los mensajes enviados a los clientes y
debe mantenerse en secreto en su servidor.

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

Debería tener la salida a continuación:


OutputIT
CountryName (2 lettercode) [AU]:US
StateorProvinceName (fullname) [Some-State]:New York
LocalityName (eg, city) [ ]:New YorkCity
OrganizationName (eg, company) [Internet Widgits Pty Ltd]::Example
Company
OrganizationalUnitName (eg, section) [ ]:SSL Unit
CommonName (e.g. serverFQDNorYOURname) [ ]:server_IP_address
EmailAddress [ ]:admin@your_domain.com
Una vez que haya terminado, los dos archivos se guardarán en los subdirectorios correctos en
el / etc / ssl Directorio.

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.

Para hacer esto, ejecute el siguiente comando:


$ sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096
Este proceso puede llevar un tiempo, pero una vez que esté hecho, su grupo DH (Diffie-
Hellman) se guardará en /etc/nginx/dhparam.pem, que se puede usar en la configuración de
Nginx.

Paso 2: configurar el servidor web HTTP Nginx para usar SSL


Como ya hemos creado el certificado, la clave y los archivos, podemos configurar Nginx con
estos ajustes.

Sin embargo, antes de hacer eso, debemos hacer algunos ajustes en nuestra configuración
para dividir las secciones comunes en unidades reutilizables.

Cree un fragmento de configuración para la clave y el certificado SSL


Primero, cree un fragmento de la configuración de Nginx en el / etc / nginx /
snippets Directorio. Llamaremos a este archivo self-signing.conf.
$ sudo nano /etc/nginx/snippets/self-signed.conf
Ahora configure el ssl_certificate en el archivo asociado y ssl_certificate_key a su clave
asociada. Esto le da el siguiente resultado:
/etc/nginx/snippets/self-signed.conf
ssl_certificate /et##c/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
Luego guarde y salga del archivo.
Genere un fragmento de configuración para definir la configuración de SSL
El siguiente paso es crear un fragmento adicional con una configuración de cifrado SSL sólida.
Esto permite otras funciones adicionales para proteger su servidor.

En este caso elegiremos un nombre genérico como se muestra a continuación:


$ sudo nano /etc/nginx/snippets/ssl-params.conf
Para garantizar que Nginx SSL esté configurado de forma segura, utilizamos el formato del sitio
web Cipherli.st, que contiene pautas de cifrado fáciles de usar para software popular.

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.

Copie y pegue los siguientes detalles en su archivo de fragmentos llamado ssl-params.conf.


ssl_protocols TLSv1.2;
ssl_prefer_server_cipherson;
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-
SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-
RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_ticketsoff; # Requires nginx >= 1.5.9
ssl_staplingon; # Requires nginx >= 1.3.7
ssl_stapling_verifyon; # Requires nginx => 1.3.7
resolver8.8.8.88.8.4.4 valid=300s;
resolver_timeout5s;
# Disable strict transport security for now. You can uncomment the
following
# line if you understand the implications.
# add_header Strict-Transport-Security "max-age=63072000;
includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
Dado que solo usamos un certificado autofirmado, no es necesario incluir el grapado SSL.
Nginx desactivará automáticamente el grapado y seguirá funcionando correctamente.

Ahora guarde y salga del archivo.

Modificar la configuración de Nginx para hacer referencia a SSL


Cuando haya terminado con los fragmentos, ajuste la configuración de Nginx para permitir SSL.

En este ejemplo, usamos /etc/nginx/sites-available/example.com. Reemplace el nombre del


archivo en su configuración con el que desee.

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

Verá una salida como esta:

/etc/nginx/sites-available/example.com
server {
listen 80;
listen [::]:80;

server_name example.com www.example.com;

root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;

. . .
}

Puede encontrar varias instrucciones de configuración que incluyen secciones


como: raíz y índice puede aparecer como Ubicación, proxy_passu otras configuraciones. Es
importante tener en cuenta que está bien tener estas instrucciones. Solo tienes que actualizar
el escuchar Instrucciones y contienen los fragmentos de SSL.

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;

server_name example.com www.example.com;

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;

server_name example.com www.example.com;

return302 https://$server_name$request_uri;
}

La configuración anterior monitorea el puerto 80 y no solo redirige a HTTP.


Una vez que haya terminado, guarde y salga del archivo.

Paso 3: ajuste la configuración del firewall de Ufw

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.

Puede ver estos perfiles ejecutando el siguiente comando:

$ sudo ufw app list

Verá una salida como esta:

Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH

Ejecute el siguiente comando para ver qué configuración está habilitada:

$ sudo ufw status

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:

$ sudo ufw allow 'Nginx Full'


$ sudo ufw delete allow 'Nginx HTTP'

Su salida debería verse así:

$ sudo ufw status

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

Si todo funciona correctamente, debería obtener el siguiente resultado:

nginx: [warn] "ssl_stapling" ignored, issuer certificate not found


nginx: the configuration file /etc/nginx/nginx.confsyntax is ok
nginx: configuration file /etc/nginx/nginx.conftest is successful

Ahora reinicie nginx para que los cambios surtan efecto:

$ sudo systemctl restart nginx


Paso 5: probar el servidor SSL

A continuación, pruebe que el cifrado SSL funcione.

Ingrese el prefijo http: // en su navegador y luego su nombre de dominio:

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:

No se preocupe si ve este mensaje, es normal. La función de cifrado del certificado es


importante. Seleccione la opción Avanzado y el enlace a continuación para ir al host.
Serás redirigido a tu sitio web. En la barra de su navegador, puede ver lo que parece un
candado con un ícono “X” sobre eso. Esto significa que el certificado aún no se ha validado y el
cifrado aún no se ha completado.

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.

Paso 6: apunte a redireccionamientos permanentes

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:

$ sudo nano /etc/nginx/sites-available/example.com

Busque la devolución 302 y reemplácela con la devolución 301:

return301 https://$server_name$request_uri;

Guarda los cambios y cierra el archivo

A continuación, verifique la configuración para detectar posibles errores de sintaxis usando el


siguiente comando:

$ sudo nginx -t

Reinicie Nginx para completar los cambios:

$ sudo systemctl restart nginx

También podría gustarte