Guias de linuxLinuxRedes

Guia completa per configurar Fail2Ban en servidors sense WordPress (protegeix-te dels atacs automàtics)

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


Quan tens un servidor web que no utilitza WordPress, pot semblar que els atacs no són un problema. Però la realitat és diferent: cada dia milers de bots escanegen Internet buscant vulnerabilitats. Si tens un servidor Apache o Nginx exposat, Fail2Ban pot ser el teu millor aliat. En aquesta guia t’explico com configurar-lo pas a pas, especialment per a webs que no contenen WordPress però reben intents constants d’accés a wp-login.php o xmlrpc.php.


Introducció a Fail2Ban

Què és Fail2Ban i per a què serveix?

Fail2Ban és una eina que vigila els logs del teu servidor (com auth.log o access.log) i bloqueja automàticament aquelles IPs que mostren 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 toca la teva porta i tanca el pany als qui volen fer mal.

Per què és essencial encara que no tinguis WordPress

Encara que no facis servir WordPress, molts bots intentaran trobar-lo igualment.
Aquestes peticions a /wp-login.php o /xmlrpc.php no només saturen els teus logs, sinó que poden augmentar el consum de CPU i banda.
Amb Fail2Ban pots bloquejar-los automàticament abans que facin més nosa.


Com funciona Fail2Ban

El principi bàsic de detecció i bloqueig

Fail2Ban utilitza “filtres” per identificar patrons en els fitxers de registre (logs).
Quan una IP compleix les condicions d’un filtre (per exemple, 3 intents fallits de login), entra en una “jail”. Aquesta jail aplica una acció, normalment un bloqueig amb ufw o iptables.

Què és una jail i com actua

Una jail és com una presó digital: si una IP fa alguna cosa prohibida, queda confinada. Pots tenir diverses jails, cadascuna amb la seva missió: una per SSH, una altra per Apache, una per FTP…

Relació entre filtres, jails i accions

  • Filtre: defineix què és sospitós.
  • Jail: aplica el filtre a un log concret.
  • Acció: què fer quan algú cau al filtre (normalment bloquejar).

Instal·lació i preparació inicial

Com instal·lar Fail2Ban a Debian/Ubuntu

Aquesta comanda instal·la Fail2Ban amb totes les seves dependències:

sudo apt update && sudo apt install fail2ban -y

Verificació del servei i fitxers principals

Comprova que el servei estigui actiu:

sudo systemctl status fail2ban

Els fitxers més importants:

  • /etc/fail2ban/jail.conf → configuració base (no modificar).
  • /etc/fail2ban/jail.local → la teva configuració personal.
  • /etc/fail2ban/filter.d/ → filtres personalitzats.
  • /var/log/fail2ban.log → registre d’activitat.

Configuració bàsica del fitxer jail.local

Crear el fitxer i definir paràmetres generals

Crea el fitxer jail.local:

sudo nano /etc/fail2ban/jail.local

Afegeix:

[DEFAULT]
ignoreip = 127.0.0.1/8 [puedes poner las ip que ignore separadas por espacio]
bantime = 28800
findtime = 300
maxretry = 3
backend = systemd

Això defineix:

  • La teva IP com a segura (mai serà bloquejada).
  • Temps de baneo: 8 hores.
  • 3 intents fallits → bloqueig.

Configuració de la jail per SSH

Afegeix aquesta secció dins jail.local:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

Això protegeix l’accés remot al servidor.


Protegir Apache de bots i escanejos automàtics

Crear la jail “fake-wordpress”

Aquesta jail detecta bots que busquen WordPress encara que no l’utilitzis.

Fitxer /etc/fail2ban/filter.d/fake-wordpress.conf

sudo tee /etc/fail2ban/filter.d/fake-wordpress.conf > /dev/null <<'EOF'
[Definition]
failregex = ^<HOST> -.*"(GET|POST)\s+/(wp-login\.php|xmlrpc\.php|wp-admin|wp-content|wp-includes|wp-json|wp-cron\.php|wlwmanifest\.xml|wp-.*|xmlrpc).*"
            ^<HOST> -.*"(GET|POST)\s+/(admin\.php|config\.php|postnews\.php|about\.php|num\.php)\b.*"
