Cómo proteger Nginx con Let's Encrypt en Debian 10

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de Certbot
  • Paso 2: Confirmación de la configuración de Nginx
  • Paso 3: Permitir el acceso a HTTPS a través del firewall
  • Paso 4: obtención de un certificado SSL
  • Paso 5: Verificación de la renovación automática de Certbot
  • Conclusión
  • Let's Encrypt es una autoridad de certificación (CA) que ofrece una forma sencilla de obtener e instalar certificados TLS/SSL gratuitos, lo que permite el cifrado HTTPS en servidores web. Simplifica 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 obtener un certificado SSL gratuito para Nginx en Debian 10 y configurará su certificado para que se renueve 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 Debian 10, configurado siguiendo este tutorial de configuración inicial de servidor para Debian 10, junto con un sudousuario no root y un firewall.

    • Un nombre de dominio completamente registrado. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o utilizar el registrador de dominios que prefieras.

    • Los dos siguientes 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
    • Nginx se instala siguiendo Cómo instalar Nginx en Debian 10. Asegúrese de tener un bloque de servidor para su dominio. Este tutorial lo 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.

    La instalación del python3-certbot-nginxpaquete desde los repositorios de Debian nos permitirá instalar y usar el complemento nginx de Cerbot. Trabajar con Python 3 y el python3-certbot-nginxpaquete aumenta la longevidad de nuestra configuración: Python 2 quedará obsoleto en enero de 2020, por lo que nuestra configuración garantiza la compatibilidad con Python 3. Debian 10 actualmente es compatible con Python 2 y Python 3.

    Antes de instalar el python3-certbot-nginxpaquete, actualice su lista de paquetes:

    1. sudo apt update

    A continuación, instale las dependencias del python3-certbot-nginxpaquete, que incluyen los paquetes python3-acme, python3-certbot, python3-mock, python3-openssl, python3-pkg-resources, python3-pyparsingy python3-zope.interface:

    1. sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface

    Por último, instala el python3-certbot-nginxpaquete:

    1. sudo apt install python3-certbot-nginx

    Certbot ahora está listo para usarse, pero para que pueda configurar SSL para Nginx, necesitamos verificar parte de la configuración de Nginx.

    Paso 2: Confirmación de la configuración de Nginx

    Certbot debe poder encontrar el serverbloque correcto en la configuración de Nginx para poder configurar SSL automáticamente. En concreto, busca una server_namedirectiva que coincida con el dominio solicitado.

    Si siguió el paso de configuración del bloque de servidor en el tutorial de instalación de Nginx, debería tener un bloque de servidor para su dominio con la directiva ya configurada adecuadamente./etc/nginx/sites-available/your_domainserver_name

    Para comprobarlo, abra el archivo de bloque del servidor de su dominio utilizando nanosu editor de texto favorito:

    1. sudo nano /etc/nginx/sites-available/your_domain

    Busque la server_namelínea existente. Debería verse así:

    /etc/nginx/sites-available/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ícelo para que coincida. Luego guarde el archivo, salga del editor y verifique la sintaxis de las modificaciones de configuración:

    1. 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 del archivo de configuración sea correcta, vuelva a cargar Nginx para cargar la nueva configuración:

    1. sudo systemctl reload nginx

    Certbot ahora puede encontrar el serverbloque correcto y actualizarlo.

    A continuación, actualicemos el firewall para permitir el tráfico HTTPS.

    Paso 3: Permitir el acceso a HTTPS a través del firewall

    Si tiene el ufwfirewall habilitado, como se recomienda en las guías de requisitos previos, deberá ajustar la configuración para permitir el tráfico HTTPS.

    Puede ver la configuración actual escribiendo:

    1. sudo ufw status

    Probablemente se verá así, lo que significa 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, permita el Nginx Fullperfil y elimine la Nginx HTTPasignación de perfil redundante:

    1. sudo ufw allow 'Nginx Full'
    2. sudo ufw delete allow 'Nginx HTTP'

    Tu estado ahora debería verse así:

    1. 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, ejecutemos Certbot y obtengamos nuestros 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, escriba lo siguiente:

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

    Esto se ejecuta certbotcon el --nginxcomplemento, que se utiliza -dpara especificar los nombres para los cuales queremos 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. Después de hacerlo, certbotse comunicará con el servidor Let's Encrypt y luego ejecutará un desafío para verificar que controla el dominio para el que está solicitando un certificado.

    Si esto tiene éxito, certbotle preguntará cómo desea configurar sus ajustes HTTPS.

    OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.-------------------------------------------------------------------------------1: No redirect - Make no further changes to the webserver configuration.2: Redirect - Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you're confident your site works on HTTPS. You can undo thischange by editing your web server's configuration.-------------------------------------------------------------------------------Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

    Seleccione su opción y luego presione ENTER. La configuración se actualizará y Nginx se recargará para recoger la nueva configuración. certbotfinalizará con un mensaje que le indicará que el proceso fue exitoso y dónde se almacenan sus certificados:

    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 2019-10-08. 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" - Your account credentials have been saved in your Certbot   configuration directory at /etc/letsencrypt. You should make a   secure backup of this folder now. This configuration directory will   also contain certificates and private keys obtained by Certbot so   making regular backups of this folder is ideal. - 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.

    Terminemos probando 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 certbotpaquete que instalamos se encarga de esto por nosotros 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:

    1. sudo certbot renew --dry-run

    Si no ve ningún error, ya está todo listo. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Nginx para que se apliquen los cambios. Si el proceso de renovación automática falla, Let's Encrypt le enviará un mensaje al correo electrónico que especificó para advertirle cuando su 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.

    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