Questa guida contiene alcuni suggerimenti e consigli su come rendere più sicuro il tuo server Linux. Poiché i server (virtuali) devono essere accessibili dall'esterno, è sempre consigliabile adottare una protezione di base contro gli accessi indesiderati: non trascurarla.
Tieni presente che queste istruzioni non sono esaustive e che puoi trovare informazioni più dettagliate in altre sezioni della documentazione ZAP. (ad es. 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 sempre 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 e FTP utilizzano sempre le stesse porte per impostazione predefinita (alcune sono elencate nella tabella qui sopra). Se un aggressore esterno tenta un attacco brute force al tuo servizio SSH, deve prima sapere quale porta viene utilizzata da SSH. Se non modifichi la configurazione predefinita, le porte 22 e 21 sono spesso i primi obiettivi per eseguire direttamente comandi sul server o accedere ai file tramite FTP.
Per impedirlo, ti consigliamo di configurare porte personalizzate per i servizi predefiniti. Nella sezione successiva scoprirai come fare:
La porta scelta deve essere compresa tra 1024 e 65535 e non deve essere già in uso!
Con cat /etc/services puoi visualizzare alcune porte standard, così da evitare di sceglierne una già occupata.
Per cambiare la porta SSH, devi modificare il file di configurazione. Di solito si trova in /etc/ssh/sshd_config; se non è lì, puoi cercarlo con il seguente comando:
find / -name "sshd_config" 2>/dev/null
Ora apri il file con nano (come root o con sudo).
sudo nano /etc/ssh/sshd_config
Inserisci la porta desiderata dopo Port. Se la riga Port è commentata (ovvero #Port 22), rimuovi il carattere "#" e sostituisci 22 con la porta che vuoi usare. Salva il file (in Nano con Ctrl + o) e chiudilo (Nano: Ctrl + x).
Ora devi riavviare il servizio SSH affinché le modifiche abbiano effetto.
# Ad esempio, su Ubuntu/Debian/CentOS
sudo systemctl restart sshd
Se hai installato un servizio FTP come proFTPd, puoi cambiare anche la porta modificando il file di configurazione. La procedura è simile a quella del servizio SSH.
Trova il file di configurazione proftpd.conf:
find / -name "proftpd.conf" 2>/dev/null
Di solito il file si trova in /etc/proftpd.conf (CentOS) oppure in /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Apri il file con nano, rimuovi il carattere "#" prima di port e inserisci la porta desiderata dopo l'opzione. Segui le indicazioni qui sopra per evitare di specificare una porta non valida.
Usa Ctrl + W per cercare in nano.
nano /etc/proftpd/proftpd.conf
Fail2Ban è un servizio che blocca gli indirizzi IP da cui vengono effettuati tentativi di accesso al server probabilmente malevoli. Fail2Ban monitora i file di log per individuare attività sospette e protegge il sistema in modo relativamente semplice ed efficace.
Dopo l'installazione, Fail2Ban include già impostazioni preconfigurate per alcuni servizi molto diffusi, tra cui:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Puoi aggiungere facilmente altri servizi specificando un'espressione regolare (RegEx) e il file di log desiderato.
/var/log/auth.log. Questo file contiene tutti i tentativi di accesso SSH, sia quelli riusciti che quelli non riusciti.
Ecco la voce:
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 di log e lo monitora per rilevare gli errori di autenticazione. Poiché il file di log contiene direttamente l'indirizzo IP dell'aggressore, dopo alcuni tentativi non riusciti Fail2Ban può bloccare quell'indirizzo IP.
Per prima cosa, accedi al tuo server Linux. Se hai bisogno di aiuto, segui la nostra 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, puoi verificare subito lo stato con systemctl: (Premi Ctrl+C per uscire da systemctl.)
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 né configurato. Controlla /etc/fail2ban: dovresti trovare i seguenti file:
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, devi creare un file chiamato jail.local. Ti basta copiare il contenuto di jail.conf nel nuovo file e aprirlo:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Ora puoi modificare tutte le impostazioni nel file jail.local, compresi i servizi da monitorare.
Concentrati solo sulla sezione successiva a [Default]. La sezione Default contiene le impostazioni generali di base.
Scorri verso il basso fino a trovare questa sezione e modificala, ad esempio, come segue:
| Attributo | Descrizione | Valore |
|---|---|---|
| ignoreip | Indirizzi IP da non bloccare | 127.0.0.1/8 |
| ignorecommand | Non rilevante. | |
| bantime | Durata del blocco di un indirizzo IP | 1h |
| findtime | Intervallo in cui vengono conteggiati gli accessi non riusciti | 10m |
| maxretry | Numero di tentativi non riusciti che comportano un blocco | 5 |
# può essere definito separando i valori con spazi (e/o virgole).
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" è il numero di secondi per cui un host viene bloccato.
bantime = 1h
# Un host viene bloccato se genera "maxretry" errori entro "findtime"
# secondi.
findtime = 10m
# "maxretry" è il numero di errori prima che un host venga bloccato.
maxretry = 5
Hai completato la configurazione di base. Per monitorare, ad esempio, il servizio SSH, scorri fino al tag [sshd]. Se hai modificato la porta, inseriscila nel campo port.
La sezione [sshd] sarà quindi simile a questa:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Come puoi vedere, è possibile specificare impostazioni personalizzate per i singoli servizi (ad esempio, maxretry, che qui è inferiore all'impostazione predefinita). Anche se hai già configurato le impostazioni generali, puoi personalizzare separatamente la maggior parte delle opzioni per ogni servizio. Se non lo fai, verranno utilizzate le impostazioni generali.
Ora devi solo riavviare Fail2Ban per avviare il monitoraggio.
sudo systemctl restart fail2ban.service
Se hai accesso a una VPN o a un secondo server, puoi provare a farti bloccare da Fail2Ban per verificare che il servizio funzioni. Con una VPN o un hotspot sul telefono dovresti ottenere un indirizzo IP diverso, che puoi usare per testare Fail2Ban.
Non eseguire il test sulla tua rete abituale: il tuo indirizzo IP potrebbe essere bloccato e potresti rimanere bloccato fuori dal server.
Prova a connetterti via SSH al server (usando un indirizzo IP diverso!) e inserisci ogni volta una password errata. Il risultato dovrebbe essere simile a questo:
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 puoi vedere, il server protetto da Fail2Ban ora rifiuta la connessione (Connection refused invece di Permission denied).
Ora visualizza lo stato di Fail2Ban. Qui puoi verificare che un indirizzo 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
Se vuoi sbloccare l'indirizzo IP, puoi farlo con il seguente comando: fail2ban-client set sshd unbanip {deine IP}.
Se vengono bloccati insolitamente molti indirizzi IP, ti consigliamo di aumentare la durata del blocco a ogni tentativo non riuscito, per ridurre il numero di possibili tentativi di accesso.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime sollte mit jeder Sperre dieser IP steigen
bantime.increment = true
# Skalierungsfaktor von 24 Stunden (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximale Sperrzeit = 5 Wochen
bantime.maxtime = 5w