ignoreregex =
EOF

Fitxer /etc/fail2ban/jail.d/fake-wordpress.local

sudo tee /etc/fail2ban/jail.d/fake-wordpress.local > /dev/null <<'EOF'

[fake-wordpress]

enabled = true filter = fake-wordpress logpath = /var/log/apache2/*_access.log port = http,https banaction = ufw maxretry = 1 findtime = 86400 bantime = 604800 EOF

Això bloqueja qualsevol IP que accedeixi a rutes típiques de WordPress o scripts sospitosos.
El baneo dura 7 dies.


Afegir la protecció per reincidents amb “recidive”

Què fa exactament aquesta jail

La jail recidive analitza el log principal de Fail2Ban (/var/log/fail2ban.log) i busca IPs que hagin estat bloquejades diverses vegades per qualsevol altra jail.
Si una IP repeteix atacs, s’aplica un baneo llarg (1 mes o més).

Configuració recomanada

Fitxer /etc/fail2ban/jail.d/recidive.local

sudo tee /etc/fail2ban/jail.d/recidive.local > /dev/null <<'EOF'

[recidive]

enabled = true filter = recidive logpath = /var/log/fail2ban.log banaction = ufw maxretry = 5 findtime = 86400 bantime = 2592000 EOF

Això vol dir:

  • Si una IP ha estat bloquejada 5 cops en 24h, serà baneada durant 30 dies.

Reiniciar i comprovar l’estat de Fail2Ban

Com veure les jails actives i IPs bloquejades

sudo systemctl restart fail2ban
sudo fail2ban-client status

Per veure les IPs bloquejades per cada jail:

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

Verificar si la protecció funciona correctament

Simula una petició maliciosa (des d’una IP externa):

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

En pocs segons, aquella IP quedarà bloquejada.


Bones pràctiques i manteniment

Actualitzacions, revisions i alertes

  • Revisa els logs: sudo tail -n 100 /var/log/fail2ban.log
  • Actualitza el sistema periòdicament: sudo apt update && sudo apt upgrade -y
  • Configura alertes per correu (opcional): action = %(action_mwl)s

Errors habituals i com solucionar-los

ProblemaCausa probableSolució
Jail no es carregaError al nom o format del fitxerRevisa amb sudo fail2ban-client -d
No bloqueja IPsRuta del log incorrectaConfirma logpath
El servei no arrencaError de sintaxi INIVerifica espais i tabulacions

Conclusions

Si el teu servidor no utilitza WordPress, Fail2Ban és una manera senzilla i potent de mantenir-lo segur davant bots i escanejos.
Amb la combinació de tres fitxers clau —jail.local, fake-wordpress.local i recidive.local— tens una protecció multicapa:

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

Amb això, ja tens un sistema automàtic de defensa sense haver d’estar vigilant els logs tot el dia.


Preguntes freqüents (FAQ)

1️⃣ Fail2Ban redueix el rendiment del servidor?
No, és molt lleuger. Només llegeix els logs i executa ordres de firewall quan detecta activitat sospitosa.

2️⃣ Puc afegir més rutes personalitzades al filtre?
Sí! Pots editar el fitxer fake-wordpress.conf i afegir noves línies failregex amb altres camins (com /admin.php o /config.php).

3️⃣ Què passa si un client legítim queda bloquejat?
Pots desbanear-lo amb:

sudo fail2ban-client set fake-wordpress unbanip <IP>

4️⃣ Fail2Ban bloqueja automàticament per país?
No directament. Per això cal combinar-lo amb eines com ufw o geoip si vols bloquejar països sencers.

5️⃣ Cal reiniciar Fail2Ban després de cada canvi?
Sí, sempre que modifiquis una configuració. Fes-ho amb:

sudo systemctl restart fail2ban

Amb aquesta guia completa, el teu servidor sense WordPress quedarà blindat davant bots, escàners i atacs automatitzats — i tu podràs dormir més tranquil 😄.