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?