:::: MENU ::::

Actualizar IPs de Cloudflare automáticamente en el Firewall (iptables)

Con este script se descargan automáticamente las IPs publicadas por Cloudflare y se autorizan en iptables (mediante ufw) eliminando las reglas anteriores.

#!/bin/bash

# URLs de las IPs de Cloudflare
URL_V4="https://www.cloudflare.com/ips-v4"
URL_V6="https://www.cloudflare.com/ips-v6"

# Archivos temporales
TEMP_V4="/tmp/cf_v4.txt"
TEMP_V6="/tmp/cf_v6.txt"

echo "Iniciando actualización de reglas de Cloudflare en UFW..."

# 1. Descargar las listas actuales
curl -s -o $TEMP_V4 $URL_V4
curl -s -o $TEMP_V6 $URL_V6

if [[ ! -s $TEMP_V4 ]]; then
    echo "Error: No se pudo descargar la lista IPv4. Abortando."
    exit 1
fi

# 2. Limpieza de reglas antiguas
echo "Limpiando reglas antiguas marcadas como Cloudflare-IP..."
# Buscamos las reglas que contienen el comentario y las borramos de forma segura
for rule in $(ufw status numbered | grep 'Cloudflare-IP' | cut -d"[" -f2 | cut -d"]" -f1 | sort -rn); do
    ufw --force delete $rule > /dev/null
done

# 3. Aplicar nuevas reglas para IPv4 e IPv6
echo "Aplicando nuevas reglas (Solo TCP 80,443)..."

# Añadimos 'proto tcp' para evitar el error de múltiples puertos
for ip in $(cat $TEMP_V4); do
    ufw allow from $ip to any proto tcp port 80,443 comment 'Cloudflare-IP' > /dev/null
done

for ip in $(cat $TEMP_V6); do
    ufw allow from $ip to any proto tcp port 80,443 comment 'Cloudflare-IP' > /dev/null
done

# 4. Asegurar que el tráfico directo esté bloqueado
# Esto aplica la política de "Denegación por Defecto" que querías
ufw default deny incoming > /dev/null

# 5. Recargar y limpiar
ufw reload > /dev/null
rm -f $TEMP_V4 $TEMP_V6

echo "Firewall actualizado con éxito."

Comandos últiles

# Ver reglas activas (así tiene que quedar)

root@c2-30-gra11:/home/debian# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere                  
[ 2] 80,443/tcp                 ALLOW IN    173.245.48.0/20            # Cloudflare-IP
[ 3] 80,443/tcp                 ALLOW IN    103.21.244.0/22            # Cloudflare-IP
[ 4] 80,443/tcp                 ALLOW IN    103.22.200.0/22            # Cloudflare-IP
[ 5] 80,443/tcp                 ALLOW IN    103.31.4.0/22              # Cloudflare-IP
[ 6] 80,443/tcp                 ALLOW IN    141.101.64.0/18            # Cloudflare-IP
[ 7] 80,443/tcp                 ALLOW IN    108.162.192.0/18           # Cloudflare-IP
[ 8] 80,443/tcp                 ALLOW IN    190.93.240.0/20            # Cloudflare-IP
[ 9] 80,443/tcp                 ALLOW IN    188.114.96.0/20            # Cloudflare-IP
[10] 80,443/tcp                 ALLOW IN    197.234.240.0/22           # Cloudflare-IP
[11] 80,443/tcp                 ALLOW IN    198.41.128.0/17            # Cloudflare-IP
[12] 80,443/tcp                 ALLOW IN    162.158.0.0/15             # Cloudflare-IP
[13] 80,443/tcp                 ALLOW IN    104.16.0.0/13              # Cloudflare-IP
[14] 80,443/tcp                 ALLOW IN    104.24.0.0/14              # Cloudflare-IP
[15] 80,443/tcp                 ALLOW IN    172.64.0.0/13              # Cloudflare-IP
[16] 80,443/tcp                 ALLOW IN    131.0.72.0/22              # Cloudflare-IP
[17] 22/tcp (v6)                ALLOW IN    Anywhere (v6)             
[18] 80,443/tcp                 ALLOW IN    2400:cb00::/32             # Cloudflare-IP
[19] 80,443/tcp                 ALLOW IN    2606:4700::/32             # Cloudflare-IP
[20] 80,443/tcp                 ALLOW IN    2803:f800::/32             # Cloudflare-IP
[21] 80,443/tcp                 ALLOW IN    2405:b500::/32             # Cloudflare-IP
[22] 80,443/tcp                 ALLOW IN    2405:8100::/32             # Cloudflare-IP
[23] 80,443/tcp                 ALLOW IN    2a06:98c0::/29             # Cloudflare-IP
[24] 80,443/tcp                 ALLOW IN    2c0f:f248::/32             # Cloudflare-IP

# Ojo si hay reglas así. Hay que eliminarlas porque permiten todo el tráfico
root@c2-30-gra11:/home/debian# ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 80/tcp                     ALLOW IN    Anywhere                  
[ 2] 443/tcp                    ALLOW IN    Anywhere                  
[19] 80/tcp (v6)                ALLOW IN    Anywhere (v6)             
[20] 443/tcp (v6)               ALLOW IN    Anywhere (v6)             

# Para borrar se puede hacer por número con el siguiente comando
# ATENCÓN! Al borrar por número, LAS REGLAS SE RENUMERAN, así que a cada comando los números cambian
root@c2-30-gra11:/home/debian# sudo ufw delete 1




Hey! Qué opinas sobre el artículo?