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

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Generar un certificado TLS de CA de origen
  • Paso 2: Instalación del certificado de CA de origen en Nginx
  • Paso 3: Configuración de extracciones de origen autenticado
  • Conclusión
  • El autor seleccionó a la Electronic Frontier Foundation para recibir una donación como parte del programa Write for DOnations.

    Introducción

    Cloudflare es un servicio que se ubica entre el visitante y el servidor del propietario del sitio web y 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 servidores de nombres de dominio distribuidos.

    Nginx es un servidor web popular que aloja algunos de los sitios más grandes y con mayor tráfico de Internet. Es común que las organizaciones brinden servicios a sitios web con Nginx y utilicen Cloudflare como proveedor de CDN y DNS.

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

    Prerrequisitos

    Para completar este tutorial, necesitarás lo siguiente:

    • Un servidor Ubuntu 18.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 18.04, incluido un sudousuario no root y un firewall.
    • Nginx instalado en tu servidor. Puedes seguir nuestra guía sobre cómo instalar Nginx en Ubuntu 18.04.
    • Una cuenta de Cloudflare.
    • Un dominio registrado agregado a su cuenta de Cloudflare que apunta a su servidor Nginx. Nuestra guía sobre cómo mitigar los ataques DDoS contra su sitio web con Cloudflare puede ayudarlo a configurarlo. Nuestra introducción a la terminología, los componentes y los conceptos de DNS también puede brindarle ayuda.
    • Un bloque de servidor Nginx configurado para su dominio, lo cual puede hacer siguiendo el Paso 5 de Cómo instalar Nginx en Ubuntu 18.04.

    Paso 1: Generar un certificado TLS de CA de origen

    La CA de origen de Cloudflare le permite generar un certificado TLS gratuito firmado por Cloudflare para instalarlo en su servidor Nginx. Al usar 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 Clouflare en un navegador web. Seleccione el dominio que desea proteger y navegue hasta la sección SSL/TLS de su panel de control de Cloudflare. Desde allí, navegue hasta la pestaña Servidor de origen y haga clic en el botón Crear certificado :

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

    Haga clic en Siguiente y verá un cuadro de 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 volverá a mostrar, así que copie la clave a su servidor antes de hacer clic en Aceptar .

    Usaremos el /etc/ssldirectorio del servidor para guardar el certificado de origen y los archivos de clave privada. 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.

    Luego, en su servidor, abra /etc/ssl/cert.pemen su editor de texto preferido:

    1. sudo nano /etc/ssl/cert.pem

    Agregue el contenido del certificado al archivo. Luego, guarde y salga del editor.

    Luego, vuelva a su navegador y copie el contenido de la clave privada . Abra el archivo /etc/ssl/key.pempara editarlo:

    1. sudo nano /etc/ssl/key.pem

    Pegue la clave privada en el archivo, guarde el archivo y salga del editor.

    Nota: A veces, cuando copia el certificado y la clave desde el panel de Cloudflare y los pega en los archivos correspondientes en el servidor, se insertan líneas en blanco. Nginx tratará dichos certificados y claves como no válidos, por lo que debe asegurarse de que no haya líneas en blanco en sus archivos.

    Advertencia: el certificado de CA de origen de Cloudflare solo es de confianza para Cloudflare y, por lo tanto, solo deben usarlo los servidores de origen que estén conectados activamente a Cloudflare. Si en algún momento pausa o deshabilita Cloudflare, su certificado de CA de origen generará un error de certificado no confiable.

    Ahora que ha copiado los archivos de clave y certificado a su servidor, necesita actualizar la configuración de Nginx para usarlos.

    Paso 2: Instalación del certificado de CA de origen en Nginx

    En la sección anterior, generó un certificado de origen y una clave privada mediante el panel de control de Cloudflare y guardó los archivos en su servidor. Ahora, actualizará la configuración de 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.

    En primer lugar, asegúrese de que UFW permita el tráfico HTTPS. Habilite Nginx Full, lo que abrirá tanto el puerto 80(HTTP) como el puerto 443(HTTPS):

    1. sudo ufw allow 'Nginx Full'

    Ahora recarga UFW:

    1. sudo ufw reload

    Por último, verifique que sus nuevas reglas estén permitidas y que UFW esté activo:

    1. sudo ufw status

    Verás un resultado como este:

    OutputStatus: activeTo                         Action      From--                         ------      ----OpenSSH                    ALLOW       AnywhereNginx Full                ALLOW       AnywhereOpenSSH (v6)               ALLOW       Anywhere (v6)Nginx Full (v6)           ALLOW       Anywhere (v6)

    Ahora está listo para ajustar el bloque de servidor de 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:

    1. sudo rm /etc/nginx/sites-enabled/default

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

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

    El archivo debería verse así:

    /etc/nginx/sites-available/su_dominio

    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 de Nginx para hacer lo siguiente:

    • Escuche en el puerto 80y redirija todas las solicitudes para usar https.
    • Escuche en el puerto 443y use el certificado de origen y la clave privada que agregó en la sección anterior.

    Modifique el archivo para que se parezca al siguiente:

    /etc/nginx/sites-available/su_dominio

    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, realice una prueba para asegurarse de que no haya errores de sintaxis en ninguno de los archivos de configuración de Nginx:

    1. sudo nginx -t

    Si no se encuentran problemas, reinicie Nginx para habilitar los cambios:

    1. sudo systemctl restart nginx

    Ahora, vaya a la sección SSL/TLS del panel de control de Cloudflare , navegue hasta la pestaña Descripción general y cambie el modo de cifrado SSL/TLS a Completo (estricto) . Esto le indica a Cloudflare que siempre debe cifrar la conexión entre Cloudflare y su servidor Nginx de origen.

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

    En la siguiente sección, configurará las solicitudes de origen autenticadas para verificar que su servidor de origen se comunique con Cloudflare y no con otro servidor. Al hacerlo, Nginx se configurará para que solo acepte solicitudes que utilicen un certificado de cliente válido de Cloudflare; se descartarán todas las solicitudes que no hayan pasado por Cloudflare.

    Paso 3: Configuración de extracciones de origen autenticado

    El certificado de CA de origen ayudará a Cloudflare a verificar que se está comunicando con el servidor de origen correcto. Este paso utilizará la autenticación de cliente TLS para verificar que su servidor Nginx de origen se está comunicando con Cloudflare.

    En un protocolo de enlace TLS autenticado por el cliente, ambas partes proporcionan un certificado para su verificación. El servidor de origen está configurado para aceptar únicamente solicitudes que utilicen un certificado de cliente válido de Cloudflare. Las solicitudes que no hayan pasado por Cloudflare se descartará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 certificados firmados por una CA con el siguiente certificado:

    -----BEGIN CERTIFICATE-----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-----END CERTIFICATE-----

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

    Copiar este certificado.

    A continuación, crea el /etc/ssl/cloudflare.crtarchivo que almacenará el certificado de Cloudflare:

    1. sudo nano /etc/ssl/cloudflare.crt

    Agregue el certificado al archivo. Luego guarde el archivo y salga del editor.

    Ahora actualice su configuración de Nginx para utilizar pulls de origen autenticados por TLS. Abra el archivo de configuración de su dominio:

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

    Agregue las directivas ssl_client_certificateand ssl_verify_clientcomo se muestra en el siguiente ejemplo:

    /etc/nginx/sites-available/su_dominio

    . . .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, realice una prueba para asegurarse de que no haya errores de sintaxis en su configuración de Nginx:

    1. sudo nginx -t

    Si no se encuentran problemas, reinicie Nginx para habilitar los cambios:

    1. sudo systemctl restart nginx

    Por último, para habilitar las extracciones autenticadas, abra la sección SSL/TLS en el panel de Cloudflare, navegue hasta la pestaña Servidor de origen y active la opción Extracciones de origen autenticadas .

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

    Para verificar que su servidor solo acepte solicitudes firmadas por la autoridad de certificación de Cloudflare, desactive la opción Authenticated Origin Pulls y vuelva a cargar su sitio web. Debería recibir el siguiente mensaje de error:

    Su servidor de origen genera un error si una solicitud no está firmada por la CA de Cloudflare.

    Nota: la mayoría de los navegadores almacenan en caché las solicitudes, por lo que para ver el cambio anterior puede utilizar el modo de navegación privada o de incógnito en su navegador. Para evitar que Cloudflare almacene en caché las solicitudes mientras configura su sitio web, navegue hasta Descripción general en el panel de control de Cloudflare y active el Modo de desarrollo .

    Ahora que sabe que funciona correctamente, regrese a la sección SSL/TLS en el panel de Cloudflare, navegue a la pestaña Servidor de origen y active la opción Extracciones de origen autenticadas nuevamente para habilitarla.

    Conclusión

    En este tutorial, protegiste tu sitio web con tecnología Nginx cifrando el tráfico entre Cloudflare y el servidor Nginx con un certificado de CA de origen de Cloudflare. Luego, configuraste las solicitudes de extracción de origen autenticadas en el servidor Nginx para garantizar que solo acepte solicitudes de los servidores de Cloudflare, lo que evita que cualquier otra persona se conecte directamente al servidor Nginx.

    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