Come proteggere il tuo server Linux con fail2ban
Pubblicato: 2022-01-29 Con fail2ban
, il tuo computer Linux blocca automaticamente gli indirizzi IP che hanno troppi errori di connessione. È sicurezza autoregolante! Ti mostreremo come usarlo.
Sicurezza Sicurezza Sicurezza
La duchessa di Windsor, Wallis Simpson, una volta disse: "Non puoi mai essere troppo ricco o troppo magro". Abbiamo aggiornato questo per il nostro mondo moderno e interconnesso: non puoi mai essere troppo attento o troppo sicuro.
Se il tuo computer accetta richieste di connessione in entrata, come le connessioni Secure Shell (SSH), o funge da server Web o e-mail, devi proteggerlo da attacchi di forza bruta e indovinatori di password.
Per fare ciò, dovrai monitorare le richieste di connessione che non riescono a entrare in un account. Se non si autenticano ripetutamente entro un breve periodo, dovrebbe essere vietato loro di effettuare ulteriori tentativi.
L'unico modo in cui ciò può essere ottenuto praticamente è automatizzare l'intero processo. Con un po' di semplice configurazione, fail2ban
gestirà il monitoraggio, il divieto e l'annullamento del divieto per te.
fail2ban
integra con il firewall di Linux iptables
. Impone i divieti sugli indirizzi IP sospetti aggiungendo regole al firewall. Per mantenere questa spiegazione ordinata, stiamo usando iptables
con un set di regole vuoto.
Ovviamente, se sei preoccupato per la sicurezza, probabilmente hai un firewall configurato con un set di regole ben popolato. fail2ban
aggiunge e rimuove solo le proprie regole: le normali funzioni del firewall rimarranno intatte.
Possiamo vedere il nostro set di regole vuoto usando questo comando:
sudo iptables -L
CORRELATI: La Guida per principianti a iptables, il firewall Linux
Installazione di fail2ban
L'installazione fail2ban
è semplice su tutte le distribuzioni che abbiamo utilizzato per la ricerca in questo articolo. Su Ubuntu 20.04, il comando è il seguente:
sudo apt-get install fail2ban
Su Fedora 32, digita:
sudo dnf install fail2ban
Su Manjaro 20.0.1, abbiamo usato pacman
:
sudo pacman -Sy fail2ban
Configurazione fail2ban
L'installazione fail2ban
contiene un file di configurazione predefinito chiamato jail.conf. Questo file viene sovrascritto quando fail2ban
viene aggiornato, quindi perderemo le nostre modifiche se apportiamo personalizzazioni a questo file.
Invece, copieremo il file jail.conf in uno chiamato jail.local. Inserendo le nostre modifiche alla configurazione in jail.local, persisteranno durante gli aggiornamenti. Entrambi i file vengono letti automaticamente da fail2ban
.
Ecco come copiare il file:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Ora apri il file nel tuo editor preferito. Useremo gedit
:
sudo gedit /etc/fail2ban/jail.local
Cercheremo due sezioni nel file: [DEFAULT] e [sshd]. Fai attenzione a trovare le sezioni effettive, però. Quelle etichette appaiono anche nella parte superiore di una sezione che le descrive, ma non è quello che vogliamo.
Troverai la sezione [DEFAULT] da qualche parte intorno alla riga 40. È una sezione lunga con molti commenti e spiegazioni.
Scorri verso il basso fino alla riga 90 e troverai le seguenti quattro impostazioni che devi conoscere:
- ignoreip: una whitelist di indirizzi IP che non saranno mai bannati. Hanno una carta Esci dalla prigione gratuita permanente. L'indirizzo IP di localhost (
127.0.0.1
) è nell'elenco per impostazione predefinita, insieme al suo equivalente IPv6 (::1
). Se ci sono altri indirizzi IP che sai non dovrebbero mai essere bannati, aggiungili a questo elenco e lascia uno spazio tra ciascuno di essi. - bantime: la durata per la quale un indirizzo IP viene bannato (la "m" sta per minuti). Se si digita un valore senza "m" o "h" (per le ore), verrà trattato come secondi. Un valore di -1 vieterà permanentemente un indirizzo IP. Fai molta attenzione a non chiuderti permanentemente fuori.
- findtime: la quantità di tempo entro la quale troppi tentativi di connessione non riusciti comporteranno l'esclusione di un indirizzo IP.
- maxretry: il valore per "troppi tentativi falliti".
Se una connessione dallo stesso indirizzo IP effettua maxretry
tentativi di connessione non riusciti entro il periodo findtime
, vengono banditi per la durata del bantime
. Le uniche eccezioni sono gli indirizzi IP nell'elenco ignoreip
.
fail2ban
mette gli indirizzi IP in carcere per un determinato periodo di tempo. fail2ban
supporta molte jail diverse e ognuna rappresenta le impostazioni che si applicano a un singolo tipo di connessione. Ciò consente di avere impostazioni diverse per vari tipi di connessione. Oppure puoi fare in modo che fail2ban
controlli solo un insieme scelto di tipi di connessione.
Potresti averlo indovinato dal nome della sezione [DEFAULT], ma le impostazioni che abbiamo esaminato sono quelle predefinite. Ora, diamo un'occhiata alle impostazioni per la jail SSH.
CORRELATI: Come modificare graficamente i file di testo su Linux con gedit
Configurazione di una prigione
Le jail ti consentono di spostare i tipi di connessione dentro e fuori dal monitoraggio di fail2ban's
. Se le impostazioni predefinite non corrispondono a quelle che desideri applicare alla jail, puoi impostare valori specifici per bantime
, findtime
e maxretry
.
Scorri verso il basso fino alla riga 280 e vedrai la sezione [sshd].
Qui è dove puoi impostare i valori per la jail della connessione SSH. Per includere questa jail nel monitoraggio e nel ban, dobbiamo digitare la seguente riga:
abilitato = vero
Digitiamo anche questa riga:
massimo tentativo = 3
L'impostazione predefinita era cinque, ma vogliamo essere più cauti con le connessioni SSH. Lo abbiamo ridotto a tre, quindi abbiamo salvato e chiuso il file.
Abbiamo aggiunto questa jail al monitoraggio fail2ban's
e sovrascritto una delle impostazioni predefinite. Una jail può utilizzare una combinazione di impostazioni predefinite e specifiche della jail.
Abilitazione fail2ban
Finora, abbiamo installato fail2ban
e l'abbiamo configurato. Ora, dobbiamo abilitarlo per l'esecuzione come servizio di avvio automatico. Quindi, dobbiamo testarlo per assicurarci che funzioni come previsto.
Per abilitare fail2ban
come servizio, utilizziamo il comando systemctl
:
sudo systemctl abilita fail2ban
Lo utilizziamo anche per avviare il servizio:
sudo systemctl start fail2ban
Possiamo controllare lo stato del servizio anche usando systemctl
:
sudo systemctl status fail2ban.service
Tutto sembra a posto, abbiamo il via libera, quindi va tutto bene.
Vediamo se fail2ban
d'accordo:
stato sudo fail2ban-client
Questo riflette ciò che abbiamo impostato. Abbiamo abilitato una singola jail, denominata [sshd]. Se includiamo il nome della jail con il nostro comando precedente, possiamo dargli un'occhiata più approfondita:
sudo fail2ban-client status sshd
Questo elenca il numero di errori e gli indirizzi IP vietati. Naturalmente, tutte le statistiche sono zero al momento.
Testare la nostra prigione
Su un altro computer, faremo una richiesta di connessione SSH alla nostra macchina di prova e digiteremo erroneamente la password di proposito. Ottieni tre tentativi per ottenere la password corretta ad ogni tentativo di connessione.
Il valore maxretry
si attiverà dopo tre tentativi di connessione non riusciti, non tre tentativi di password non riusciti. Quindi, dobbiamo digitare una password errata tre volte per fallire il tentativo di connessione.
Faremo quindi un altro tentativo di connessione e digiteremo la password in modo errato altre tre volte. Il primo tentativo di password errata della terza richiesta di connessione dovrebbe attivare fail2ban.
Dopo la prima password errata alla terza richiesta di connessione, non riceviamo risposta dalla macchina remota. Non otteniamo alcuna spiegazione; abbiamo solo la spalla fredda.
È necessario premere Ctrl+C per tornare al prompt dei comandi. Se proviamo ancora una volta, otterremo una risposta diversa:
ssh [email protected]
In precedenza, il messaggio di errore era "Autorizzazione negata". Questa volta, la connessione viene rifiutata. Siamo persona non grata. Siamo stati bannati.
Diamo di nuovo un'occhiata ai dettagli della prigione [sshd]:
sudo fail2ban-client status sshd
Si sono verificati tre errori e un indirizzo IP (192.168.4.25) è stato bandito.
Come accennato in precedenza, fail2ban
applica i divieti aggiungendo regole al set di regole del firewall. Diamo un'altra occhiata al set di regole (era vuoto prima):
sudo iptables -L
È stata aggiunta una regola alla policy INPUT, che invia il traffico SSH alla catena f2b-sshd
. La regola nella catena f2b-sshd
rifiuta le connessioni SSH da 192.168.4.25. Non abbiamo modificato l'impostazione predefinita per bantime
, quindi, in 10 minuti, quell'indirizzo IP verrà sbloccato e potrà effettuare nuove richieste di connessione.
Se imposti una durata del divieto più lunga (come diverse ore), ma desideri consentire a un indirizzo IP di effettuare un'altra richiesta di connessione prima, puoi salvarlo in anticipo.
Digitiamo quanto segue per farlo:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Sul nostro computer remoto, se effettuiamo un'altra richiesta di connessione SSH e digitiamo la password corretta, ci sarà consentito connetterci:
ssh [email protected]
Semplice ed efficace
Di solito più semplice è meglio e fail2ban
è una soluzione elegante a un problema complicato. Richiede pochissima configurazione e non impone quasi nessun sovraccarico operativo, a te o al tuo computer.
Comandi Linux | ||
File | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · converti · rclone · shred · srm | |
Processi | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg | |
Rete | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
CORRELATI: I migliori laptop Linux per sviluppatori e appassionati