Cómo actualizar automáticamente las reglas de UFW con las direcciones IP de la versión Cloudflare

Cuando te sientes detrás de Cloudflare, debes solo Permitir el tráfico procedente de los rangos de IP de Cloudflare en los puertos 80 y 443. Cloudflare actualiza periódicamente estos rangos, por lo que las reglas de UFW deben actualizarse automáticamente. El script de cloudflare-ufw, de Paul Reed, hace precisamente eso.

1. Descarga el script y hazlo ejecutable

bashsudo wget -O /usr/local/bin/cloudflare-ufw.sh \
  https://raw.githubusercontent.com/Paul-Reed/cloudflare-ufw/refs/heads/master/cloudflare-ufw.sh
sudo chmod +x /usr/local/bin/cloudflare-ufw.sh

2. Revisar las normas actuales de la UFW (antes de los cambios)

bashsudo ufw status verbose

Probablemente verás algo como:

textoAcción De
-- ------ ----
22/tcp PERMITIR Desde cualquier lugar
80/tcp PERMITIR Desde cualquier lugar
443 PERMITIR Desde cualquier lugar
...

3. Eliminar las reglas 80/443 excesivamente permisivas

Estas normas permiten actualmente cualquiera Direcciones IP que acceden a los puertos de tu web. Las sustituiremos por reglas exclusivas de Cloudflare.

bashsudo ufw delete allow 80/tcp
sudo ufw delete allow 443/tcp

Si UFW solicita una confirmación, escribe y y pulsa Intro.

Comprueba el estado de nuevo:

bashsudo ufw status verbose

Ya no deberías ver 80/tcp o 443 con PERMITIR de En cualquier lugar.

4. Ejecuta el script Cloudflare‑UFW

bashsudo /usr/local/bin/cloudflare-ufw.sh

Qué hace el script:

  • Recupera los rangos IPv4 e IPv6 más recientes de Cloudflare desde https://www.cloudflare.com/ips-v4 y .../ips-v6.
  • Elimina cualquier regla de UFW existente para los puertos 80 y 443 que permita En cualquier lugar.
  • Añade nuevo PERMITIR normas solo para cada rango de direcciones IP Cloudflare en los puertos 80 (HTTP) y 443 (HTTPS).
  • Opcionalmente, se reinicia UFW para que las nuevas reglas surtan efecto de inmediato.

Una vez finalizado, comprueba lo siguiente:

bashsudo ufw status verbose

Ahora deberías ver varias líneas como estas:

textoAcción De
-- ------ ----
80/tcp ALLOW 173.245.48.0/20
80/tcp ALLOW 103.21.244.0/22
...
443 PERMITIR 173.245.48.0/20
443 PERMITIR 103.21.244.0/22
...

El resto de direcciones IP tienen el acceso denegado de forma implícita a los puertos 80 y 443.

5. Automatizar las actualizaciones diarias con cron

Cloudflare puede modificar sus rangos de IP en cualquier momento. Para mantener tu cortafuegos actualizado, programa la ejecución diaria del script (por ejemplo, a las 03:00).

Edita el archivo crontab de root:

bashsudo crontab -e

Si se te solicita, elige tu editor preferido (por ejemplo, nano).

Añade la siguiente línea al final:

text0 3 * * * /usr/local/bin/cloudflare-ufw.sh >> /var/log/cloudflare-ufw.log 2>&1

Esto hace lo siguiente:

  • Ejecuta el script todos los días a las 03:00, hora del servidor.
  • Añade la salida y los errores a /var/log/cloudflare-ufw.log para la auditoría.

Guarda y sal del editor.

6. Comprueba la tarea programada

Muestra el crontab de root para comprobarlo:

bashsudo crontab -l

Deberías ver la nueva línea.

Si lo prefieres, ejecuta el proceso de inmediato y comprueba el registro:

bashsudo /usr/local/bin/cloudflare-ufw.sh
sudo tail -n 20 /var/log/cloudflare-ufw.log

7. Mantenimiento continuo

Para actualizar manualmente las reglas en cualquier momento:

bashsudo /usr/local/bin/cloudflare-ufw.sh

Para consultar el registro:

bashsudo less /var/log/cloudflare-ufw.log

Si alguna vez necesitas volver a la configuración “permitir en cualquier lugar” (no recomendado en entornos de producción):

bashsudo ufw delete allow from any to any port 80 proto tcp sudo ufw delete allow from any to any port 443 proto tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp

Con esta configuración, tu cortafuegos UFW solo aceptará tráfico HTTP/HTTPS procedente de los rangos de IP actuales de Cloudflare, lo que reducirá drásticamente la superficie de ataque y garantizará que tus sitios web sigan siendo accesibles a través de Cloudflare.

¿Te ha resultado útil esta página?

Deja una respuesta

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