Un bloque de IP alquilado puede cambiar de estado sin previo aviso: una dirección acaba en una lista negra por culpa de un solo cliente, una base de datos de geolocalización traslada el rango a otro país o un cambio en el ROA invalida su anuncio. Enterarse por los usuarios semanas después sale caro. Esta guía crea un pequeño script de monitorización que revisa cada día todas las direcciones de sus bloques en las principales listas negras DNS, compara la geolocalización con el país esperado, verifica el RPKI y envía un mensaje de Telegram cuando algo cambia.
# Debian / Ubuntu
apt install -y unbound dnsutils jq curl
systemctl enable --now unbound
# Test: a listed test address must return 127.0.0.x through the local resolver
dig +short 2.0.0.127.zen.spamhaus.org @127.0.0.1
La respuesta 127.0.0.2 (y otras) para la dirección de prueba 127.0.0.2 confirma que las consultas a las listas negras funcionan.
Para comprobar 203.0.113.10 en una zona de lista negra, invierta los octetos y añada la zona. Si no hay respuesta (NXDOMAIN), la dirección no figura en la lista; una respuesta dentro de 127.0.0.0/8 significa que sí figura, y el último octeto indica en qué lista.
dig +short 10.113.0.203.zen.spamhaus.org @127.0.0.1
# 127.0.0.2 / .3 SBL / CSS (spam sources)
# 127.0.0.4 – .7 XBL (exploited hosts, malware)
# 127.0.0.9 DROP (hijacked or criminal ranges)
# 127.0.0.10 / .11 PBL (policy: not expected to send mail directly; not a sign of abuse)
# 127.255.255.x query error (public resolver, rate limit), not a listing
mkdir -p /opt/ipmon
cat > /opt/ipmon/blocks.txt <<'EOF2'
# prefix expected country origin ASN
203.0.113.0/24 JP AS64500
198.51.100.0/24 KR AS64500
EOF2
cat > /opt/ipmon/check.sh <<'EOF2'
#!/bin/bash
# Daily IP block check: DNSBL listings, geolocation and RPKI. Prints problems only.
ZONES="zen.spamhaus.org bl.spamcop.net psbl.surriel.com dnsbl-1.uceprotect.net"
grep -v '^#' /opt/ipmon/blocks.txt | while read -r PREFIX CC ASN; do
[ -z "$PREFIX" ] && continue
BASE=${PREFIX%.*} # works for /24 blocks: 203.0.113
IFS=. read -r a b c _ <<< "$PREFIX"
for d in $(seq 1 254); do
for z in $ZONES; do
r=$(dig +short +time=2 +tries=1 "$d.$c.$b.$a.$z" @127.0.0.1 | head -1)
case "$r" in
127.255.255.*|"") ;; # error or not listed
127.0.0.10|127.0.0.11) ;; # Spamhaus PBL: policy list, ignore
127.*) echo "LISTED $BASE.$d on $z ($r)";;
esac
done
done
# Geolocation of a few sample addresses
for d in 1 64 128 200 254; do
got=$(curl -s --max-time 10 "https://ipinfo.io/$BASE.$d/country" | tr -d '[:space:]')
[ -n "$got" ] && [ "$got" != "$CC" ] && echo "GEO $BASE.$d is $got, expected $CC"
done
# RPKI status of the announcement
st=$(curl -s --max-time 20 "https://stat.ripe.net/data/rpki-validation/data.json?resource=$ASN&prefix=$PREFIX" | jq -r '.data.status')
[ "$st" != "valid" ] && echo "RPKI $PREFIX from $ASN is $st"
done
EOF2
chmod +x /opt/ipmon/check.sh
/opt/ipmon/check.sh
El script no muestra nada cuando todo está bien. Está escrito para bloques /24; divida los bloques más grandes en líneas /24. Un /24 completo contra cuatro zonas supone unas mil consultas DNS, que tardan unos minutos, algo aceptable una vez al día.
Cree un bot de Telegram y obtenga su chat ID como se describe en monitorización con Uptime Kuma y alertas en Telegram. Después, envuelva la comprobación en un pequeño script de envío que solo le escriba cuando haya hallazgos:
cat > /opt/ipmon/run.sh <<'EOF2'
#!/bin/bash
TOKEN="123456:ABC-your-bot-token"
CHAT="123456789"
OUT=$(/opt/ipmon/check.sh 2>&1)
if [ -n "$OUT" ]; then
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
--data-urlencode "chat_id=$CHAT" \
--data-urlencode "text=IP block check $(hostname) $(date +%F):
$OUT" >/dev/null
fi
EOF2
chmod 700 /opt/ipmon/run.sh
# Every day at 07:30
echo '30 7 * * * root /opt/ipmon/run.sh' > /etc/cron.d/ipmon
Sus consultas pasan por un resolvedor público o compartido, que Spamhaus bloquea; las respuestas son errores, no inclusiones. Asegúrese de que el script usa @127.0.0.1 con unbound en ejecución, o use una clave DQS.
La PBL de Spamhaus recoge rangos de los que no se espera que envíen correo directamente a internet. Es una lista de políticas, no un indicio de abuso; las IP que sí envían correo pueden solicitar su exclusión en el sitio web de Spamhaus.
Sí, añada zonas a ZONES. Revise antes la política de uso de cada lista; algunas exigen registro para las consultas automatizadas y otras incluyen rangos completos por motivos ajenos a su propio comportamiento.
¿Sigue sin resolverlo después de seguir estos pasos? Abra un ticket de soporte y el equipo técnico de IMIDC, disponible 24/7, le ayudará. Incluya sus bloques de IP, la salida del script y la lista negra o la base de datos que muestra la incidencia para que podamos localizar el problema más rápido.