Ir al contenido principalIr al pie de página

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.

Necesitas una clave API con el 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.

conf
# /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:

bash
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.localademás de la medida de expulsión habitual (%(action_)s), no en lugar de ello:

conf
# /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

Añadir un nuevo La acción requiere un reinicio completo — fail2ban-client reload hace no fíjalo bien. Usa systemctl restart fail2ban, y luego comprueba que ambas acciones se hayan cargado.
bash
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:

registro
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
SinopsisSignificado
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:

json
{"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árcelcategoriesSignificado
sshd18,22Fuerza bruta, SSH
postfix-sasl, dovecot11,18Correo basura, ataques de fuerza bruta
proftpd, vsftpd5Ataque de fuerza bruta por FTP
nginx-http-auth, apache-auth18,21Ataque por fuerza bruta, ataque a aplicaciones web
nginx-badbots, apache-badbots14,19Escaneo de puertos, bot malicioso
apache-sqli, vulnerabilidades web16,21Inyección SQL, ataque a aplicaciones web
WordPress / wp-login18,21Ataque por fuerza bruta, ataque a aplicaciones web
recidive (reincidentes)15,18Hackeo, 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:

conf
# /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 ignoreip Configú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 de actionban significa que un fallo de red en ReportedIP impedirá que fail2ban bloquee el acceso localmente.
  • Umbrales razonables. Muy bajo maxretry En 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íntomaCorregir
get <jail> actions muestra únicamente la medida de expulsiónHas actualizado la página en lugar de reiniciar. Ejecuta systemctl restart fail2ban.
unknown smtpd restriction / jail no se iniciaError 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 / cuotaSe 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ónLa acción del informe no indica si se ha realizado correctamente. Confírmelo con fail2ban-client get <jail> actions y un manual curl.
¿Quieres bloquear también el uso de datos de la comunidad? Importa el feed de la lista negra a nftables/ipset o, en el caso de los servidores de correo, consulta la zona DNS/RBL.
Centrado en la seguridad
Conforme al RGPD
Fabricado en Alemania
Volver a la documentación