fail2ban + UFW: difendere un server Linux esposto in 30 minuti

Published on 11/05/2026 Sicurezza

Un server esposto su Internet riceve migliaia di tentativi di login al giorno. UFW filtra le porte aperte; fail2ban legge i log e banna gli IP che provano e riprovano. Setup tipico in mezz'ora.

1. UFW: regole di base

# installa
sudo apt install ufw

# nega tutto in ingresso, consenti tutto in uscita
sudo ufw default deny incoming
sudo ufw default allow outgoing

# servizi standard
sudo ufw allow ssh        # 22/tcp
sudo ufw allow http       # 80/tcp
sudo ufw allow https      # 443/tcp

# se hai SSH su porta non standard (consigliato per ridurre spam log)
sudo ufw allow 2222/tcp comment 'SSH custom port'

# limit SSH: dopo 6 tentativi in 30s blocca per 30s
sudo ufw limit ssh

# attiva
sudo ufw enable
sudo ufw status verbose

2. Whitelist permanente

Per non bloccarti l'IP di casa:

sudo ufw allow from 1.2.3.4 to any port 22 comment 'casa'
sudo ufw allow from 192.168.1.0/24 comment 'LAN'

3. fail2ban: installazione

sudo apt install fail2ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

4. Configurazione jail.local

Modifica /etc/fail2ban/jail.local:

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 1.2.3.4
backend  = systemd
banaction = ufw

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true

# se hai WordPress
[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/log/nginx/access.log
port     = http,https
maxretry = 3

5. Filter custom per WordPress

Crea /etc/fail2ban/filter.d/wordpress.conf:

[Definition]
failregex = ^.*POST /wp-login.php
            ^.*POST /xmlrpc.php
ignoreregex =

6. Attiva e verifica

sudo systemctl enable --now fail2ban

# stato globale
sudo fail2ban-client status

# stato jail SSH
sudo fail2ban-client status sshd

# IP attualmente bannati
sudo fail2ban-client banned

7. Whitelist a caldo

Se ti sei bannato tu stesso:

sudo fail2ban-client set sshd unbanip 1.2.3.4

8. Log e monitoring

sudo tail -f /var/log/fail2ban.log
sudo journalctl -u fail2ban -f
sudo grep "Ban " /var/log/fail2ban.log | wc -l
sudo awk '/Ban / {print \$NF}' /var/log/fail2ban.log | sort | uniq -c | sort -rn | head -20

9. Backup delle regole UFW

sudo cp -r /etc/ufw /backup/ufw-\$(date +\%Y\%m\%d)
sudo iptables-save > /backup/iptables-\$(date +\%Y\%m\%d).rules
Prima di abilitare UFW da SSH remoto: assicurati di aver consentito la porta SSH! Se ti dimentichi ufw allow ssh e attivi UFW, perdi accesso al server e devi andarci fisicamente (o via console KVM cloud).