Guies de LinuxLinuxXarxes

Com configurar Fail2Ban en servidors sense WordPress

Guia pràctica per protegir servidors sense WordPress amb Fail2Ban.


Quan tens un servidor web que no fa servir WordPress, pot semblar que els atacs no van amb tu. La realitat és una altra: cada dia milers de bots escanegen Internet buscant vulnerabilitats. Si tens un Apache o un Nginx exposat, Fail2Ban pot ser el teu millor aliat. En aquesta guia t’explico com configurar-lo pas a pas, pensant especialment en webs que no tenen WordPress però reben intents constants d’accés a wp-login.php o xmlrpc.php.


Introducció a Fail2Ban

Què és i per a què serveix

Fail2Ban és una eina que vigila els registres (logs) del servidor (com auth.log o access.log) i bloqueja automàticament les IP amb comportaments sospitosos: intents d’accés repetits, peticions a fitxers inexistents o patrons típics d’atacs automatitzats.

En poques paraules: és un guardià digital que observa qui truca a la teva porta i tanca el pany als qui volen fer mal.

Per què és útil encara que no tinguis WordPress

Encara que no facis servir WordPress, molts bots el buscaran igualment. Aquestes peticions a /wp-login.php o /xmlrpc.php no només embruten els logs: també gasten CPU i amplada de banda. Amb Fail2Ban les pots bloquejar automàticament abans que facin més nosa.


Com funciona

Fail2Ban es basa en tres conceptes que convé tenir clars:

  • Filtre: defineix què és sospitós, amb expressions regulars (failregex) que busquen patrons als logs.
  • Jail (presó): aplica un filtre a un log concret i, quan una IP compleix les condicions (per exemple, 3 intents fallits), hi actua.
  • Acció: què es fa amb la IP enxampada, normalment bloquejar-la al tallafoc.

Pots tenir diverses jails, cadascuna amb la seva missió: una per a SSH, una altra per a Apache, una per a FTP…


Instal·lació i preparació

Instal·lar Fail2Ban a Debian/Ubuntu

sudo apt update && sudo apt install fail2ban

A Fedora, Rocky o Alma seria sudo dnf install fail2ban.

Comprovar el servei i els fitxers principals

sudo systemctl status fail2ban

Els fitxers que has de conèixer:

  • /etc/fail2ban/jail.conf → configuració base. No la modifiquis (una actualització la pot sobreescriure).
  • /etc/fail2ban/jail.local → la teva configuració (té prioritat sobre jail.conf).
  • /etc/fail2ban/jail.d/ → fitxers .local per jail, una bona manera d’organitzar-ho.
  • /etc/fail2ban/filter.d/ → els filtres (patrons de detecció).
  • /var/log/fail2ban.log → el registre d’activitat del propi Fail2Ban.

Configuració bàsica: jail.local

Paràmetres generals

Crea el fitxer:

sudo nano /etc/fail2ban/jail.local

I afegeix-hi la secció [DEFAULT]:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 8h
findtime = 5m
maxretry = 3

Això vol dir:

  • ignoreip: adreces que mai es bloquegen. Posa-hi la teva IP fixa separada per espais; és la millor manera d’evitar deixar-te tu mateix fora. Si no en tens de fixa, evita baixar massa el maxretry de la jail de SSH.
  • bantime: durada del bloqueig (aquí, 8 hores). Pots posar -1 per a un bloqueig permanent.
  • findtime: finestra de temps en què es compten els intents.
  • maxretry: intents permesos dins de findtime abans de bloquejar.

> Sobre el backend i els logs: a les distribucions actuals (Debian 12/13, Ubuntu recents) el sistema sovint no escriu /var/log/auth.log i ho envia tot al journal de systemd. Si és el teu cas, afegeix backend = systemd a [DEFAULT] i no cal que indiquis logpath a la jail de SSH. Si tens rsyslog instal·lat i el fitxer auth.log existeix, pots deixar el backend automàtic.

Jail per a SSH

Afegeix dins de jail.local:

[sshd]
enabled = true
port = ssh
maxretry = 3

Això protegeix l’accés remot al servidor contra atacs de força bruta. Si vols enfortir més l’SSH (canviar el port, claus en lloc de contrasenya…), mira la guia d’instal·lació i configuració d’SSH i la del fitxer sshd_config.

> Un apunt sobre el bloqueig (banaction): per defecte, Fail2Ban bloqueja amb iptables-multiport (o nftables-multiport segons el sistema), i això funciona sense configurar res més. Als exemples d’aquesta guia faig servir banaction = ufw perquè el servidor on la vaig escriure fa servir UFW com a tallafoc. Si tu no fas servir UFW, treu aquesta línia i deixa el bloqueig per defecte.


Protegir Apache de bots i escàners

Crear la jail «fake-wordpress»

Aquesta jail detecta bots que busquen WordPress encara que no el facis servir.

1. El filtre, a /etc/fail2ban/filter.d/fake-wordpress.conf:

