Cu fail2ban, sistemul tău Linux își protejează automat împotriva adreselor IP care prezintă un număr excesiv de tentative de conectare eșuate. Este o modalitate eficientă de a securiza sistemul, adaptându-se singură! În cele ce urmează, vom explora cum poți utiliza această unealtă.
Siguranță, Siguranță, Siguranță
Așa cum spunea celebra Ducesă de Windsor, Wallis Simpson, „Nu poți fi niciodată prea bogat sau prea slab.” Adaptând acest principiu la era digitală, putem afirma: nu poți fi niciodată prea precaut sau prea securizat.
Dacă sistemul tău acceptă conexiuni, cum ar fi Secure Shell (SSH), sau funcționează ca server web sau de e-mail, devine crucial să te protejezi împotriva atacurilor brute și a încercărilor de ghicire a parolelor.
Un pas important este monitorizarea încercărilor de autentificare nereușite. Dacă un utilizator încearcă repetat să se conecteze fără succes într-un interval scurt, ar trebui să fie blocat pentru a preveni atacurile.
Cel mai practic mod de a realiza acest lucru este prin automatizare. Cu o configurare minimă, fail2ban se ocupă de monitorizare, blocare și deblocare, scutindu-te de efortul manual.
fail2ban colaborează cu firewall-ul Linux iptables, implementând blocări pentru adresele IP suspecte prin adăugarea regulilor necesare. Pentru simplitatea exemplului, vom folosi iptables cu un set de reguli gol.
Desigur, dacă îți pasă de securitate, este posibil să ai deja un firewall configurat cu un set de reguli complex. fail2ban doar completează aceste reguli, adăugând sau eliminând propriile sale directive, fără a afecta funcțiile de bază ale firewall-ului tău.
Putem verifica setul nostru de reguli gol, folosind următoarea comandă:
sudo iptables -L
Instalarea fail2ban
Instalarea fail2ban este simplă pe majoritatea distribuțiilor Linux. Pe Ubuntu 20.04, folosește această comandă:
sudo apt-get install fail2ban
Pe Fedora 32, tastează:
sudo dnf install fail2ban
Pe Manjaro 20.0.1, folosește pacman:
sudo pacman -Sy fail2ban
Configurarea fail2ban
Instalarea fail2ban include un fișier de configurare implicit, numit `jail.conf`. Însă acest fișier este suprascris la actualizarea fail2ban, deci vom crea un alt fișier numit `jail.local`, în care vom adăuga personalizările noastre. Astfel, modificările vor persista la actualizări. Fail2ban citește automat ambele fișiere.
Iată cum copiem fișierul:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Acum, deschide fișierul cu editorul preferat. Vom folosi gedit:
sudo gedit /etc/fail2ban/jail.local
În fișier, căutăm secțiunile `[DEFAULT]` și `[sshd]`. Asigură-te că găsești secțiunile reale, nu doar mențiunile acestora.
Secțiunea `[DEFAULT]` se află în jurul liniei 40. Este o secțiune lungă, cu multe comentarii și explicații.
Coboară la linia 90, unde vei găsi următoarele setări importante:
`ignoreip`: o listă de adrese IP care nu vor fi niciodată blocate. Aceste adrese au „permis permanent” de a nu fi blocate. Adresa IP locală (127.0.0.1), împreună cu echivalentul IPv6 (::1) sunt incluse implicit. Dacă există alte adrese IP care nu ar trebui blocate, adaugă-le aici, separate prin spațiu.
`bantime`: durata în care o adresă IP este blocată. Valoarea este în minute dacă folosești `m`. Dacă nu folosești `m` sau `h` (ore), se va considera valoarea în secunde. Valoarea -1 blochează o adresă IP definitiv. Fii atent să nu te blochezi pe tine definitiv!
`findtime`: intervalul de timp în care prea multe tentative eșuate de conectare duc la blocarea unei adrese IP.
`maxretry`: numărul maxim de tentative nereușite înainte de blocare.
Dacă o adresă IP depășește valoarea `maxretry` de încercări eșuate în intervalul de timp `findtime`, aceasta este blocată pentru perioada `bantime`. Excepție fac adresele IP din lista `ignoreip`.
fail2ban blochează adresele IP pe o anumită perioadă, utilizând diferite setări pentru tipuri diferite de conexiuni. Acest lucru permite configurarea specifică pentru diversele tipuri de conexiuni sau posibilitatea de a monitoriza doar anumite tipuri.
Așa cum sugerează și numele, setările din secțiunea `[DEFAULT]` sunt cele implicite. Să analizăm setările pentru blocarea conexiunilor SSH.
Configurarea unei închisori
„Închisorile” permit includerea sau excluderea anumitor tipuri de conexiuni de la monitorizarea fail2ban. Dacă setările implicite nu corespund cerințelor tale, poți defini valori specifice pentru `bantime`, `findtime` și `maxretry` pentru fiecare tip de conexiune.
Mergi la linia 280, unde vei găsi secțiunea `[sshd]`.
Aici, poți seta valori pentru conexiunile SSH. Pentru a include această „închisoare” în monitorizare și blocare, adaugă următoarea linie:
enabled = true
Adaugă și această linie:
maxretry = 3
Valoarea implicită era cinci, dar vrem să fim mai precauți cu conexiunile SSH. Am redus-o la trei, apoi am salvat și închis fișierul.
Am adăugat această închisoare la monitorizarea fail2ban și am modificat una dintre setările implicite. O închisoare poate folosi o combinație de setări implicite și specifice închisorii.
Activarea fail2ban
Până acum, am instalat și configurat fail2ban. Acum, trebuie să-l activăm ca serviciu care pornește automat și să-l testăm pentru a ne asigura că funcționează corect.
Pentru a activa fail2ban ca serviciu, folosește comanda `systemctl`:
sudo systemctl enable fail2ban
Apoi, pornește serviciul:
sudo systemctl start fail2ban
Verificăm statusul serviciului tot cu `systemctl`:
sudo systemctl status fail2ban.service
Totul arată bine – avem undă verde. Să vedem dacă fail2ban este de acord:
sudo fail2ban-client status
Acest lucru reflectă configurarea noastră. Am activat o singură închisoare, `[sshd]`. Dacă includem numele închisorii în comandă, putem obține mai multe detalii:
sudo fail2ban-client status sshd
Aici sunt listate erorile și adresele IP blocate. Momentan, toate statisticile sunt zero.
Testarea închisorii
De pe un alt calculator, vom face o cerere de conectare SSH la mașina noastră de testare și vom introduce o parolă greșită. Ai trei încercări de a introduce corect parola la fiecare încercare de conectare.
Valoarea `maxretry` se activează după trei tentative eșuate de conectare, nu trei parole greșite. 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 de încă trei ori. Prima parolă incorectă a celei de-a treia solicitări de conectare ar trebui să declanșeze fail2ban.
După prima parolă greșită la a treia cerere de conectare, nu mai primim niciun răspuns de la mașina de la distanță. Nu primim nicio explicație, ci suntem pur și simplu ignorați.
Trebuie să apăsăm Ctrl+C pentru a reveni la linia de comandă. Dacă mai încercăm o dată, vom primi un răspuns diferit:
ssh [email protected]
Anterior, mesajul de eroare era „Permisiune refuzată”. Acum, conexiunea este respinsă definitiv. Suntem persona non grata. Am fost blocați.
Să vedem detaliile „închisorii” `[sshd] `:
sudo fail2ban-client status sshd
Au existat trei erori și o adresă IP (192.168.4.25) a fost blocată.
Așa cum am menționat, fail2ban implementează blocările prin adăugarea regulilor la firewall. Să verificăm din nou setul de reguli (care era gol la început):
sudo iptables -L
S-a adăugat o regulă la politica INPUT, care trimite traficul 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 valoarea implicită pentru `bantime`, deci în 10 minute, acea adresă IP va fi deblocată și va putea trimite din nou solicitări de conectare.
Dacă ai setat o durată de blocare mai mare (câteva ore), dar vrei să permiți unei adrese IP să se conecteze mai devreme, o poți debloca anticipat.
Pentru a face acest lucru, folosește următoarea comandă:
sudo fail2ban-client set sshd unbanip 192.168.5.25
De pe calculatorul la distanță, dacă mai facem o solicitare de conectare SSH și introducem parola corectă, vom reuși să ne conectăm:
ssh [email protected]
Simplu și Eficient
De obicei, simplitatea este cheia, iar fail2ban este o soluție elegantă pentru o problemă complexă. Necesită o configurare minimă și nu necesită eforturi suplimentare – nici pentru tine, nici pentru computer.