One place for hosting & domains

      alojar

      Cómo alojar un sitio web usando Cloudflare y Nginx en Ubuntu 18.04


      El autor seleccionó Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Cloudflare es un servicio que se encuentra entre el visitante y el servidor del propietario del sitio web, actuando como un proxy inverso para los sitios web. Cloudflare proporciona una Red de distribución de contenido (CDN), así como servicios de mitigación de DDoS y de servidor de nombres de dominio distribuidos.

      Nginx es un servidor web popular responsable de alojar algunos de los sitios de mayor tamaño y mayor tráfico en Internet. Es común que las organizaciones sirvan a sitios web con Nginx y utilicen Cloudflare como un proveedor de CDN y DNS.

      En este tutorial, protegerá su sitio web servido por Nginx con un certificado Origin CA de Cloudflare y a continuación configurará Nginx para usar solicitudes de incorporación de cambios autenticadas. Las ventajas de usar esta configuración son que se beneficia de la CDN de Cloudflare y de la rápida resolución DNS al tiempo que garantiza que todas las conexiones pasen a través de Cloudflare. Esto evita que cualquier solicitud maliciosa llegue a su servidor.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Paso 1: Generar un certificado TLS de Origin CA

      El Cloudflare Origin CA le permite generar un certificado TLS gratuito firmado por Cloudflare para instalarlo en su servidor Nginx. Mediante el certificado TLS generado por Cloudflare, puede proteger la conexión entre los servidores de Cloudflare y su servidor Nginx.

      Para generar un certificado con Origin CA, inicie sesión en su cuenta de Cloudflare en un navegador web. Seleccione el dominio que desea proteger y vaya a la sección SSL/TLS de su panel de control de Cloudflare. Desde ahí, vaya a la pestaña Servidor de origen y haga clic en el botón Crear certificado:

      Cree la opción de certificado en el panel de control de Cloudflare

      Deje la opción predeterminada de Permitir que Cloudflare genere una clave privada y una CSR seleccionada.

      Opciones de GUI de Origin CA

      Haga clic en Siguiente y verá un diálogo con el Certificado de origen y la Clave privada. Debe transferir tanto el certificado de origen como la clave privada desde Cloudflare a su servidor. Por razones de seguridad, la información de la clave privada no se mostrará de nuevo, de forma que debe copiarla a su servidor antes de hacer clic en Ok.

      Diálogo que muestra el certificado de origen y la clave privada

      Usaremos el directorio /etc/ssl en el servidor para guardar el certificado de origen y los archivos de claves privados. La carpeta ya existe en el servidor.

      Primero, copie el contenido del Certificado de origen que se muestra en el cuadro de diálogo de su navegador.

      A continuación, en su servidor, abra /etc/ssl/cert.pem en su editor de texto preferido:

      • sudo nano /etc/ssl/cert.pem

      Añada el contenido del certificado al archivo. Guarde y salga del editor.

      A continuación, vuelva a su navegador y copie el contenido de la clave privada. Abra el archivo /etc/ssl/key.pem para editarlo:

      • sudo nano /etc/ssl/key.pem

      Pegue la clave privada en el archivo, guárdelo y salga del editor.

      Nota: A veces, cuando copie el certificado y la clave desde el panel de control de Cloudflare y lo pegue en los archivos pertinentes del servidor, se insertan líneas en blanco. Nginx tratará esos certificados y claves como no válidos, de forma que asegúrese de que no haya líneas en blanco en sus archivos.

      Advertencia: Cloudflare solo confía en el certificado de Origin CA de Cloudflare y, por lo tanto, solo debería usar los servidores de origen que están activamente conectados a Cloudflare. Si en algún momento detiene o deshabilita Cloudflare, su certificado Origin CA arrojará un error de certificado no fiable.

      Ahora que copió los archivos de la clave y del certificado a su servidor, deberá actualizar la configuración de Nginx para usarlos.

      Paso 2: Instalar el certificado Origin CA en Nginx

      En la sección anterior, generó un certificado de origen y una clave privada usando el panel de control de Cloudflare y guardó los archivos en su servidor. Ahora actualizará la configuración Nginx para su sitio para usar el certificado de origen y la clave privada para proteger la conexión entre los servidores de Cloudflare y su servidor.

      Primero, asegúrese de que UFW permitirá el tráfico HTTPS. Habilite Nginx Full, que abrirá el puerto 80 (HTTP) y el puerto 443 (HTTPS):

      • sudo ufw allow 'Nginx Full'

      Ahora vuelva a cargar UFW:

      Por último, compruebe que se permiten sus nuevas reglas y que UFW está activo:

      Verá un resultado similar a este:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Ahora está listo para ajustar su bloque de servidor Nginx. Nginx crea un bloque de servidor predeterminado durante la instalación. Elimínelo si aún existe, ya que ya ha configurado un bloque de servidor personalizado para su dominio:

      • sudo rm /etc/nginx/sites-enabled/default

      A continuación, abra el archivo de configuración Nginx para su dominio:

      • sudo nano /etc/nginx/sites-available/your_domain

      El archivo debería tener este aspecto:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Modificaremos el archivo de configuración Nginx para hacer lo siguiente:

      • Escuche el puerto 80 y redireccione todas las solicitudes para usar https.
      • Escuche el puerto 443 y utilice el certificado de origen y la clave privada que añadió en la sección anterior.

      Modifique el archivo de forma que se vea lo siguiente:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Guarde el archivo y salga del editor.

      A continuación, compruebe que no haya errores de sintaxis en ninguno de sus archivos de configuración Nginx:

      Si no se encontraron problemas, reinicie Nginx para habilitar sus cambios:

      • sudo systemctl restart nginx

      Ahora vaya a la sección SSL/TLS del panel de control de Cloudflare, vaya a la pestaña Vista general y cambie el modo de cifrado SSL/TLS a Full (strict). Esto informa a Cloudflare para que cifre siempre la conexión entre Cloudflare y su servidor Nginx de origen.

      Habilite el modo SSL Full(strict) en el panel de control de Cloudflare

      Ahora visite su sitio web en https://your_domain para verificar que se haya configurado correctamente. Verá su página de inicio y el navegador informará de que el sitio es seguro.

      En la siguiente sección, configurará las incorporaciones de cambios de origen autenticadas para verificar que su servidor de origen de hecho está hablando con Cloudflare y no con otro servidor. Al hacerlo, Nginx se configurará para solo aceptar solicitudes que utilicen un certificado de cliente válido desde Cloudflare. Se eliminarán todas las solicitudes que no hayan pasado a través de Cloudflare.

      Paso 3: Configurar las incorporaciones de cambios de origen autenticadas

      El certificado Origin CA ayudará a Cloudflare a verificar que está hablando con el servidor de origen correcto. Este paso utilizará Autenticación de cliente TLS para verificar que su servidor Nginx de origen está hablando con Cloudflare.

      En una conexión TLS autenticada por el cliente, ambos lados proporcionan un certificado para verificarlo. El servidor de origen está configurado para solo aceptar solicitudes que utilizan un certificado de cliente válido desde Cloudflare. Las solicitudes que no hayan pasado a través de Cloudflare se eliminarán ya que no tendrán el certificado de Cloudflare. Esto significa que los atacantes no pueden eludir las medidas de seguridad de Cloudflare y conectarse directamente a su servidor Nginx.

      Cloudflare presenta los certificados firmados por una CA con el siguiente certificado:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      También puede descargar el certificado directamente desde Cloudflare aquí.

      Copie este certificado.

      A continuación, cree el archivo /etc/ssl/cloudflare.crt para guardar el certificado de Cloudflare:

      • sudo nano /etc/ssl/cloudflare.crt

      Añada el certificado al archivo. Guarde el archivo y cierre el editor.

      Ahora actualice su configuración Nginx para usar incorporaciones de cambios de origen autenticadas de TLS. Abra el archivo de configuración para su dominio:

      • sudo nano /etc/nginx/sites-available/your_domain

      Añada las directivas ssl_client_certificate y ssl_verify_client como se muestra en el siguiente ejemplo:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl        on;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Guarde el archivo y salga del editor.

      A continuación, compruebe que no haya errores de sintaxis en su configuración Nginx:

      Si no se encontraron problemas, reinicie Nginx para habilitar sus cambios:

      • sudo systemctl restart nginx

      Por último, para habilitar las incorporaciones de cambios autenticadas, abra la sección SSL/TLS en el panel de control de Cloudflare, vaya a la pestaña Servidor de origen y cambie la opción Incorporaciones de cambios de origen autenticadas.

      Habilite las incorporaciones de cambios de origen autenticadas

      Ahora visite su sitio web en https://your_domain para verificar que se haya configurado correctamente. Como antes, verá su página de inicio.

      Para verificar que su servidor solo aceptará las solicitudes firmadas por la CA de Cloudflare, cambie la opción Incorporaciones de cambios de origen autenticadas para deshabilitarlo y vuelva a cargar su sitio web. Debería obtener el siguiente mensaje de error:

      Mensaje de error

      Su servidor de origen crea un error si la CA de Cloudflare no firma una solicitud.

      Nota: La mayoría de los navegadores almacenarán solicitudes de caché, de forma que para ver el cambio anterior puede usar el modo de navegación de Incógnito/privado en su navegador. Para evitar que Cloudflare almacene las solicitudes de caché mientras configura su sitio web, vaya a Visión general en el panel de control de Cloudflare y cambie el modo de desarrollo.

      Ahora que sabe que funciona correctamente, vuelva a la sección SSL/TLS en el panel de control de Cloudflare, vaya a la pestaña Servidor de origen y cambie la opción Incorporaciones de cambios de origen autenticadas para habilitarlo.

      Conclusión

      En este tutorial, aseguró su sitio web con Nginx cifrando el tráfico entre Cloudflare y el servidor Nginx usando un certificado Origin CA de Cloudflare. A continuación, configuró las incorporaciones de cambios de origen autenticadas en el servidor Nginx para asegurarse de que solo acepta solicitudes de los servidores de Cloudflare, evitando a cualquier otra persona conectarse directamente al servidor Nginx.



      Source link

      Cómo alojar un sitio web usando Cloudflare y Nginx en Ubuntu 20.04


      El autor seleccionó Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Cloudflare es un servicio que se encuentra entre el visitante y el servidor del propietario del sitio web, que actúa como un proxy inverso para los sitios web. Cloudflare proporciona una Red de distribución de contenido (CDN), así como servicios de mitigación de DDoS y de servidor de nombres de dominio distribuidos.

      Nginx es un servidor web popular responsable de alojar algunos de los sitios de mayor tamaño y mayor tráfico en Internet. Es común que las organizaciones sirvan a sitios web con Nginx y utilicen Cloudflare como un proveedor de CDN y DNS.

      En este tutorial, protegerá su sitio web servido por Nginx con un certificado Origin CA de Cloudflare y a continuación configurará Nginx para usar solicitudes de incorporación de cambios autenticadas. Las ventajas de usar esta configuración son que se beneficia de la CDN de Cloudflare y de la rápida resolución DNS al tiempo que garantiza que todas las conexiones pasen a través de Cloudflare. Esto evita que cualquier solicitud maliciosa llegue a su servidor.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Paso 1: Generar un certificado TLS de Origin CA

      El Cloudflare Origin CA le permite generar un certificado TLS gratuito firmado por Cloudflare para instalarlo en su servidor Nginx. Mediante el certificado TLS generado por Cloudflare, puede proteger la conexión entre los servidores de Cloudflare y su servidor Nginx.

      Para generar un certificado con Origin CA, inicie sesión en su cuenta de Cloudflare en un navegador web. Seleccione el dominio que desea proteger y vaya a la sección SSL/TLS de su panel de control de Cloudflare. Desde ahí, vaya a la pestaña Servidor de origen y haga clic en el botón Crear certificado:

      Cree la opción de certificado en el panel de control de Cloudflare

      Deje la opción predeterminada de Permitir que Cloudflare genere una clave privada y una CSR seleccionada.

      Opciones de GUI de Origin CA

      Haga clic en Siguiente y verá un diálogo con el Certificado de origen y la Clave privada. Debe transferir tanto el certificado de origen como la clave privada desde Cloudflare a su servidor. Por razones de seguridad, la información de la clave privada no se mostrará de nuevo, de forma que debe copiarla a su servidor antes de hacer clic en Ok.

      Diálogo que muestra el certificado de origen y la clave privada

      Usaremos el directorio /etc/ssl en el servidor para guardar el certificado de origen y los archivos de claves privados. La carpeta ya existe en el servidor.

      Primero, copie el contenido del Certificado de origen que se muestra en el cuadro de diálogo de su navegador.

      A continuación, en su servidor, abra /etc/ssl/cert.pem en su editor de texto preferido:

      • sudo nano /etc/ssl/cert.pem

      Añada el contenido del certificado al archivo. Guarde y salga del editor.

      A continuación, vuelva a su navegador y copie el contenido de la clave privada. Abra el archivo /etc/ssl/key.pem para editarlo:

      • sudo nano /etc/ssl/key.pem

      Pegue la clave privada en el archivo, guárdelo y salga del editor.

      Nota: A veces, cuando copie el certificado y la clave desde el panel de control de Cloudflare y lo pegue en los archivos pertinentes del servidor, se insertan líneas en blanco. Nginx tratará esos certificados y claves como no válidas, de forma que asegúrese de que no haya líneas en blanco en sus archivos.

      Advertencia: Cloudflare solo confía en el certificado de Origin CA de Cloudflare y, por tanto, solo debería usar los servidores de origen que están activamente conectados a Cloudflare. Si en algún momento detiene o deshabilita Cloudflare, su certificado Origin CA arrojará un error de certificado no fiable.

      Ahora que copió los archivos de la clave y del certificado a su servidor, deberá actualizar la configuración de Nginx para usarlos.

      Paso 2: Instalar el certificado Origin CA en Nginx

      En la sección anterior, generó un certificado de origen y una clave privada usando el panel de control de Cloudflare y guardó los archivos en su servidor. Ahora actualizará la configuración Nginx para su sitio para usar el certificado de origen y la clave privada para proteger la conexión entre los servidores de Cloudflare y su servidor.

      Primero, asegúrese de que UFW permitirá el tráfico HTTPS. Habilite Nginx Full, que abrirá el puerto 80 (HTTP) y el puerto 443 (HTTPS):

      • sudo ufw allow 'Nginx Full'

      Ahora vuelva a cargar UFW:

      Por último, compruebe que se permiten sus nuevas reglas y que UFW está activo:

      Verá un resultado similar a este:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Ahora está listo para ajustar su bloque de servidor Nginx. Nginx crea un bloque de servidor predeterminado durante la instalación. Elimínelo si aún existe, ya que ya ha configurado un bloque de servidor personalizado para su dominio:

      • sudo rm /etc/nginx/sites-enabled/default

      A continuación, abra el archivo de configuración Nginx para su dominio:

      • sudo nano /etc/nginx/sites-available/your_domain

      El archivo debería tener este aspecto:

      /etc/nginx/sites-available/your_domain

      server {
              listen 80;
              listen [::]:80;
      
              root /var/www/your_domain/html;
              index index.html index.htm index.nginx-debian.html;
      
              server_name your_domain www.your_domain;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      }
      
      

      Modificaremos el archivo de configuración Nginx para hacer lo siguiente:

      • Escuche el puerto 80 y redireccione todas las solicitudes para usar https.
      • Escuche el puerto 443 y utilice el certificado de origen y la clave privada que añadió en la sección anterior.

      Modifique el archivo de forma que se vea lo siguiente:

      /etc/nginx/sites-available/your_domain

      server {
          listen 80;
          listen [::]:80;
          server_name your_domain www.your_domain;
          return 302 https://$server_name$request_uri;
      }
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
      
          server_name your_domain www.your_domain;
      
          root /var/www/your_domain/html;
          index index.html index.htm index.nginx-debian.html;
      
      
          location / {
                  try_files $uri $uri/ =404;
          }
      }
      

      Guarde el archivo y salga del editor.

      A continuación, compruebe que no haya errores de sintaxis en ninguno de sus archivos de configuración Nginx:

      Si no encontró problemas, reinicie Nginx para habilitar sus cambios:

      • sudo systemctl restart nginx

      Ahora vaya a la sección SSL/TLS del panel de control de Cloudflare, vaya a la pestaña Vista general, y cambie el modo de cifrado SSL/TLS a Full (strict). Esto informa a Cloudflare para que cifre siempre la conexión entre Cloudflare y su servidor Nginx de origen.

      Habilite el modo SSL Full(strict) en el panel de control de Cloudflare

      Ahora visite su sitio web en https://your_domain para verificar que se haya configurado correctamente. Verá su página de inicio y el navegador informará de que el sitio es seguro.

      En la siguiente sección, configurará las incorporaciones de cambios de origen autenticadas para verificar que su servidor de origen de hecho está hablando con Cloudflare y no con otro servidor. Al hacerlo, Nginx se configurará para solo aceptar solicitudes que utilicen un certificado de cliente válido desde Cloudflare. Se eliminarán todas las solicitudes que no hayan pasado a través de Cloudflare.

      Paso 3: Configurar las incorporaciones de cambios de origen autenticadas

      El certificado Origin CA ayudará a Cloudflare a verificar que está hablando con el servidor de origen correcto. Este paso utilizará Autenticación de cliente TLS para verificar que su servidor Nginx de origen está hablando con Cloudflare.

      En una conexión TLS autenticada por el cliente, ambos lados proporcionan un certificado para verificarlo. El servidor de origen está configurado para solo aceptar solicitudes que utilizan un certificado de cliente válido desde Cloudflare. Las solicitudes que no hayan pasado a través de Cloudflare se eliminarán, ya que no tendrán el certificado de Cloudflare. Esto significa que los atacantes no pueden eludir las medidas de seguridad de Cloudflare y conectarse directamente a su servidor Nginx.

      Cloudflare presenta los certificados firmados por una CA con el siguiente certificado:

      -----BEGIN CERTIFICATE-----
      MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
      BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
      aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
      cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
      MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
      BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
      VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
      ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
      ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
      42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
      ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
      hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
      QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
      Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
      aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
      lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
      PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
      CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
      +4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
      AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
      DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
      alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
      QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
      zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
      VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
      6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
      0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
      5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
      fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
      bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
      iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
      AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
      fVQ6VpyjEXdiIXWUq/o=
      -----END CERTIFICATE-----
      

      También puede descargar el certificado directamente desde Cloudflare aquí.

      Copie este certificado.

      A continuación, cree el archivo /etc/ssl/cloudflare.crt para guardar el certificado de Cloudflare:

      • sudo nano /etc/ssl/cloudflare.crt

      Añada el certificado al archivo. Guarde el archivo y cierre el editor.

      Ahora actualice su configuración Nginx para usar incorporaciones de cambios de origen autenticadas de TLS. Abra el archivo de configuración para su dominio:

      • sudo nano /etc/nginx/sites-available/your_domain

      Añada las directivas ssl_client_certificate y ssl_verify_client como se muestra en el siguiente ejemplo:

      /etc/nginx/sites-available/your_domain

      . . .
      
      server {
      
          # SSL configuration
      
          listen 443 ssl http2;
          listen [::]:443 ssl http2;
          ssl_certificate         /etc/ssl/cert.pem;
          ssl_certificate_key     /etc/ssl/key.pem;
          ssl_client_certificate /etc/ssl/cloudflare.crt;
          ssl_verify_client on;
      
          . . .
      

      Guarde el archivo y salga del editor.

      A continuación, pruebe Nginx para ver que no haya errores de sintaxis en su configuración Nginx:

      Si no se encontraron problemas, reinicie Nginx para habilitar sus cambios:

      • sudo systemctl restart nginx

      Por último, para habilitar incorporaciones de cambios autenticadas, abra la sección SSL/TLS en el panel de control de Cloudflare, vaya a la pestaña Servidor de origen y cambie la opción Incorporaciones de cambios de origen autenticadas.

      Habilite las incorporaciones de cambios de origen autenticadas

      Ahora visite su sitio web en https://your_domain para verificar que se haya configurado correctamente. Como antes, verá su página de inicio.

      Para verificar que su servidor solo aceptará las solicitudes firmadas por la CA de Cloudflare, cambie la opción Incorporaciones de cambios de origen autenticadas para deshabilitarlo y vuelva a cargar su sitio web. Debería obtener el siguiente mensaje de error:

      Mensaje de error

      Su servidor de origen crea un error si la CA de Cloudflare no firma una solicitud.

      Nota: La mayoría de los navegadores almacenarán solicitudes de caché, de forma que para ver el cambio anterior puede usar el modo de navegación de Incógnito/privado en su navegador. Para evitar que Cloudflare almacene las solicitudes de caché mientras configura su sitio web, vaya a Visión general en el panel de control de Cloudflare y cambie el modo de desarrollo.

      Ahora que sabe que funciona correctamente, vuelva a la sección SSL/TLS en el panel de control de Cloudflare, vaya a la pestaña Servidor de origen y cambie la opción Incorporaciones de cambios de origen autenticadas para habilitarlo.

      Conclusión

      En este tutorial, aseguró su sitio web con Nginx cifrando el tráfico entre Cloudflare y el servidor Nginx usando un certificado Origin CA de Cloudflare. A continuación, configuró las incorporaciones de cambios de origen autenticados en el servidor Nginx para asegurarse de que solo acepta solicitudes de los servidores de Cloudflare, evitando a cualquier otra persona conectarse directamente al servidor Nginx.



      Source link

      Cómo alojar un sitio web con Caddy en Ubuntu 18.04


      El autor seleccionó la Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.

      Introducción

      Caddy es un servidor web diseñado con la simplicidad y la seguridad que provienen de varias funciones útiles para alojar sitios web. Por ejemplo, puede obtener y administrar automáticamente certificados de seguridad de la capa de transporte (TSL) de Let´s Encrypt para habilitar HTTPS e incluye asistencia para HTTP/2. HTTPS es un sistema para proteger el tráfico entre sus usuarios y su servidor, y se está transformando rápidamente en una expectativa básica de cualquier funcionamiento de sitio web en producción; sin este, Chrome y Firefox advertirán que su sitio web “No es seguro” si los usuarios intentan enviar información de inicio de sesión.

      Anteriormente, el método recomendado para instalar Caddy era descargar binarios previamente compilados del sitio web del proyecto Caddy. No obstante, los cambios en la manera en la que funciona la licencia de Caddy implican que ya no tendrá permitido usar estos binarios previamente compilados con fines comerciales, a menos que pague un cargo de licencia, incluso si solo usa Caddy de manera interna dentro de una empresa. Afortunadamente, el código fuente de Caddy todavía es completamente abierto y puede compilar Caddy por su cuenta para evitar inmiscuirse en problemas de licencias.

      A través de este tutorial, compilará Caddy a partir de código fuente y lo utilizará para alojar un sitio web protegido con HTTPS. Esto implica compilarlo, configurarlo mediante Caddyfile e instalar complementos. Con el tiempo, aprenderá a actualizar su instalación cuando se lance una nueva versión.

      Requisitos previos

      Paso 1: Compilar Caddy

      En este paso, compilará Caddy a partir de código fuente con la posibilidad de agregar complementos después, todo ello sin cambiar el código fuente de Caddy.

      Para este tutorial, almacenará el código fuente en ~/caddy. Para crear ese directorio, ejecute el siguiente comando:

      Diríjase a este:

      Guardará el código fuente para ejecutar y personalizar Caddy en un archivo llamado caddy.go. Créelo usando el siguiente comando:

      Añada las siguientes líneas:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Este código importa Caddy directamente desde Github (por medio de Git) y lo inicia desde la función de entrada main. Si desea habilitar telemetría, quite el comentario de la línea caddymain.EnableTelemetry y fije el valor en true. Cuando termine, guarde y cierre el archivo.

      Para que caddy.go pueda usar las dependencias importadas, deberá inicializarlo como un módulo:

      Output

      go: creating new go.mod: module caddy

      En este punto, estará listo para compilar la versión básica de Caddy a partir del código de fuente anterior ejecutando lo siguiente:

      Habrá muchos resultados en los que se detallarán las bibliotecas de Go que descargó como dependencias necesarias para compilar. El ejecutable que surja se almacenará en $GOPATH/bin​​​​​​, como se explica en los requisitos previos.

      Al finalizar, intente ejecutar Caddy:

      Visualizará un resultado similar al siguiente:

      Output

      Activating privacy features... done. Serving HTTP on port 2015 http://:2015 WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with `ulimit -n 8192`.

      Esto significa que Caddy se inició de forma correcta y está disponible en el puerto 2015. Réstele importancia al mensaje de advertencia, porque ese límite se ajustará en los siguientes pasos sin intervención por su parte. Para salir, presione CTRL + C.

      Ya compiló y ejecutó Caddy. En el paso siguiente, instalará Caddy como servicio para que se inicie automáticamente con el arranque y luego ajuste la configuración de propiedad y los permisos para garantizar la seguridad del servidor.

      Paso 2: Instalar Caddy

      Ahora que verificó que puede compilar y ejecutar Caddy, es momento de configurar un servicio systemd para que Caddy se pueda abrir automáticamente durante el inicio del sistema. Si desea comprender mejor systemd, consulte nuestro tutorial Aspectos básicos de systemd.

      Para comenzar, traslade el binario de Caddy a /usr/local/bin, la ubicación estándar para binarios que no están administrados por el administrador de paquetes de Ubuntu y no son claves para el funcionamiento del sistema:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/

      Luego, cambie la propiedad del binario de Caddy al usuario root:

      • sudo chown root:root /usr/local/bin/caddy

      Esto evitará que otras cuentas modifiquen el ejecutable. No obstante, aunque el usuario root sea el propietario de Caddy, se recomienda ejecutarlo solo con otras cuentas que no sean root presentes en el sistema. Esto garantiza que, en caso de que Caddy (u otro programa) quede comprometido, el atacante no pueda modificar el binario ni ejecutar comandos como root.

      A continuación, fije los permisos del binario en 755. Esto otorgará permisos root completos de lectura, escritura y ejecución para el archivo; mientras tanto, otros usuarios solo podrán leerlo y ejecutarlo.

      • sudo chmod 755 /usr/local/bin/caddy

      Debido a que el proceso de Caddy no se ejecutará como root, Linux evitará que se vincule a los puertos 80 y 443 (los puertos estándares para HTTP y HTTPS, respectivamente), ya que estas son operaciones con privilegios. Para que su dominio pueda acceder a Caddy fácilmente, este último debe vincularse con uno de estos puertos, según el protocolo. De lo contrario, deberá agregar un número de puerto específico a la URL de dominio en el navegador para ver el contenido que tendrá.

      Pare permitir que Caddy se vincule a puertos bajos sin ejecutarse como root, ejecute el siguiente comando:

      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      La utilidad setcap establece capacidades de archivos. En este comando, asigna la capacidad CAP_NET_BIND_SERVICE al binario Caddy, que permite que un ejecutable se vincule a un puerto menor que el 1024.

      Con esto, habrá finalizado la configuración del binario de Caddy y estará listo para comenzar a escribir la configuración de Caddy. Cree un directorio en el que almacenará los archivos de configuración de Caddy ejecutando el siguiente comando:

      Luego, establezca el usuario y los permisos de grupo correctos para él:

      • sudo chown -R root:www-data /etc/caddy

      Configurar el usuario como root y el grupo como www-data garantiza que Caddy haya leído y escrito el acceso a la carpeta (por medio del grupo www-data) y que solo la cuenta del superusuario tenga los mismos derechos de lectura y modificación. www-data es el usuario y grupo predeterminados para los servidores web en Ubuntu.

      Más adelante, habilitará el aprovisionamiento automático de certificados TLS desde Let´s Encrypt. Para ello, prepare un directorio para almacenar cualquier certificado TLS que Caddy obtendrá y otórguele las mismas reglas de propiedad que las del directorio /etc/caddy:

      • sudo mkdir /etc/ssl/caddy
      • sudo chown -R root:www-data /etc/ssl/caddy

      Debe ser posible para Caddy escribir certificados en este directorio y leer desde este para cifrar solicitudes. Por este motivo, modifique los permisos para el directorio /etc/ssl/caddy, de modo que solo sea accesible mediante root y www-data:

      • sudo chmod 0770 /etc/ssl/caddy

      A continuación, cree un directorio para almacenar los archivos que Caddy alojará:

      Luego, defina el propietario del directorio y agrúpelo en www-data:

      • sudo chown www-data:www-data /var/www

      Caddy lee la configuración desde un archivo denominado Caddyfile, almacenado en /etc/caddy. Cree el archivo en un disco. Para ello, ejecute lo siguiente:

      • sudo touch /etc/caddy/Caddyfile

      Para instalar el servicio Caddy, descargue el archivo de la unidad systemd del repositorio de Github de Caddy a /etc/systemd/system. Para ello, ejecute lo siguiente:

      • sudo sh -c 'curl https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service > /etc/systemd/system/caddy.service'

      Modifique los permisos del archivo de servicio para que solo pueda modificarlo su propietario, root:

      • sudo chmod 644 /etc/systemd/system/caddy.service

      Luego vuelva a cargar systemd para detectar el servicio de Caddy:

      • sudo systemctl daemon-reload

      Para verificar si systemd detectó el servicio de Caddy, ejecute systemctl status:

      • sudo systemctl status caddy

      Verá un resultado similar a lo siguiente:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: e Active: inactive (dead) Docs: https://caddyserver.com/docs

      Si ve este mismo resultado, significa que systemd detectó correctamente el servicio nuevo.

      Como parte del requisito previo de configuración inicial del servidor, habilitó ufw, Uncomplicated Firewall, y permitió conexiones SSH. Para que Caddy provea el tráfico de HTTP y HTTPS del servidor, deberá permitirlos en ufw; para ello, ejecute el siguiente comando:

      • sudo ufw allow proto tcp from any to any port 80,443

      El resultado será lo siguiente:

      Output

      Rule added Rule added (v6)

      Utilice ufw status para verificar si sus cambios funcionaron:

      Verá el siguiente resultado:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80,443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80,443/tcp (v6) ALLOW Anywhere (v6)

      De esta manera, finalizó su instalación de Caddy. Sin embargo, no está configurado para presentar nada. En el siguiente paso, configurará Caddy para acceder a archivos desde el directorio /var/www.

      Paso 3: Configurar Caddy

      En esta sección, escribirá la configuración básica de Caddy para acceder a archivos estáticos de su servidor.

      Para empezar, cree un archivo HTML básico en /var/www, llamado index.html:

      • sudo nano /var/www/index.html

      Añada las siguientes líneas:

      /var/www/index.html

      <!DOCTYPE html>
      <html>
      <head>
        <title>Hello from Caddy!</title>
      </head>
      <body>
        <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
      </body>
      </html>
      

      Cuando se observe en un navegador web, este archivo mostrará un encabezado con el texto This page is being served via Caddy. Guarde y cierre el archivo.

      Abra el archivo de configuración Caddyfile que creó anteriormente para editarlo:

      • sudo nano /etc/caddy/Caddyfile

      Añada las siguientes líneas:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
      }
      

      Esta es una configuración de Caddy básica y establece que el puerto 80 de su servidor debe proporcionarse con los archivos de /var/www y debe comprimirse mediante gzip para reducir los tiempos de carga de la página por parte del cliente.

      En la mayoría de los casos, Caddy le permite personalizar más las directivas de configuración. Por ejemplo, puede limitar la compresión de gzip solo a archivos HTML y PHP y fijar el nivel de compresión en 6 (siendo 1 el más bajo y 9 el más alto) ampliando la directiva con llaves e indicando las subdirectivas abajo:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip {
            ext .html .htm .php
            level 6
        }
      }
      

      Cuando termine, guarde y cierre el archivo.

      Caddy tiene muchas directivas diferentes para muchos casos de uso. Por ejemplo, la directiva fastcgi podría ser útil para habilitar PHP. La directiva markdown se podría usar para convertir automáticamente archivos Markdown a HTML antes de presentarlos, lo cual sería útil para crear un simple blog.

      Para probar si todo funciona correctamente, inicie el servicio Caddy:

      • sudo systemctl start caddy

      A continuación, ejecute systemctl status​​​ para buscar información sobre el estado del servicio Caddy:

      • sudo systemctl status caddy

      Observará lo siguiente:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-03-12 11:17:49 UTC; 11s ago Docs: https://caddyserver.com/docs Main PID: 3893 (caddy) Tasks: 7 (limit: 1152) CGroup: /system.slice/caddy.service └─3893 /usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp Mar 12 11:17:49 caddy-article-update systemd[1]: Started Caddy HTTP/2 web server. Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Caddy version: v1.0.5 Mar 12 11:17:49 caddy-article-update caddy[3893]: Activating privacy features... done. Mar 12 11:17:49 caddy-article-update caddy[3893]: Serving HTTP on port 80 Mar 12 11:17:49 caddy-article-update caddy[3893]: http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Serving http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO][cache:0xc00007a7d0] Started certificate maintenance routine Mar 12 11:17:49 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 1): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 Mar 12 11:17:57 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 2): Post "https://telemetry.caddyserver.com/v1/update/6a8159c4-3427-42 ...

      Ahora podrá dirigirse el IP de su servidor en un navegador web. En la página web de muestra, se observará lo siguiente:

      Mensaje de Caddy

      Con esto, habrá configurado Caddy para acceder a archivos estáticos desde su servidor. En el siguiente paso, ampliará la funcionalidad de Caddy usando complementos.

      Paso 4: Usar complementos

      Los complementos ofrecen una alternativa para cambiar y ampliar el comportamiento de Caddy. Por lo general, ofrecen más directivas de configuración para que las aplique, según su caso de uso. En esta sección, agregará y usará complementos instalando el complemento minify, que elimina los espacios en blanco que están de más y organiza el código que se enviará al cliente, además de reducir la superficie y los tiempos de carga.

      El repositorio de GitHub del complemento minify es hacdias/caddy-minify.

      Diríjase al directorio con el código fuente que creó en el paso uno:

      Para agregar un complemento a Caddy, deberá importarlo en el archivo caddy.go que usó para compilar Caddy. Abra caddy.go​​​ para editarlo:

      Importe el complemento minify; para ello, agregue la línea resaltada, como se observa:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Guarde y cierre el archivo.

      Es posible que algunos complementos requieran algunas modificaciones simples. Asegúrese de leer la documentación de los que instale. Puede encontrar una lista de complementos populares en el panel izquierdo de la documentación de Caddy, dentro de la sección Plugins.

      Cada vez que agregue una configuración nueva, deberá volver a compilar Caddy. Esto se debe a que Go es un lenguaje de programación compilado; es decir, el código fuente se transforma en código máquina antes de la ejecución. Su cambio en la declaración de importación alteró el código fuente, pero no afectará el binario hasta que esté compilado.

      Use el comando go install para compilar Caddy:

      Al finalizar, mueva el binario generado a /usr/local/bin y configure permisos para el binario como lo hizo anteriormente. Debe realizar estos pasos cada vez que recopile Caddy para garantizar su funcionalidad y seguridad:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Para comenzar a usar el complemento minify, deberá agregar la directiva minify a Caddyfile. Ábralo​​​ para editarlo:

      • sudo nano /etc/caddy/Caddyfile

      Para habilitar el complemento, agregue la siguiente línea al bloque de configuración:

      /etc/caddy/Caddyfile

      :80 {
        root /var/www
        gzip
        minify
      }
      

      Ahora, reinicie el servidor utilizando systemctl:

      • sudo systemctl restart caddy

      Caddy se encuentra en ejecución y minificará cualquier archivo que contenga, incluso el archivo index.html que creó anteriormente. Puede ver funcionar la minificación si busca el contenido de su dominio mediante curl:

      Verá el siguiente resultado: Observe que todos los espacios en blanco innecesarios se eliminarán, lo cual mostrará que el complemento minify funciona.

      Output

      <!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

      En este paso, aprendió ampliar Caddy con complementos. A continuación, habilitará HTTPS instalando el complemento tls.dns.digitalocean.

      Paso 5: Habilitar TLS automático con Let’s Encrypt

      En esta sección, habilitará el aprovisionamiento y la renovación automáticos de certificados de Let’s Encrypt usando registros TXT DNS para la verificación.

      Para realizar la verificación mediante los registros TXT DNS, instalará un complemento para interactuar con la API de DigitalOcean, llamado tls.dns.digitalocean. El procedimiento de instalación es casi idéntico al que usó para instalar el complemento minify en el paso anterior. Por empezar, abra caddy.go:

      Agregue el repositorio del complemento a las importaciones:

      ~/caddy/caddy.go

      package main
      
      import (
          "github.com/caddyserver/caddy/caddy/caddymain"
      
          _ "github.com/hacdias/caddy-minify"
      
          _ "github.com/caddyserver/dnsproviders/digitalocean"
      )
      
      func main() {
          // caddymain.EnableTelemetry = false
          caddymain.Run()
      }
      

      Para compilarlo, ejecute lo siguiente:

      Asegúrese de detener Caddy a través de systemctl, luego termine de instalar el complemento copiando el binario de Caddy recién compilado y nuevamente configure la propiedad y los permisos:

      • sudo systemctl stop caddy
      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      A continuación, configure Caddy para trabajar con la API de DigitalOcean y configurar registros DNS. Caddy debe acceder a este token como variable de entorno para configurar el DNS de DigitalOcean, de modo que editará su archivo de unidad systemd.

      • sudo nano /etc/systemd/system/caddy.service

      Busque la línea que comienza con Environment= en la sección [Service]. Esta línea define las variables de entorno que se deben pasar al proceso de Caddy. Agregue un espacio al final de esta línea y luego agregue una variable DO_AUTH_TOKEN seguida del token que recién generó:

      /etc/systemd/system/caddy.service

      [Service]
      Restart=on-abnormal
      
      ; User and group the process will run as.
      User=www-data
      Group=www-data
      
      ; Letsencrypt-issued certificates will be written to this directory.
      Environment=CADDYPATH=/etc/ssl/caddy DO_AUTH_TOKEN=your_token_here
      

      Guarde y cierre este archivo, y luego vuelva a cargar el demonio systemd como lo hizo anteriormente para asegurarse de que se haya actualizado la configuración:

      • sudo systemctl daemon-reload

      Ejecute systemctl status para verificar que las modificaciones de la configuración sean correctas:

      • sudo systemctl status caddy

      El resultado debería tener el siguiente aspecto:

      Output

      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: https://caddyserver.com/docs ...

      Deberá realizar algunas modificaciones simples a Caddyfile. Por ello, ábralo para editarlo:

      • sudo nano /etc/caddy/Caddyfile

      Agregue las líneas resaltadas a Caddyfile; asegúrese de sustituir your_domain por su dominio (en lugar de solo el puerto :80) y agregar un comentario en gzip:

      /etc/caddy/Caddyfile

      your_domain {
        root /var/www
        #gzip
        minify
        tls {
            dns digitalocean
        }
      }
      

      Usar un dominio en vez de solo un puerto para el nombre de host hará que Caddy presente solicitudes en HTTPS. La directiva tls configura el comportamiento de Caddy cuando se utiliza TLS y la subdirectiva dns especifica que Caddy debe usar el sistema DNS-01 en vez de HTTP-01.

      Con esto, su sitio web estará listo para implementarse. Inicie Caddy con systemctl y luego habilítelo para que se ejecute en el arranque:

      • sudo systemctl start caddy
      • sudo systemctl enable caddy

      Si busca su dominio, automáticamente accederá a HTTPS y se observará el mismo mensaje.

      De esta manera, finalizó y protegió la instalación de Caddy. Podrá seguir personalizándolo según el uso requerido.

      Si desea actualizar Caddy cuando haya una versión nueva, deberá actualizar el archivo go.mod (almacenado en el mismo directorio) que se verá de la siguiente manera:

      ~/caddy/go.mod

      module caddy
      
      go 1.14
      
      require (
              github.com/caddyserver/caddy v1.0.5
              github.com/caddyserver/dnsproviders v0.4.0
              github.com/hacdias/caddy-minify v1.0.2
      )
      

      La parte resaltada es la versión de Caddy que usa. Cuando se lance una versión nueva en Github (ver la página de etiquetas de lanzamientos), podrá reemplazar la actual de go.mod por esta y compilar Caddy conforme a los dos primeros pasos. Puede hacer lo mismo para todos los complementos importados.

      Conclusión

      Ahora cuenta con Caddy instalado y configurado en su servidor, el cual presenta páginas estáticas en el dominio deseado, con protección a través de certificados TLS de Let´s Encrypt.

      Un buen paso siguiente sería encontrar la manera de que lo notifiquen cuando se lancen versiones nuevas de Caddy. Por ejemplo, podría usar las fuentes de Atom para lanzamientos de Caddy o un servicio especializado como dependencies.io.

      Puede consultar la documentación de Caddy si desea más información o si desea configurar Caddy.



      Source link