Fail2ban + AbuseIPDB
Fail2Ban es una herramienta que se encarga de banear las IP que hacen intentos de conexión a nuestros servidores (ya sea ssh, http, https...). Por defecto cuando Fail2Ban detecta que ha habido varios intentos fallidos, banea la IP durante 15d. De esta forma se evitará que los atacantes/bots que estén realizando un ataque de fuerza bruta puedan estar 24/7 sin parar.
En esta guía se va a proceder a realizarlo con Ubuntu/Debian, pero seguramente para otras distribuciones RHEL sea igual.
Instalar Fail2ban
En la terminal del sistema linux proceda con la instalación de fail2ban.
sudo apt update && sudo apt install fail2ban -y
Cuando se haya instalado, puede que esté desactivado, así que lo primero a realizar es iniciar el servicio al arranque del sistema.
sudo systemctl enable --now fail2ban
Por defecto Fail2ban ya se encarga de banear las IP que intentan acceder por SSH y fallan mas de N veces. Podrás ver las acciones que va realizando en el fichero
tail -f /var/log/fail2ban.log
Comandos útiles Fail2Ban
Visualizar IPs baneadas
sudo fail2ban-client status sshd
Configurar Fail2Ban con AbuseIPDB
Accede a AbuseIPDB, create una cuenta si no dispones de ella y posteriormente entra en la sección de API
En la sección de Create API Key, pulsa en Create Key
copia la API key en un notepad porque la necesitaras a continuación. Vuelve al linux y ejecuta los siguientes comandos.
cd /etc/fail2ban
cp jail.conf jail.local
Edita el fichero jail.local y en la sección de sshd
pon lo siguiente.
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 15d
findtime= 1h
maxretry= 8
# Ban IP and report to AbuseIPDB for SSH Brute-Forcing
action = %(action_)s
%(action_abuseipdb)s[
abuseipdb_apikey="INTRODUCE_LA_API_KEY_ABUSEIPDB",
abuseipdb_category="18,22",
abuseipdb_report_matches=false,
abuseipdb_comment="SSH BruteForce detected by Fail2Ban (failures=<failures>, source=NOMBRE_SERVER)"
]
El campo source te lo puedes ahorra si lo deseas, es solo por si dispones de varios servidores reportando y quieres saber que servidor ha sido... podría quedar perfectamente así
abuseipdb_comment="SSH BruteForce detected by Fail2Ban"
Guarda los cambios y reinicia el servicio de Fail2ban con
sudo systemctl restart fail2ban
Ahora queda a esperar a que un bot comience a intentar realizar un ataque de fuerza bruta, almenos 8 intentos (maxretry=8) para que Fail2ban decida que se banea esa IP y queda reportada en AbuseIPDB.
Fail2ban ignora el comentario en jail.local
Tal como se ha dejado configurado Fail2ban, este ingorará el comentario puesto y mostrará los logs del intento (con lo que aparecerá el nombre del servidor... quizá información que no queremos que se vea...).
Para solventarlo hay que realizar los siguientes pasos.
cd /etc/fail2ban/action.d/
Copiar el fichero abuseipdb.conf como abuseipdb.local (los ficheros .local tienen preferencia sobre los .conf).
sudo cp abuseipdb.conf abuseipdb.local
Modificar el fichero abuseipdb.local, y en la linea donde indique el actionban
actionban = lgm=$(printf '%%.1000s\n...' "<matches>"); curl -sSf "https://api.abuseipdb.com/api/v2/report" -H "Accept: application/json" -H "Key: <abuseipdb_apikey>" --data-urlencode "comment=$lgm" --data-urlencode "ip=<ip>" --data "categories=<abuseipdb_category>"
Modificarla par que en el comentario pase de ser "comment=$lgm" a "comment=<abuseipdb_comment>"
actionban = lgm=$(printf '%%.1000s\n...' "<matches>"); curl -sSf "https://api.abuseipdb.com/api/v2/report" -H "Accept: application/json" -H "Key: <abuseipdb_apikey>" --data-urlencode "comment=<abuseipdb_comment>" --data-urlencode "ip=<ip>" --data "categories=<abuseipdb_category>"
Guardar los cambios, reiniciar el servicio de fail2ban de nuevo.
sudo systemctl restart fail2ban
Y ahora ya aplicará el comentario que se ha puesto en la configuración jail.local.