[Definition]
failregex = ^<HOST> -.*"(GET|POST)\s+/(wp-login\.php|xmlrpc\.php|wp-admin|wp-includes|wp-json|wp-cron\.php|wlwmanifest\.xml)
ignoreregex =

Aquest patró casa amb les peticions a les rutes típiques de WordPress. L’he comprovat amb fail2ban-regex: enxampa les peticions a wp-login.php, xmlrpc.php o wp-json, i deixa passar el trànsit legítim (per exemple, un GET /index.html). Pots provar tu mateix un filtre contra un log abans de posar-lo en marxa:

fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/fake-wordpress.conf

2. La jail, a /etc/fail2ban/jail.d/fake-wordpress.local:

[fake-wordpress]
enabled = true
filter = fake-wordpress
logpath = /var/log/apache2/*access.log
port = http,https
banaction = ufw
maxretry = 1
findtime = 1d
bantime = 1w

Amb maxretry = 1, qualsevol IP que demani una d’aquestes rutes queda bloquejada al primer intent, durant 7 dies. Ajusta logpath al nom real dels teus logs (a Nginx solen ser /var/log/nginx/*access.log).

> Compte a no bloquejar-te tu mateix: si fas proves demanant aquestes rutes des de la teva pròpia IP, també et bloquejaràs. Afegeix la teva IP a ignoreip o desbloqueja-te-la després (ho veurem al final). Ho dic per experiència pròpia.


Càstig als reincidents amb la jail «recidive»

Què fa

La jail recidive analitza el log del propi Fail2Ban (/var/log/fail2ban.log) i busca IP que ja han estat bloquejades diverses vegades per qualsevol altra jail. Si una IP insisteix, s’aplica un bloqueig llarg (un mes o més). Fail2Ban ja porta aquesta jail definida de sèrie; només cal activar-la i ajustar-la.

A /etc/fail2ban/jail.d/recidive.local:

[recidive]
enabled = true
banaction = ufw
maxretry = 5
findtime = 1d
bantime = 30d

És a dir: si una IP ha estat bloquejada 5 cops en 24 hores, queda fora durant 30 dies.


Reiniciar i comprovar l’estat

Cada vegada que canvies la configuració, recarrega el servei:

sudo systemctl restart fail2ban
sudo fail2ban-client status

Per veure les IP bloquejades de cada jail:

sudo fail2ban-client status sshd
sudo fail2ban-client status fake-wordpress
sudo fail2ban-client status recidive

Comprovar que funciona

Des d’una IP externa (no la teva!), pots simular una petició maliciosa:

curl -I http://elteuservidor/wp-login.php

En pocs segons, aquella IP hauria de quedar bloquejada. Comprova-ho amb fail2ban-client status fake-wordpress.


Bones pràctiques i manteniment

  • Revisa els logs de tant en tant: sudo tail -n 100 /var/log/fail2ban.log.
  • Mantén el sistema al dia: sudo apt update && sudo apt upgrade.
  • Valida la configuració abans de reiniciar amb sudo fail2ban-client -d (mostra la configuració interpretada i avisa d’errors).
  • Si vols rebre avisos per correu, canvia l’acció per defecte a action = %(action_mwl)s (requereix un MTA configurat al servidor).

Errors habituals

ProblemaCausa probableSolució
La jail no es carregaError al nom o al format del fitxerRevisa-ho amb sudo fail2ban-client -d
No bloqueja cap IPRuta del log incorrectaConfirma el logpath i prova el filtre amb fail2ban-regex
El servei no arrencaError de sintaxi al fitxer .conf/.localComprova espais i seccions [...]
Et quedes bloquejat tuLa teva IP no és a ignoreipAfegeix-la o desbloqueja-te-la (vegeu avall)

Conclusions

Si el teu servidor no fa servir WordPress, Fail2Ban és una manera senzilla i potent de mantenir-lo segur davant bots i escàners. Amb la combinació de les tres peces —la jail de sshd, la fake-wordpress i la recidive— tens una protecció en diverses capes:

  • Primera línia: bloqueig immediat (SSH i Apache/Nginx).
  • Segona línia: càstig als reincidents.
  • Tercera línia: tranquil·litat per a tu.

I tot automàtic, sense haver de vigilar els logs tot el dia.


Preguntes freqüents

Fail2Ban alenteix el servidor? No, és molt lleuger. Només llegeix els logs i executa comandes del tallafoc quan detecta activitat sospitosa.

Puc afegir més rutes al filtre? Sí. Edita fake-wordpress.conf i afegeix camins al failregex (per exemple admin\.php o config\.php). Prova sempre els canvis amb fail2ban-regex abans d’aplicar-los.

Què faig si bloquejo un client legítim (o a mi mateix)? El desbloqueges indicant la jail i la IP:

sudo fail2ban-client set fake-wordpress unbanip 203.0.113.5

Fail2Ban bloqueja per país? No directament. Per bloquejar països sencers cal combinar-lo amb el tallafoc (ufw/nftables) i llistes GeoIP.

Cal reiniciar després de cada canvi? Sí. Després de modificar la configuració, fes sudo systemctl restart fail2ban (o sudo fail2ban-client reload).