Cómo proteger Nginx con Let's Encrypt en Ubuntu 18.04

Introducción
Let's Encrypt es una autoridad de certificación (CA) que ofrece una forma de obtener e instalar certificados TLS/SSL gratuitos, lo que permite el cifrado HTTPS en servidores web. Agiliza el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos necesarios. Actualmente, todo el proceso de obtención e instalación de un certificado está completamente automatizado tanto en Apache como en Nginx.
En este tutorial, utilizará Certbot para un certificado SSL gratuito para Nginx en Ubuntu 18.04 y configurará su certificado para que se obtenga automáticamente.
En este tutorial se utilizará un archivo de bloque de servidor Nginx independiente en lugar del archivo predeterminado. Recomendamos crear nuevos archivos de bloque de servidor Nginx para cada dominio, ya que esto ayuda a evitar errores comunes y mantiene los archivos predeterminados como una configuración de respaldo.
Prerrequisitos
Para seguir este tutorial, necesitarás:
-
Un servidor Ubuntu 18.04 configurado siguiendo este tutorial de configuración inicial de servidor para Ubuntu 18.04, incluido un usuario sudo sin root y un firewall.
-
Un nombre de dominio completamente registrado. En este tutorial utilizará your_domain en todo momento. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o utilizar el registrador de dominios que prefieras.
-
Los siguientes dos registros DNS están configurados para su servidor. Puede consultar esta introducción a DigitalOcean DNS para obtener detalles sobre cómo agregarlos.
- Un registro A que
your_domain
apunta a la dirección IP pública de su servidor. - Un registro A que apunta a la dirección IP pública de su servidor.
www.your_domain
- Un registro A que
-
Nginx se instala siguiendo Cómo instalar Nginx en Ubuntu 18.04. Asegúrate de tener un bloque de servidor para tu dominio. Nuevamente, este tutorial se utilizará como ejemplo.
/etc/nginx/sites-available/your_domain
Paso 1: Instalación de Certbot
El primer paso para utilizar Let's Encrypt para obtener un certificado SSL es instalar el software Certbot en su servidor.
El proyecto Certbot recomienda que la mayoría de los usuarios instalen el software a través de snap
, un administrador de paquetes desarrollado originalmente por Canonical (la compañía detrás de Ubuntu) y ahora disponible en muchas distribuciones de Linux:
- sudo snap install --classic certbot
Su salida mostrará la versión actual de Certbot y la instalación exitosa:
Outputcertbot 1.21.0 from Certbot Project (certbot-eff✓) installed
A continuación, cree un enlace simbólico al /snap/bin/certbot
ejecutable recién instalado desde el /usr/bin/
directorio. Esto garantizará que el certbot
comando pueda ejecutarse correctamente en su servidor. Para ello, ejecute el siguiente ln
comando. Este contiene el -s
indicador que creará un enlace simbólico o flexible, en lugar de un enlace físico:
- sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot ahora está listo para usarse, pero para poder configurar SSL para Nginx, debe verificar parte de la configuración de Nginx.
Paso 2: Confirmación de la configuración de Nginx
Certbot debe poder encontrar el server
bloque correcto en la configuración de Nginx para poder configurar SSL automáticamente. En concreto, lo hace buscando una server_name
directiva que coincida con el dominio para el que solicita un certificado.
Si siguió el paso de configuración del bloque de servidor recomendado en el tutorial de instalación de Nginx, tendrá un bloque de servidor para su dominio con la directiva ya configurada adecuadamente./etc/nginx/sites-available/your_domain
server_name
Para comprobarlo, abra el archivo de bloque del servidor de su dominio utilizando nano
su editor de texto favorito:
- sudo nano /etc/nginx/sites-available/your_domain
Busque la server_name
línea existente. Debería versar así:
/etc/nginx/sitios-disponibles/su_dominio
...server_name your_domain www.your_domain;...
Si es así, salga del editor y continúe con el siguiente paso.
Si no es así, actualízalo para que coincida. Luego, guarde el archivo y sal del editor. Si estás usando, nano
puedes hacerlo presionando CTRL + X
entonces Y
y ENTER
.
Ahora verifique la sintaxis de sus ediciones de configuración:
- sudo nginx -t
Si recibe un error, vuelva a abrir el archivo de bloque del servidor y verifique si hay errores tipográficos o caracteres faltantes. Una vez que la sintaxis de su archivo de configuración sea correcta, vuelva a cargar Nginx para cargar la nueva configuración:
- sudo systemctl reload nginx
Certbot ahora puede encontrar el server
bloque correcto y actualizarlo.
A continuación, actualizará el firewall para permitir el tráfico HTTPS.
Paso 3: Permitir el uso de HTTPS a través del firewall
Si tiene el ufw
firewall habilitado, como lo recomiendan las guías de requisitos anteriores, deberá ajustar la configuración para permitir el tráfico HTTPS. Afortunadamente, Nginx registra algunos perfiles al ufw
momento de la instalación.
Puede comprobar la configuración actual ejecutando lo siguiente:
- sudo ufw status
Debería recibir un resultado como éste, indicando que solo se permite el tráfico HTTP al servidor web:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Para permitir el ingreso de tráfico HTTPS adicional, habilite el perfil completo de Nginx y elimine la asignación redundante del perfil HTTP de Nginx:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
Ahora, cuando ejecute el ufw status
comando, se reflejarán estas nuevas reglas:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereNginx Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Nginx Full (v6) ALLOW Anywhere (v6)
A continuación, ejecutará Certbot y obtendrá sus certificados.
Paso 4: obtención de un certificado SSL
Certbot ofrece una variedad de formas de obtener certificados SSL a través de complementos. El complemento Nginx se encargará de reconfigurar Nginx y recargar la configuración cuando sea necesario. Para usar este complemento, ejecute lo siguiente:
- sudo certbot --nginx -d your_domain -d your_domain
Esto se ejecuta certbot
con el --nginx
complemento, que se utiliza -d
para especificar los nombres para los cuales desea que sea válido el certificado.
Si es la primera vez que ejecuta certbot
, se le solicitará que ingrese una dirección de correo electrónico y que acepte los términos del servicio. Luego de hacerlo, certbot
se comunicará con el servidor Let's Encrypt para solicitar un certificado para su dominio. Si lo hace correctamente, recibirás el siguiente resultado:
OutputSuccessfully received certificate.Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pemKey is saved at: /etc/letsencrypt/live/your_domain/privkey.pemThis certificate expires on 2022-01-27.These files will be updated when the certificate renews.Certbot has set up a scheduled task to automatically renew this certificate in the background.Deploying certificateSuccessfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domainSuccessfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domainCongratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sus certificados se han descargado, instalado y cargado. Intente volver a cargar su sitio web utilizando https://
y observe el indicador de seguridad de su navegador. Debería indicar que el sitio está protegido correctamente, generalmente con un ícono de candado verde. Si prueba su servidor utilizando la Prueba de servidor de SSL Labs, obtendrá una calificación A.
Ahora que ha obtenido su certificado SSL, el paso final es probar el proceso de renovación.
Paso 5: Verificación de la renovación automática de Certbot
Los certificados de Let's Encrypt solo son válidos durante noventa días. Esto es para alentar a los usuarios a automatizar el proceso de renovación de sus certificados. El certbot
paquete que instalaste se encarga de esto agregando un script de renovación a /etc/cron.d
. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado que esté dentro de los treinta días posteriores a su vencimiento.
Para probar el proceso de renovación, puede realizar un ensayo con certbot
:
- sudo certbot renew --dry-run
Si no recibes ningún error, ya estás listo. Cuando sea necesario, Certbot renovará tus certificados y recargará Nginx para que se apliquen los cambios. Si el proceso de renovación automática falla, Let's Encrypt enviará un mensaje al correo electrónico que especificaste para avisarte cuando tu certificado esté a punto de caducar.
Conclusión
En este tutorial, instaló el cliente Let's Encrypt certbot
, descargó certificados SSL para su dominio, configuró Nginx para usar estos certificados y configuró la renovación automática de certificados. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen lugar para comenzar.
Deja una respuesta