Cum să vă securizați serverul Linux cu fail2ban
Publicat: 2022-01-29 Cu fail2ban
, computerul dumneavoastră Linux blochează automat adresele IP care au prea multe erori de conectare. Este securitate autoreglată! Vă vom arăta cum să-l utilizați.
Securitate Securitate Securitate
Ducesa de Windsor, Wallis Simpson, a spus odată: „Nu poți fi niciodată prea bogat sau prea slab”. Am actualizat acest lucru pentru lumea noastră modernă, interconectată: nu poți fi niciodată prea atent sau prea sigur.
Dacă computerul acceptă solicitări de conectare primite, cum ar fi conexiunile Secure Shell (SSH) sau acționează ca un server web sau de e-mail, trebuie să îl protejați de atacurile de forță brută și de ghicitorii de parole.
Pentru a face acest lucru, va trebui să monitorizați solicitările de conectare care nu reușesc să intre într-un cont. Dacă nu se autentifică în mod repetat într-o perioadă scurtă, ar trebui să li se interzică să mai facă încercări suplimentare.
Singurul mod în care acest lucru poate fi realizat practic este automatizarea întregului proces. Cu puțină configurare simplă, fail2ban
va gestiona monitorizarea, interzicerea și dezbancarea pentru dvs.
fail2ban
se integrează cu firewall-ul Linux iptables
. Implementează interdicțiile asupra adreselor IP suspecte adăugând reguli la firewall. Pentru a menține această explicație neaglomerată, folosim iptables
cu un set de reguli gol.
Desigur, dacă sunteți îngrijorat de securitate, probabil că aveți un firewall configurat cu un set de reguli bine populat. fail2ban
doar adaugă și elimină propriile reguli — funcțiile tale obișnuite de firewall vor rămâne neatinse.
Putem vedea setul nostru de reguli gol folosind această comandă:
sudo iptables -L
LEGATE: Ghidul pentru începători pentru iptables, paravanul de protecție Linux
Se instalează fail2ban
Instalarea fail2ban
este simplă pe toate distribuțiile pe care le-am folosit pentru a cerceta acest articol. Pe Ubuntu 20.04, comanda este următoarea:
sudo apt-get install fail2ban
Pe Fedora 32, tastați:
sudo dnf install fail2ban
Pe Manjaro 20.0.1, am folosit pacman
:
sudo pacman -Sy fail2ban
Se configurează fail2ban
Instalarea fail2ban
conține un fișier de configurare implicit numit jail.conf. Acest fișier este suprascris când fail2ban
este actualizat, așa că ne vom pierde modificările dacă facem personalizări la acest fișier.
În schimb, vom copia fișierul jail.conf într-unul numit jail.local. Prin introducerea modificărilor noastre de configurare în jail.local, acestea vor persista în timpul actualizărilor. Ambele fișiere sunt citite automat de fail2ban
.
Iată cum se copiază fișierul:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Acum deschideți fișierul în editorul dvs. preferat. Vom folosi gedit
:
sudo gedit /etc/fail2ban/jail.local
Vom căuta două secțiuni în fișier: [DEFAULT] și [sshd]. Aveți grijă să găsiți secțiunile reale, totuși. Etichetele respective apar și în partea de sus într-o secțiune care le descrie, dar nu asta ne dorim.
Veți găsi secțiunea [DEFAULT] undeva în jurul liniei 40. Este o secțiune lungă, cu o mulțime de comentarii și explicații.
Derulați în jos până la rândul 90 și veți găsi următoarele patru setări despre care trebuie să știți:
- ignoreip: o listă albă de adrese IP care nu vor fi niciodată interzise. Ei au un card permanent Ieșiți din închisoare. Adresa IP localhost (
127.0.0.1
) se află în listă în mod implicit, împreună cu echivalentul său IPv6 (::1
). Dacă există alte adrese IP despre care știi că nu ar trebui să fie interzise niciodată, adaugă-le în această listă și lasă un spațiu între fiecare. - bantime: Durata pentru care o adresă IP este interzisă („m” reprezintă minute). Dacă introduceți o valoare fără „m” sau „h” (pentru ore), aceasta va fi tratată ca secunde. O valoare de -1 va interzice definitiv o adresă IP. Ai mare grijă să nu te blochezi definitiv.
- findtime: intervalul de timp în care prea multe încercări eșuate de conectare vor duce la interzicerea unei adrese IP.
- maxretry: valoarea pentru „prea multe încercări eșuate”.
Dacă o conexiune de la aceeași adresă IP face încercări eșuate de conectare maxretry
în perioada de findtime
, acestea sunt interzise pe durata bantime
. Singurele excepții sunt adresele IP din lista ignoreip
.
fail2ban
pune adresele IP în închisoare pentru o anumită perioadă de timp. fail2ban
acceptă multe închisori diferite și fiecare reprezintă deține setările care se aplică unui singur tip de conexiune. Acest lucru vă permite să aveți setări diferite pentru diferite tipuri de conexiune. Sau puteți avea fail2ban
să monitorizeze doar un set ales de tipuri de conexiune.
Poate l-ați ghicit din numele secțiunii [DEFAULT], dar setările pe care le-am analizat sunt implicite. Acum, să ne uităm la setările pentru închisoarea SSH.
LEGATE: Cum să editați fișierele text grafic pe Linux cu gedit
Configurarea unei închisori
Închisorile vă permit să mutați tipurile de conexiune în și în afara monitorizării fail2ban's
. Dacă setările implicite nu se potrivesc cu cele pe care doriți să le aplicați la închisoare, puteți seta anumite valori pentru bantime
, findtime
și maxretry
.
Derulați în jos până la linia 280 și veți vedea secțiunea [sshd].
Aici puteți seta valori pentru închisoarea conexiunii SSH. Pentru a include această închisoare în monitorizare și interdicție, trebuie să introducem următoarea linie:
activat = adevărat
Introducem și această linie:
maxretry = 3
Setarea implicită a fost cinci, dar vrem să fim mai precauți cu conexiunile SSH. L-am redus la trei, apoi am salvat și închis fișierul.
Am adăugat această închisoare la monitorizarea fail2ban's
și am înlocuit una dintre setările implicite. O închisoare poate folosi o combinație de setări implicite și specifice închisorii.
Se activează fail2ban
Până acum, am instalat fail2ban
și l-am configurat. Acum, trebuie să-l activăm să ruleze ca serviciu de pornire automată. Apoi, trebuie să-l testăm pentru a ne asigura că funcționează conform așteptărilor.
Pentru a activa fail2ban
ca serviciu, folosim comanda systemctl
:
sudo systemctl enable fail2ban
De asemenea, îl folosim pentru a porni serviciul:
sudo systemctl start fail2ban
Putem verifica și starea serviciului folosind systemctl
, de asemenea:
stare sudo systemctl fail2ban.service
Totul arată bine – avem undă verde, așa că totul este bine.
Să vedem dacă fail2ban
este de acord:
starea sudo fail2ban-client
Acest lucru reflectă ceea ce am stabilit. Am activat o singură închisoare, numită [sshd]. Dacă includem numele închisorii cu comanda anterioară, putem arunca o privire mai profundă asupra acesteia:
sudo fail2ban-client status sshd
Acesta listează numărul de erori și adrese IP interzise. Desigur, toate statisticile sunt zero în acest moment.
Ne testăm închisoarea
Pe alt computer, vom face o solicitare de conexiune SSH la mașina noastră de testare și vom introduce greșit parola. Primești trei încercări de a obține parola corect la fiecare încercare de conectare.
Valoarea maxretry
se va declanșa după trei încercări eșuate de conectare, nu trei încercări eșuate de parolă. Deci, trebuie să introducem o parolă incorectă de trei ori pentru a eșua o încercare de conectare.
Vom face apoi o altă încercare de conectare și vom introduce parola incorect încă de trei ori. Prima încercare de parolă incorectă a celei de-a treia solicitări de conectare ar trebui să declanșeze fail2ban.
După prima parolă incorectă la a treia cerere de conectare, nu primim un răspuns de la mașina de la distanță. Nu primim nicio explicație; primim doar umărul rece.
Trebuie să apăsați Ctrl+C pentru a reveni la promptul de comandă. Dacă mai încercăm o dată, vom primi un răspuns diferit:
ssh [email protected]
Anterior, mesajul de eroare era „Permisiune refuzată”. De data aceasta, conexiunea este refuzată definitiv. Suntem persona non grata. Am fost interziși.
Să ne uităm din nou la detaliile închisorii [sshd]:
sudo fail2ban-client status sshd
Au existat trei erori și o adresă IP (192.168.4.25) a fost interzisă.
După cum am menționat anterior, fail2ban
impune interdicții adăugând reguli la setul de reguli pentru firewall. Să aruncăm o altă privire asupra setului de reguli (era goală înainte):
sudo iptables -L
A fost adăugată o regulă la politica INPUT, care trimite trafic SSH către lanțul f2b-sshd
. Regula din lanțul f2b-sshd
respinge conexiunile SSH de la 192.168.4.25. Nu am modificat setarea implicită pentru bantime
, așa că, în 10 minute, acea adresă IP va fi nebannizată și poate face noi solicitări de conectare.
Dacă setați o durată de interdicție mai lungă (cum ar fi câteva ore), dar doriți să permiteți unei adrese IP să facă o altă solicitare de conectare mai devreme, o puteți elibera mai devreme.
Introducem următoarele pentru a face acest lucru:
sudo fail2ban-client set sshd unbanip 192.168.5.25
Pe computerul nostru la distanță, dacă facem o altă solicitare de conexiune SSH și introducem parola corectă, ni se va permite să ne conectăm:
ssh [email protected]
Simplu și Eficient
Mai simplu este de obicei mai bine, iar fail2ban
este o soluție elegantă la o problemă dificilă. Este nevoie de foarte puțină configurare și nu impune aproape deloc operaționalitate — pentru dvs. sau computer.
Comenzi Linux | ||
Fișiere | tar · pv · cat · tac · chmod · grep · diff · sed · ar · om · 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 · tip · redenumire · zip · dezarhivare · montare · demontare · instalare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
Procese | alias · ecran · sus · frumos · renice · progres · strace · systemd · tmux · chsh · istoric · la · lot · gratuit · care · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · da · kill · sleep · sudo · su · time · groupadd · usermod · grupuri · lshw · shutdown · repornire · stop · poweroff · passwd · lscpu · crontab · data · bg · fg | |
Rețele | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
LEGATE: Cele mai bune laptopuri Linux pentru dezvoltatori și entuziaști