Cómo proteger Nginx con Let's Encrypt en CentOS 8

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación del cliente Let's Encrypt de Certbot
  • Paso 2: Actualización de las reglas del firewall
  • Paso 3 — Obtención de un certificado
  • Paso 4: Configurar la renovación automática
  • Conclusión
  • El autor seleccionó el Fondo de Ayuda COVID-19 para recibir una donación como parte del programa Write for DOnations.

    Introducción

    Let's Encrypt es una autoridad de certificación (CA) que proporciona certificados gratuitos para el cifrado de seguridad de la capa de transporte (TLS). Simplifica el proceso de creación, validación, firma, instalación y renovación de certificados al proporcionar un cliente de software: Certbot.

    En este tutorial, configurará un certificado TLS/SSL de Let's Encrypt en un servidor CentOS 8 que ejecuta Nginx como servidor web. Además, automatizará el proceso de renovación del certificado mediante un trabajo cron.

    Prerrequisitos

    Para completar esta guía, necesitarás:

    • Un servidor CentOS 8 configurado siguiendo la guía de configuración inicial del servidor CentOS 8, incluido un usuario no root con sudoprivilegios y un firewall.
    • Nginx instalado en el servidor CentOS 8 con un bloque de servidor configurado. Puedes aprender a configurarlo siguiendo nuestro tutorial Cómo instalar Nginx en CentOS 8.
    • Un nombre de dominio completamente registrado. Este tutorial lo utilizará your_domaincomo ejemplo. Puede comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o utilizar el registrador de dominios que prefiera.
    • 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_domainapunta 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

    Paso 1: Instalación del cliente Let's Encrypt de Certbot

    Primero, debe instalar el certbotpaquete de software. Inicie sesión en su máquina CentOS 8 como usuario no root:

    1. ssh sammy@your_server_ip

    El certbotpaquete no está disponible a través del administrador de paquetes de forma predeterminada. Deberá habilitar el repositorio EPEL para instalar Certbot.

    Para agregar el repositorio EPEL de CentOS 8, ejecute el siguiente comando:

    1. sudo dnf install epel-release

    Cuando se le solicite que confirme la instalación, escriba e ingrese y.

    Ahora que tiene acceso al repositorio adicional, instale todos los paquetes necesarios:

    1. sudo dnf install certbot python3-certbot-nginx

    Esto instalará Certbot y el complemento Nginx para Certbot, que es necesario para ejecutar el programa.

    Durante el proceso de instalación, te preguntará si quieres importar una clave GPG. Confírmala para que la instalación pueda completarse.

    Ya ha instalado el cliente Let's Encrypt, pero antes de obtener los certificados, debe asegurarse de que todos los puertos necesarios estén abiertos. Para ello, actualizará la configuración de su firewall en el siguiente paso.

    Paso 2: Actualización de las reglas del firewall

    Dado que la configuración de requisitos previos lo habilita firewalld, deberá ajustar la configuración del firewall para permitir conexiones externas en su servidor web Nginx.

    Para comprobar qué servicios ya están habilitados, ejecute el comando:

    1. sudo firewall-cmd --permanent --list-all

    Recibirás un resultado como este:

    Outputpublic  target: default  icmp-block-inversion: no  interfaces:  sources:  services: cockpit dhcpv6-client http ssh  ports:  protocols:  masquerade: no  forward-ports:  source-ports:  icmp-blocks:  rich rules:

    Si no lo ve httpen la lista de servicios, habilítelo ejecutando:

    1. sudo firewall-cmd --permanent --add-service=http

    Para permitir httpsel tráfico, ejecute el siguiente comando:

    1. sudo firewall-cmd --permanent --add-service=https

    Para aplicar los cambios, deberá volver a cargar el servicio de firewall:

    1. sudo firewall-cmd --reload

    Ahora que ha abierto su servidor al httpstráfico, está listo para ejecutar Certbot y obtener sus certificados.

    Paso 3 — Obtención de un certificado

    Ahora puedes solicitar un certificado SSL para tu dominio.

    Al generar el Certificado SSL para Nginx utilizando el certbotcliente Let's Encrypt, el cliente obtendrá e instalará automáticamente un nuevo certificado SSL que es válido para los dominios proporcionados como parámetros.

    Si desea instalar un único certificado válido para varios dominios o subdominios, puede pasarlos como parámetros adicionales al comando. El primer nombre de dominio en la lista de parámetros será el dominio base que Let's Encrypt utiliza para crear el certificado y, por ese motivo, pasará el nombre de dominio de nivel superior como el primero en la lista, seguido de cualquier subdominio o alias adicional. :

    1. sudo certbot --nginx -d your_domain -d www.your_domain

    Esto se ejecuta certbotcon el --nginxcomplemento y el dominio base será your_domain. Para ejecutar la instalación interactiva y obtener un certificado que cubre solo un dominio, ejecute el certbotcomando con:

    1. sudo certbot --nginx -d your_domain

    La certbotutilidad también puede solicitarle información del dominio durante el procedimiento de solicitud de certificado. Para utilizar esta función, llame certbotsin ningún dominio:

    1. sudo certbot --nginx

    Recibirá una guía paso a paso para personalizar las opciones de su certificado. Certbot le solicitará que proporcione una dirección de correo electrónico para la recuperación de claves perdidas y notificaciones, y que acepte los términos del servicio. Si no especificó sus dominios en la línea de comandos, Certbot buscará una server_namedirectiva y le proporcionará una lista de los nombres de dominio encontrados. Si sus archivos de bloques de servidor no especifican el dominio al que sirven explícitamente mediante la server_namedirectiva, Certbot le solicitará que proporcione los nombres de dominio manualmente.

    Para una mayor seguridad, Certbot configurará automáticamente la redirección de todo el tráfico en el puerto 80a 443.

    Cuando la instalación finalice con éxito, recibirás un mensaje similar a este:

    OutputIMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at:   /etc/letsencrypt/live/your_domain/fullchain.pem   Your key file has been saved at:   /etc/letsencrypt/live/your_domain/privkey.pem   Your cert will expire on 2021-02-26. To obtain a new or tweaked   version of this certificate in the future, simply run certbot again   with the "certonly" option. To non-interactively renew *all* of   your certificates, run "certbot renew" - 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

    Los archivos de certificado generados estarán disponibles dentro de un subdirectorio con el nombre de su dominio base en el /etc/letsencrypt/livedirectorio.

    Ahora que ha terminado de usar Certbot, puede comprobar el estado de su certificado SSL. Verifique el estado de su certificado SSL abriendo el siguiente enlace en su navegador web preferido (no olvide reemplazaryour_domaincon su dominio base):

    https://www.ssllabs.com/ssltest/analyze.html?d=your_domain

    Este sitio contiene una prueba SSL de SSL Labs, que se iniciará automáticamente. Al momento de escribir este artículo, la configuración predeterminada otorgará una calificación A.

    Ahora puede acceder a su sitio web mediante el httpsprefijo. Sin embargo, debe renovar los certificados periódicamente para que esta configuración siga funcionando. En el siguiente paso, se automatizará este proceso de renovación.

    Paso 4: Configurar la renovación automática

    Los certificados Let's Encrypt tienen una validez de 90 días, pero se recomienda renovarlos cada 60 días para permitir un margen de error. El cliente Let's Encrypt de Certbot tiene un renewcomando que verifica automáticamente los certificados instalados actualmente e intenta renovarlos si faltan menos de 30 días para la fecha de vencimiento.

    Puede probar la renovación automática de sus certificados ejecutando este comando:

    1. sudo certbot renew --dry-run

    La salida será similar a esto:

    OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Processing /etc/letsencrypt/renewal/your_domain.conf- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cert not due for renewal, but simulating renewal for dry runPlugins selected: Authenticator nginx, Installer nginxRenewing an existing certificatePerforming the following challenges:http-01 challenge for monitoring.pp.uaWaiting for verification...Cleaning up challenges- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -new certificate deployed with reload of nginx server; fullchain is/etc/letsencrypt/live/your_domain/fullchain.pem- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -** DRY RUN: simulating 'certbot renew' close to cert expiry**          (The test certificates below have not been saved.)Congratulations, all renewals succeeded. The following certs have been renewed:  /etc/letsencrypt/live/your_domain/fullchain.pem (success)...

    Tenga en cuenta que si creó un certificado empaquetado con varios dominios, solo el nombre de dominio base se mostrará en la salida, pero la renovación funcionará para todos los dominios incluidos en este certificado.

    Una forma práctica de garantizar que sus certificados no queden obsoletos es crear un crontrabajo que ejecute periódicamente el comando de renovación automática. Dado que la renovación primero verifica la fecha de vencimiento y solo ejecuta la renovación si faltan menos de 30 días para que caduque el certificado, es crear seguro un trabajo cron que se ejecutará todas las semanas o incluso todos los días.

    Edite el crontab para crear un nuevo trabajo que ejecutará la renovación dos veces al día. Para editar el crontab para el usuario root, ejecute:

    1. sudo crontab -e

    Su editor de texto abrirá el crontab predeterminado, que en este momento es un archivo de texto vacío. Ingrese al modo de inserción presionando iy agregue la siguiente línea:

    crontab

    0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)'  certbot renew --quiet

    Cuando haya terminado, presione ESCpara salir del modo de inserción y luego :wqy ENTERpara guardar y salir del archivo. Para obtener más información sobre el editor de texto Vi y su sucesor Vim, consulta nuestro tutorial Instalación y uso del editor de texto Vim en un servidor en la nube.

    Esto creará un nuevo trabajo cron que se ejecutará al mediodía ya la medianoche todos los días. python -c 'import random; import time; time.sleep(random.random() * 3600)'Seleccionará un minuto aleatorio dentro de la hora para sus tareas de renovación.

    El renewcomando para Certbot verificará todos los certificados instalados en el sistema y actualizará aquellos que estén configurados para caducar en menos de treinta días. --quietle dice a Certbot que no muestre información ni espere la entrada del usuario.

    Puede encontrar información más detallada sobre la renovación en la documentación de Certbot.

    Conclusión

    En esta guía, instale el cliente de Let's Encrypt Certbot, descargue certificados SSL para su dominio y configure la renovación automática de certificados. Si tienes alguna pregunta sobre el uso de Certbot, puedes consultar la documentación oficial de Certbot.

    También puedes consultar el blog oficial de Let's Encrypt para obtener actualizaciones importantes de vez en cuando.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion