El autor seleccionó la Electronic Frontier Foundation para recibir una donación como parte del programa Write for Donations.
Introducción
Cloudflare es un servicio que se sitúa 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 Entrega de Contenidos (CDN), así como mitigación de DDoS y servicios de servidor de nombres de dominio distribuido.
Nginx es un servidor web popular responsable de alojar algunos de los sitios web más grandes y con más tráfico en Internet. Es común que las organizaciones sirvan sitios web con Nginx y utilicen Cloudflare como CDN y proveedor de DNS.
En este tutorial, asegurarás tu sitio web servido por Nginx con un certificado de origen CA de Cloudflare y luego configurarás Nginx para usar solicitudes de extracción autenticadas. Las ventajas de usar esta configuración son que te beneficias de la CDN de Cloudflare y de una rápida resolución de DNS mientras te aseguras de que todas las conexiones pasen por Cloudflare. Esto evita que cualquier solicitud maliciosa llegue a tu servidor.
Prerrequisitos
Para completar este tutorial, necesitarás lo siguiente:
- Un servidor Ubuntu 22.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 22.04, incluyendo un usuario no root con permisos de
sudo
y un firewall. - Nginx instalado en tu servidor. Puedes seguir nuestra guía sobre cómo instalar Nginx en Ubuntu 22.04.
- A Cloudflare account.
- A registered domain added to your Cloudflare account that points to your Nginx server. Our guide on how to mitigate DDoS attacks against your website with Cloudflare can help you set this up. Our introduction to DNS terminology, components, and concepts can also provide assistance.
- Un bloque de servidor Nginx configurado para tu dominio, lo cual puedes hacer siguiendo el Paso 5 de Cómo Instalar Nginx en Ubuntu 22.04.
Paso 1 — Generar un Certificado TLS de Origen CA
El Origin CA de Cloudflare te permite generar un certificado TLS gratuito firmado por Cloudflare para instalar en tu servidor Nginx. Al utilizar el certificado TLS generado por Cloudflare, puedes asegurar la conexión entre los servidores de Cloudflare y tu servidor Nginx.
Para generar un certificado con Origin CA, inicia sesión en tu cuenta de Cloudflare en un navegador web. Selecciona el dominio que deseas asegurar y navega hasta la sección SSL/TLS de tu panel de control de Cloudflare. Desde allí, ve a la pestaña Servidor de Origen y haz clic en el botón Crear Certificado:
Deja seleccionada la opción predeterminada de Generar clave privada y CSR con Cloudflare.
Haz clic en Crear y verás un diálogo con el Certificado de Origen y la Clave privada. Debes transferir tanto el certificado de origen como la clave privada de Cloudflare a tu servidor. Por razones de seguridad, la información de la Clave Privada no se mostrará de nuevo, así que copia la clave en tu servidor antes de hacer clic en Ok.
Usarás el directorio /etc/ssl
en el servidor para guardar los archivos de certificado de origen y clave privada. La carpeta ya existe en el servidor.
Primero, copia el contenido del Certificado de Origen mostrado en el cuadro de diálogo en tu navegador.
Luego, en tu servidor, abre /etc/ssl/cert.pem
en tu editor de texto preferido:
Pega el contenido del certificado en el archivo. Luego guarda y sale del editor. Si estás usando nano
, presiona Ctrl+X
, luego cuando se te solicite, Y
y luego Enter.
Luego regresa a tu navegador y copia el contenido de la Clave privada. Abre el archivo /etc/ssl/key.pem
para editarlo:
Pega la clave privada en el archivo, guárdalo y sale del editor.
Nota: A veces, al copiar el certificado y la clave del panel de control de Cloudflare y pegarlos en los archivos relevantes en el servidor, se insertan líneas en blanco. Nginx tratará esos certificados y claves como inválidos, así que asegúrate de que no haya líneas en blanco en tus archivos.
Advertencia: El Certificado de CA de Origen de Cloudflare solo es confiable por Cloudflare y, por lo tanto, solo debe ser usado por servidores de origen que estén conectados activamente a Cloudflare. Si en algún momento pausas o deshabilitas Cloudflare, tu certificado de CA de origen mostrará un error de certificado no confiable.
Ahora que has copiado los archivos de clave y certificado a tu servidor, necesitas actualizar la configuración de Nginx para usarlos.
Paso 2 — Instalando el Certificado de CA de Origen en Nginx
En la sección anterior, generaste un certificado de origen y una clave privada usando el panel de control de Cloudflare y guardaste los archivos en tu servidor. Ahora actualizarás la configuración de Nginx para tu sitio para usar el certificado de origen y la clave privada para asegurar la conexión entre los servidores de Cloudflare y tu servidor.
Primero, asegúrate de que UFW permita el tráfico HTTPS. Habilita Nginx Full
, lo que abrirá tanto el puerto 80
(HTTP) como el puerto 443
(HTTPS):
Ahora recarga UFW:
Finalmente, verifica que tus nuevas reglas estén permitidas y que UFW esté activo:
Verás una salida como esta:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Ahora estás listo para ajustar tu bloque de servidor Nginx. Nginx crea un bloque de servidor predeterminado durante la instalación. Elimínalo si aún existe, ya que ya has configurado un bloque de servidor personalizado para tu dominio:
A continuación, abre el archivo de configuración de Nginx para tu dominio:
El archivo debería lucir así:
Modificarás el archivo de configuración de Nginx para hacer lo siguiente:
- Escuchar en el puerto
80
y redirigir todas las solicitudes para usarhttps
. - Escuchar en el puerto
443
y usar el certificado de origen y la clave privada agregados en la sección anterior.
Modifica el archivo para que se vea como lo siguiente:
Guarda el archivo y sale del editor.
A continuación, prueba para asegurarte de que no haya errores de sintaxis en ninguno de tus archivos de configuración de Nginx:
Si no encontraste problemas, reinicia Nginx para habilitar tus cambios:
Ahora ve a la sección de SSL/TLS del panel de control de Cloudflare, navega a la pestaña Visión general, y cambia el modo de cifrado SSL/TLS a Completo (estricto). Esto informa a Cloudflare que siempre cifre la conexión entre Cloudflare y tu servidor Nginx de origen.
Ahora visita tu sitio web en https://tu_dominio
para verificar que esté configurado correctamente. Verás tu página de inicio mostrada y el navegador informará que el sitio es seguro.
Para ver los detalles de su certificado, acceda a las Herramientas de desarrollo de su navegador, seleccione la pestaña Seguridad y luego haga clic en Ver certificado.
Nota: Es posible que note que su certificado no enumera a Cloudflare como el emisor. Esto se debe a que Cloudflare puede utilizar otras autoridades de certificación, como Let’s Encrypt. Para ver una lista completa, consulte la documentación del producto de Cloudflare sobre autoridades de certificación.
En la siguiente sección, configurará Orígenes Autenticados para verificar que su servidor de origen esté hablando realmente con Cloudflare y no con otro servidor. De esta manera, Nginx se configurará para aceptar únicamente solicitudes que utilicen un certificado de cliente válido de Cloudflare; todas las solicitudes que no hayan pasado por Cloudflare serán rechazadas.
Paso 3 — Configuración de Orígenes Autenticados
El certificado de CA de origen ayudará a Cloudflare a verificar que está hablando con el servidor de origen correcto. Este paso utilizará la Autenticación de Cliente TLS para verificar que su servidor Nginx de origen esté hablando con Cloudflare.
En un apretón de manos TLS autenticado por el cliente, ambas partes proporcionan un certificado para ser verificado. El servidor de origen está configurado para aceptar solo solicitudes que utilicen un certificado de cliente válido de Cloudflare. Las solicitudes que no hayan pasado por Cloudflare serán descartadas, 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 AC 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 la documentación de Cloudflare.
Copie este certificado.
Luego, cree el archivo /etc/ssl/cloudflare.crt
para contener el certificado de Cloudflare:
Agregue el certificado al archivo. Luego, guarde el archivo y salga del editor.
Ahora actualice la configuración de Nginx para usar Extracciones de Origen Autenticadas por TLS. Abra el archivo de configuración para su dominio:
Agregue las directivas ssl_client_certificate
y ssl_verify_client
como se muestra en el siguiente ejemplo:
Guarde el archivo y salga del editor.
A continuación, pruebe Nginx para asegurarse de que no haya errores de sintaxis en su configuración de Nginx:
Si no se encontraron problemas, reinicie Nginx para habilitar sus cambios:
Finalmente, para habilitar las Extracciones Autenticadas, abre la sección SSL/TLS en el panel de control de Cloudflare, navega hasta la pestaña Servidor de Origen y activa la opción Extracciones de Origen Autenticadas.
Ahora visita tu sitio web en https://tu_domino
para verificar que se configuró correctamente. Como antes, verás mostrada tu página de inicio.
Para verificar que tu servidor solo aceptará solicitudes firmadas por la CA de Cloudflare, desactiva la opción Extracciones de Origen Autenticadas y luego recarga tu sitio web. Deberías obtener el siguiente mensaje de error:
Tu servidor de origen muestra un error si la CA de Cloudflare no firma una solicitud.
Nota: La mayoría de los navegadores almacenarán en caché las solicitudes, así que para ver el cambio anterior puedes usar el modo Incógnito/Privado en tu navegador. Para evitar que Cloudflare almacene en caché las solicitudes mientras configuras tu sitio web, navega hasta Resumen en el panel de control de Cloudflare y activa Modo de Desarrollo.
Ahora que sabes que funciona correctamente, vuelve a la sección SSL/TLS en el panel de control de Cloudflare, navega hasta la pestaña Servidor de Origen y vuelve a activar la opción Extracciones de Origen Autenticadas.
Conclusión
En este tutorial, aseguraste tu sitio web impulsado por Nginx cifrando el tráfico entre Cloudflare y el servidor Nginx mediante un certificado de CA de origen de Cloudflare. Luego configuraste Autenticación de Peticiones de Origen en el servidor Nginx para asegurarte de que solo acepte las solicitudes de los servidores de Cloudflare, evitando que cualquier otra persona se conecte directamente al servidor Nginx.