Questa guida contiene alcuni consigli e suggerimenti su come rendere più sicuro il tuo server Linux. Proprio perché i server devono essere accessibili dall’esterno, una protezione di base contro accessi indesiderati è sicuramente consigliata e non va trascurata.
Tieni presente che queste istruzioni non sono esaustive e informazioni più dettagliate si trovano in altre sezioni della documentazione ZAP. (ad esempio 2FA (SSH))
Il modo più semplice per proteggere il tuo server è sempre lo stesso, indipendentemente dal tipo di server: usa password sicure, aggiorna regolarmente i tuoi servizi e presta attenzione ai servizi che installi e alle guide che segui.
| Servizio | Porta |
|---|---|
| SSH | 22 |
| FTP | 21 |
| 25 | |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Servizi come SSH o FTP usano di default sempre le stesse porte (alcune sono nella tabella sopra). Se un attaccante esterno tenta di forzare l’accesso SSH con attacchi brute-force, deve prima sapere quale porta usa SSH. Se non cambi queste porte, le porte 22 e 21 sono quasi sempre quelle usate per eseguire comandi sul server o accedere via FTP.
Per evitarlo, consigliamo di configurare porte personalizzate per i servizi standard. Nel prossimo paragrafo spieghiamo come fare:
La porta scelta deve essere compresa tra 1024 e 65535 e non deve essere già in uso!
Puoi vedere alcune porte standard con cat /etc/services per evitare di scegliere una porta già occupata.
Per cambiare la porta SSH devi modificare il file di configurazione, solitamente in /etc/ssh/sshd_config. Se non lo trovi, puoi cercarlo con:
find / -name "sshd_config" 2>/dev/null
Apri il file con nano (come root o usando sudo):
sudo nano /etc/ssh/sshd_config
Inserisci la porta desiderata dopo Port. Se la riga Port è commentata (es. #Port 22), rimuovi il "#" e sostituisci 22 con la porta scelta. Salva (Ctrl + o) e chiudi (Ctrl + x).
Devi riavviare il servizio SSH per applicare le modifiche:
# Su Ubuntu/Debian/CentOS ad esempio
sudo systemctl restart sshd
Se hai installato un servizio FTP come proFTPd, puoi cambiare la porta modificando il file di configurazione, simile a SSH.
Cerca il file proftpd.conf:
find / -name "proftpd.conf" 2>/dev/null
Di solito si trova in /etc/proftpd.conf (CentOS) o /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Apri il file con nano, rimuovi il "#" davanti a port e inserisci la porta desiderata. Ricorda di scegliere una porta valida come indicato sopra.
Usa Ctrl + W in nano per cercare.
nano /etc/proftpd/proftpd.conf
Fail2Ban è un servizio che blocca gli indirizzi IP che tentano di accedere al server con intenzioni probabilmente malevole. Monitora i file di log per rilevare anomalie e protegge il sistema in modo semplice ed efficace.
Dopo l’installazione, Fail2Ban ha già configurazioni predefinite per alcuni servizi comuni, tra cui:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Altri servizi possono essere aggiunti facilmente con espressioni regolari (RegEx) e specificando il file di log.
/var/log/auth.log che contiene tutti i tentativi di login SSH, riusciti o falliti.
Ecco una riga di esempio:
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2
Fail2Ban usa questo file per monitorare i tentativi falliti. Poiché il log contiene l’IP dell’attaccante, Fail2Ban può bloccare quell’IP dopo alcuni tentativi falliti.
Accedi al server Linux. Se serve, segui la guida Primo accesso (SSH). Esegui i comandi come root o con sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Dopo l’installazione, verifica lo stato con systemctl (esci con Ctrl+C):
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
Docs: man:fail2ban(1)
Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
Main PID: 23989 (fail2ban-server)
CPU: 409ms
CGroup: /system.slice/fail2ban.service
`-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready
Fail2Ban è installato ma non ancora attivo o configurato. Controlla la cartella /etc/fail2ban dove dovresti trovare:
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf
Per creare una “jail” attiva, crea un file jail.local. Copia il contenuto di jail.conf in questo nuovo file e aprilo:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Qui puoi modificare tutte le impostazioni, inclusi i servizi da monitorare.
Guarda la sezione dopo [Default], che contiene le impostazioni generali.
Scorri fino a questa tabella e modificala così:
| Attributo | Descrizione | Valore |
|---|---|---|
| ignoreip | IP che non devono essere bloccati | 127.0.0.1/8 |
| ignorecommand | Non rilevante | |
| bantime | Durata del blocco di un IP | 1h |
| findtime | Intervallo in cui i tentativi falliti sono considerati | 10m |
| maxretry | Numero di tentativi falliti prima del blocco | 5 |
# può essere definito separando con spazi (e/o virgole)
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" è il numero di secondi in cui un host è bloccato.
bantime = 1h
# Un host viene bloccato se genera "maxretry" errori entro gli ultimi "findtime"
# secondi.
findtime = 10m
# "maxretry" è il numero di errori prima del blocco.
maxretry = 5
Hai così completato le impostazioni base. Per monitorare il servizio SSH, scorri fino alla sezione [sshd]. Se hai cambiato la porta, inseriscila in port.
La sezione [sshd] sarà così:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Puoi anche impostare parametri specifici per ogni servizio (ad esempio maxretry più basso del valore di default). Se non li imposti, si usano quelli generali.
Ora riavvia Fail2Ban per attivare il monitoraggio:
sudo systemctl restart fail2ban.service
Se hai accesso a una VPN o a un secondo server, puoi testare Fail2Ban bloccando te stesso. Usando una VPN o hotspot sul cellulare avrai un IP diverso per testare Fail2Ban.
Non fare questo nella tua rete normale, potresti bloccare il tuo IP e rimanere bloccato fuori.
Prova a connetterti via SSH al server (con IP diverso!) inserendo sempre la password sbagliata. Dovresti vedere:
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused
Come vedi, la connessione viene rifiutata (Connection refused invece di Permission denied).
Controlla lo stato di Fail2Ban. Vedrai che un IP è stato bloccato:
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: xxx
Per sbloccare un IP usa: fail2ban-client set sshd unbanip {tuo IP}.
Se hai molti blocchi IP, considera di aumentare la durata del blocco ad ogni tentativo fallito per ridurre i tentativi di login possibili.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime aumenta ad ogni blocco di questo IP
bantime.increment = true
# Fattore di scala di 24 ore (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Durata massima blocco = 5 settimane
bantime.maxtime = 5w
