IP y ASN

Cómo monitorizar un bloque de IP en listas negras, geolocalización y RPKI con alertas en Telegram

5 pasos 14 min de lectura 22 vistas 0
Contenido

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.

Spamhaus no responde a las consultas enviadas a través de grandes resolvedores públicos como 8.8.8.8 o 1.1.1.1 (en su lugar se obtiene el código de error 127.255.255.254). Ejecute las comprobaciones con su propio resolvedor en el servidor, como en el paso 1. El servicio gratuito de Spamhaus es para uso no comercial y de bajo volumen; para la monitorización comercial, regístrese en el Data Query Service (DQS) de Spamhaus.

Paso 1: Ejecutar su propio resolvedor DNS

# 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.

Paso 2: Entender las consultas DNSBL

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

Paso 3: Crear el script de monitorización

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.

Paso 4: Enviar alertas a Telegram

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

Paso 5: Actuar ante los hallazgos

  • Inclusión en una lista negra: averigüe qué servidor o cliente usa la dirección, elimine la causa (a menudo un servidor comprometido o un script de correo mal configurado) y solicite la exclusión en el sitio web de la lista negra (consulte cómo comprobar y sacar una IP de listas negras).
  • Cambio de geolocalización: revise su geofeed y envíe correcciones a la base de datos que cambió (consulte cómo corregir la geolocalización de una IP). Si el bloque es alquilado, avise al arrendador.
  • RPKI no válido: compruebe que el ROA indica el ASN y la longitud máxima correctos (consulte ROA y RPKI). Muchas redes pueden descartar una ruta inválida en cuestión de horas.

Preguntas frecuentes

¿Todas las direcciones aparecen como incluidas en Spamhaus?

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.

¿Por qué se ignoran las inclusiones en la PBL?

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.

¿Puedo añadir más listas negras?

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.

¿Fue útil la respuesta?

Tutoriales relacionados