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).