Integración con fail2ban
Convierte cada dirección IP que fail2ban bloquee en tu servidor en un informe para la lista negra ReportedIP . Una pequeña acción personalizada invoca la API de informes cada vez que se produce un bloqueo, de modo que tu cortafuegos y la comunidad se protegen mutuamente; además, esos mismos datos alimentan el feed de la lista negra y la zona DNS/RBL.
report autorización. Crea una gratis en tu
panel de control; véase Autenticación En cuanto a los límites, indica únicamente las direcciones IP que tu propio servidor haya detectado realmente.Cómo funciona fail2ban (en 30 segundos)
fail2ban supervisa los archivos de registro (o el diario de systemd). A filtro coincide con los patrones de ataque, un cárcel cuenta el número de coincidencias por IP dentro de findtime, y una vez que una dirección IP
llega a maxretry la cárcel lleva a cabo su acciones (bloqueo + cualquier otra cosa que añadas).
Añadimos una segunda acción que notifica la IP bloqueada a ReportedIP.
1. Crear la acción de informe
Guarda esto como /etc/fail2ban/action.d/reportedip.conf. Cada vez que se bloquea una IP, envía una solicitud POST con la IP bloqueada, las
categorías de amenaza y un breve comentario al punto final de informes.
# /etc/fail2ban/action.d/reportedip.conf
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -sS -m 10 -X POST "<report_url>" \
-H "X-Key: <api_key>" \
--data-urlencode "ip=<ip>" \
--data-urlencode "categories=<categories>" \
--data-urlencode "comment=fail2ban <name>: <failures> failed attempts" \
-o /dev/null || :
actionunban =
[Init]
report_url = https://reportedip.de/wp-json/reportedip/v2/report
api_key = <your-api-key>
categories = 18,22
Restringe los permisos para que la clave no sea legible para todos:
chmod 600 /etc/fail2ban/action.d/reportedip.conf
Las etiquetas <ip>, <name> (nombre de la prisión) y <failures>
los rellena fail2ban; <api_key>, <categories> y
<report_url> provienen de la [Init] bloque.
2. Actívalo en una celda
Añade la acción a una celda en /etc/fail2ban/jail.local — además de la
medida de expulsión habitual (%(action_)s), no en lugar de ello:
# /etc/fail2ban/jail.local
[sshd]
enabled = true
action = %(action_)s
reportedip
Puedes anular las categorías de cada jail indicándolas directamente en el código, por ejemplo:
reportedip[categories="16,21"] en un entorno aislado de una aplicación web.
3. Aplicar y verificar
fail2ban-client reload
hace no fíjalo bien. Usa systemctl restart fail2ban, y luego comprueba que ambas
acciones se hayan cargado.systemctl restart fail2ban
fail2ban-client get sshd actions
# -> The jail sshd has the following actions:
# nftables, reportedip
Lectura del registro de fail2ban
los registros de fail2ban en /var/log/fail2ban.log (o la revista: journalctl -u fail2ban).
Las líneas que te interesan:
2026-05-30 21:56:18 fail2ban.filter [38760]: INFO [sshd] Found 203.0.113.45 - 2026-05-30 21:56:18
2026-05-30 21:56:26 fail2ban.actions [38760]: NOTICE [sshd] Ban 203.0.113.45
2026-05-30 22:06:26 fail2ban.actions [38760]: NOTICE [sshd] Unban 203.0.113.45
| Sinopsis | Significado |
|---|---|
Found <ip> | El filtro ha detectado un intento de ataque. Aún no se ha bloqueado. |
Ban <ip> | Se ha alcanzado el umbral: la jailbreak ha ejecutado sus acciones, incluido el envío del informe a ReportedIP. |
Unban <ip> | bantime ha transcurrido; se ha eliminado la regla del cortafuegos (sin informe). |
Restore Ban <ip> | fail2ban se reinició y volvió a aplicar una restricción que seguía activa. |
El propio informe no dice nada sobre el éxito (-o /dev/null). Para ver cómo se envían los informes,
supervisa el registro durante las pruebas o ejecuta la acción curl manualmente para una dirección IP: todo ha salido bien
devuelve el nuevo informe:
{"data":{"ipAddress":"203.0.113.45","abuseConfidencePercentage":39,"reportId":"4316026","aggregated":true}}
Contadores en tiempo real: comprueba tu clave con
curl -H "X-Key: <key>" https://reportedip.de/wp-json/reportedip/v2/verify-key y leer
limits.dailyReportUsage, o abre el panel de control.
Selección de categorías de amenazas por prisión
Introduce los ID de categoría que coincidan con lo que detecte el jail. Asignaciones habituales (lista completa en Categorías de amenazas):
| Cárcel | categories | Significado |
|---|---|---|
sshd | 18,22 | Fuerza bruta, SSH |
postfix-sasl, dovecot | 11,18 | Correo basura, ataques de fuerza bruta |
proftpd, vsftpd | 5 | Ataque de fuerza bruta por FTP |
nginx-http-auth, apache-auth | 18,21 | Ataque por fuerza bruta, ataque a aplicaciones web |
nginx-badbots, apache-badbots | 14,19 | Escaneo de puertos, bot malicioso |
apache-sqli, vulnerabilidades web | 16,21 | Inyección SQL, ataque a aplicaciones web |
WordPress / wp-login | 18,21 | Ataque por fuerza bruta, ataque a aplicaciones web |
recidive (reincidentes) | 15,18 | Hackeo, fuerza bruta |
Notificar más de un centro penitenciario
Aplica la acción a cada celda y anula las categorías directamente en el código para que cada informe sea preciso:
# /etc/fail2ban/jail.local
[sshd]
enabled = true
action = %(action_)s
reportedip[categories="18,22"]
[postfix-sasl]
enabled = true
action = %(action_)s
reportedip[categories="11,18"]
[recidive]
enabled = true
action = %(action_)s
reportedip[categories="15,18"]
Buenas prácticas y seguridad
- Denuncia únicamente tus propias bloqueos. Nunca denuncies direcciones IP que no hayas observado atacando tus propios sistemas: las denuncias falsas perjudican el conjunto de datos (y pueden provocar la suspensión de tu clave).
- Añade tus propios rangos a la lista blanca. Conservar
ignoreipConfigúralas para las direcciones IP de tu oficina o de los sistemas de supervisión, para que nunca te detectes a ti mismo. - Mantén la clave en secreto (
chmod 600). No está expuesto a los atacantes, pero cualquier persona que tenga el archivo puede enviar informes en tu nombre. Si se filtra, cámbialo desde el panel de control. - Un informe rechazado nunca impide una expulsión. El
|| :al final deactionbansignifica que un fallo de red en ReportedIP impedirá que fail2ban bloquee el acceso localmente. - Umbrales razonables. Muy bajo
maxretryEn las bases de datos ruidosas, es posible que se registren en exceso los clientes transitorios; los valores predeterminados (3-5) son adecuados.
Solución de problemas
| Síntoma | Corregir |
|---|---|
get <jail> actions muestra únicamente la medida de expulsión | Has actualizado la página en lugar de reiniciar. Ejecuta systemctl restart fail2ban. |
unknown smtpd restriction / jail no se inicia | Error tipográfico en la configuración jail.local; comprueba la sangría de la línea de continuación debajo de action. |
| Informes rechazados (HTTP 401/403) | Falta la tecla report permisos incorrectos o un encabezado erróneo — debe ser X-Key. |
| HTTP 429 / cuota | Se ha alcanzado el límite diario de informes de tu plan; consulta la sección «Autenticación». |
| No hay nada en el registro sobre la prohibición | La acción del informe no indica si se ha realizado correctamente. Confírmelo con fail2ban-client get <jail> actions y un manual curl. |