Protege tu servidor web con una Blacklist de IP en tiempo real
Para proteger un servidor web con una Blacklist de IP en tiempo real, descarga una lista de ReportedIP por cada servicio expuesto, cárgala en un set de ipset o nftables y aplica cada set solo a los puertos de su servicio. El 29 de septiembre de 2026 la base de datos de la comunidad registraba 799.893 direcciones IP en 7.194.829 informes de abuso, y 4.173 de esas direcciones tenían una puntuación de 90 o más, el nivel que recomendamos para bloquear sin supervisión.
Este artículo describe el camino por tu cuenta: tu propio script, tu propia tarea cron, tu propia acción de fail2ban. En un servidor Linux, el ReportedIP Agent hace el mismo trabajo como un único binario listo para usar, descrito más abajo.
¿Por qué una Blacklist en tiempo real es mejor que un archivo de bloqueo estático?
Las listas de bloqueo estáticas envejecen mal. Los atacantes rotan entre proveedores cloud y botnets, así que una IP que lanzaba ataques de fuerza bruta contra SSH en junio suele ser en agosto un cliente legítimo del mismo proveedor de hosting. Una lista descargada una vez y dejada tal cual sigue bloqueando a quien no debe y deja pasar la oleada actual.
La Dynamic Blacklist de ReportedIP se reconstruye en el servidor cada 15 minutos a partir de informes recientes de la comunidad. Los servidores honeypot, los sitios WordPress con el plugin Hive y las instalaciones de fail2ban envían informes a una cadena de puntuación, y solo las IP por encima del umbral de confianza que pides entran en tu descarga. Cuando un atacante se calla, su puntuación baja y la IP sale sola de la lista.
¿Cómo mantiene limpia la lista la puntuación de confianza?
Cada IP de la lista lleva una puntuación de confianza de 0 a 100. Se compone de cuatro elementos y un bonus de honeypot:
- Volumen de informes (hasta 30 puntos): el número ponderado de informes contra la IP.
- Diversidad de informantes (hasta 15 puntos): los informes de fuentes independientes cuentan más. Un solo informante no puede llevar una IP por encima de una puntuación de 60.
- Actualidad (hasta 15 puntos): un informe de las últimas 24 horas suma 5 puntos, uno de la última semana 3, los más antiguos menos.
- Gravedad (hasta 15 puntos): ponderada según la categoría de amenaza, así que un host comprometido no puntúa igual que un spammer de comentarios.
- Bonus de honeypot (hasta 25 puntos): los informes de honeypots pesan más porque ningún usuario legítimo toca nunca un honeypot.
Los informes pierden peso con una vida media de 30 días: a los 30 días un informe cuenta un 50 por ciento, a los 60 días un 25 por ciento. Cuando una IP pasa dos semanas sin un informe nuevo, además toda su puntuación empieza a reducirse a la mitad cada 30 días. Encima hay topes fijos: con menos de 5 informes efectivos la puntuación se queda en 49 como máximo, con menos de 10 en 74. Una puntuación de 90 exige por tanto un abuso reciente confirmado por varios informantes independientes. El cálculo completo está en la página de la puntuación.
¿Por qué una lista de bloqueo por servicio?
Cada informe lleva identificadores de categoría del 1 al 63: categorías clásicas como SSH (22) y Email Spam (11), un bloque dedicado a WordPress (31 a 58) y categorías de honeypot (59 a 63). El parámetro category de GET /blacklist admite una lista de identificadores separados por comas, así que cada servicio expuesto recibe justo los atacantes que van a por él.
| Lista | Categorías | Se aplica a | Tamaño con confianza 90 |
|---|---|---|---|
| SSH | 22,18 | Puerto 22 | 1.640 IP |
11,7,17,18 | Puertos 25, 465, 587, 110, 143, 993, 995 | 1.547 IP | |
| Web | 21,16,10,19,12 y 31 a 58 | Puertos 80, 443 | 1.372 IP |
| FTP | 5,18 | Puerto 21 | 1.472 IP |
| Edge | 4,14,20 | Todos los puertos | 1.344 IP |
Los tamaños se midieron el 29 de septiembre de 2026. Cambian cada día y bajaron desde que el 28 de septiembre de 2026 entró en servicio el decaimiento de la puntuación para las IP inactivas. Los sets limitados a puertos abaratan los errores: una IP de la lista web nunca puede dejar a un administrador fuera de SSH. La lista edge (DDoS, escaneos de puertos, hosts comprometidos) es la única que merece aplicarse a todos los puertos, porque esos atacantes lo prueban todo.
¿Cómo cargas una lista de ReportedIP en ipset o nftables?
El endpoint /blacklist necesita una clave API a partir del plan Contributor. Contributor es gratuito para las cuentas que ejecutan un honeypot y comparten sus informes; si no, el feed empieza con Professional por 14,90 € al mes IVA incluido. Con format=txt la respuesta trae una IP por línea, IPv4 e IPv6 mezcladas, así que filtra la familia de direcciones antes de cargarla:
ipset create rip-ssh hash:ip family inet maxelem 65536 -exist
curl -sS -H "X-Key: YOUR_API_KEY" \
"https://reportedip.com/wp-json/reportedip/v2/blacklist?confidence=90&format=txt&limit=50000&category=22,18" \
| grep -E '^[0-9]+(\.[0-9]+){3}$' | sed 's|^|add rip-ssh |' | ipset restore -exist
iptables -I INPUT -p tcp --dport 22 -m set --match-set rip-ssh src -j DROP
Sin limit el endpoint devuelve como mucho 10.000 entradas; limit=50000 devuelve todo lo que contiene el nivel. Una búsqueda en un set tarda lo mismo sea cual sea la longitud de la lista, y esa es la razón de usar ipset en lugar de una regla por IP. En sistemas con nftables, un set con nombre en una tabla inet sustituye a ipset y guarda IPv4 e IPv6 juntas:
nft add table inet reportedip
nft add chain inet reportedip input '{ type filter hook input priority -10 ; policy accept ; }'
nft add set inet reportedip rip-ssh '{ type ipv4_addr ; }'
nft add rule inet reportedip input tcp dport 22 ip saddr @rip-ssh drop
Para cada actualización posterior, usa el script de sincronización de la guía de bloqueo de red. Intercambia el set de forma atómica, separa IPv4 de IPv6 y cubre también los cortafuegos cloud. Dos reglas de seguridad antes de la primera ejecución: pon tus propias IP de administración en un set de aceptación aparte que el cortafuegos compruebe primero, y nunca sustituyas un set que funciona por una descarga truncada.
¿Cómo mantienes la lista al día sin gastar cuota?
Basta con una tarea cron por hora y por lista, repartidas a lo largo de la hora: cinco listas una vez por hora suman 120 peticiones al día. Cada respuesta lleva un ETag. Guárdalo por lista y devuélvelo como If-None-Match; una lista sin cambios responde 304 Not Modified con el cuerpo vacío. Un 304 no gasta cuota, y la descarga en sí tampoco cuenta contra tu cuota diaria de consultas ni de informes.
- Un ETag por lista. El tag cubre exactamente la combinación de parámetros que pediste, filtro de categorías incluido.
- Nunca vaciar si algo falla. Ante cualquier estado distinto de 200 o 304, conserva el set anterior y vuelve a intentarlo en la siguiente ejecución.
- Comprobar el tamaño. Rechaza una lista que haya encogido mucho. Fija el mínimo por lista según lo que ves hoy, por ejemplo la mitad del tamaño actual.
Los parámetros y los formatos de respuesta (txt, csv, json) están documentados en la referencia de la API, las listas por servicio en la página de la Blacklist. Quien gestiona servidores de correo y prefiere consultas DNS a sincronizar listas puede consultar los mismos datos como zona RBL privada.
¿Cómo devuelves los informes de atacantes con fail2ban?
Bloquear es la mitad del ciclo. Una pequeña acción de fail2ban envía cada baneo de tu servidor a POST /report con las categorías de su jail: 18,22 para sshd, 11,18 para postfix-sasl y dovecot, 18,21 para nginx-http-auth. Los informes solo cuentan contra tu cuota diaria de informes, nunca contra la de consultas.
Tu informe sube la puntuación del atacante para todos. Como un solo informante no puede llevar una IP por encima de 60, tu confirmación suele ser la que empuja una IP dudosa por encima del umbral de bloqueo. El archivo de la acción y la tabla de jails y categorías están en la guía de integración con fail2ban. Los sitios WordPress consiguen el mismo ciclo sin shell: el plugin Hive vigila los inicios de sesión, los comentarios y XML-RPC y envía él mismo los ataques confirmados.
¿Cuándo es mejor opción el ReportedIP Agent?
Todo lo anterior es mantenimiento que queda de tu lado: el script, los archivos de ETag, la comprobación de tamaño, la acción de fail2ban. El ReportedIP Agent empaqueta ese camino para servidores Linux en un binario estático, versión 0.3.38 a 28 de septiembre de 2026:
- Carga las mismas cinco listas por servicio, ssh, mail, web, ftp y edge, en ipset o nftables, con la petición condicional, la comprobación de tamaño y el intercambio atómico ya integrados.
- En un servidor con licencia actualiza el feed cada 15 minutos y toma cada IP a partir de una confianza de 75.
- Lee los logs que el servidor ya escribe, desde sshd hasta Postfix y el servidor web, y envía él mismo los informes de atacantes. Eso sustituye a la acción de fail2ban.
El feed en el agente se licencia por servidor. Professional incluye un servidor y Business tres; cada licencia adicional cuesta 4,90 € al mes IVA incluido y baja a 1,40 € a partir de 50 licencias. Sin licencia el agente sigue detectando, bloqueando en local y enviando informes, solo se pausa el feed. La instalación y los requisitos están en la documentación del Linux Agent.
¿Tienes más de un servidor? La vista general del clúster muestra qué pieza de ReportedIP encaja en cada capa, y el artículo sobre baneos de IP compartidos explica cómo un solo informe bloquea a un atacante en cada servidor de un grupo.
¿Cómo evitas los falsos positivos?
Tres mecanismos limitan los daños colaterales. Los topes de puntuación impiden que un único informante mal configurado meta por sí solo una IP en la Blacklist. El decaimiento retira las IP que dejaron de atacar sin que nadie tenga que darse cuenta. Y una Whitelist en el servidor deja fuera de la lista, antes de generarla, la infraestructura conocida como los rastreadores de buscadores y los servicios de monitorización.
Por tu parte, deja la primera semana una regla de registro en lugar de una regla de descarte (-j LOG en iptables, log en nftables) y revisa lo que se habría bloqueado. El plugin Hive trae la misma idea con su opción «Report-only mode». Si una de tus propias IP acaba en la lista, el formulario de exclusión lo resuelve: las solicitudes se deciden en 48 horas y la retirada es gratuita.
Preguntas frecuentes
¿Cuántas IP hay en la Blacklist de ReportedIP?
El 29 de septiembre de 2026 la base de datos registraba 799.893 IP denunciadas. 4.173 de ellas tenían una puntuación de 90 o más, y las cinco listas por servicio en ese nivel contenían cada una entre 1.344 y 1.640 IP. El parámetro limit admite hasta 50.000 entradas por respuesta, y sin él el valor por defecto es 10.000.
¿Cada cuánto debo actualizar la Blacklist?
Una vez por hora y por lista es suficiente. El servidor reconstruye las listas cada 15 minutos, y con la revalidación por ETag una tarea cron por hora recoge cada cambio relevante. Las listas sin cambios responden 304 Not Modified, y ni el 304 ni una descarga completa cuentan contra una cuota diaria.
¿Qué puntuación de confianza uso para bloquear automáticamente?
Usa 90 para reglas de descarte sin supervisión. El endpoint usa 75 por defecto, que sirve para alertas, limitación de tasa o un CAPTCHA. Una puntuación de 90 exige al menos 10 informes efectivos de dos o más informantes independientes con actividad reciente, y a partir de ahí el descarte automático es seguro en un servidor de producción.
¿Cuánto cuesta el acceso a la Blacklist?
El feed de la API está incluido a partir del plan Contributor. Contributor es gratuito para las cuentas que ejecutan un honeypot; si no, Professional cuesta 14,90 € al mes IVA incluido. Las descargas no cuentan contra ninguna cuota diaria. El ReportedIP Agent necesita una licencia de servidor para cargar el feed, y Professional incluye una.
Sigue leyendo
- Bloqueo a nivel de red: script de sincronización, nftables, IPv6 y cortafuegos cloud
- Integración con fail2ban: devuelve tus baneos a la comunidad
- ReportedIP Agent: el camino listo para servidores Linux
- Ver precios: qué plan incluye el feed