Cum să vă securizați serverul Linux cu fail2ban

Cu fail2ban, computerul dumneavoastră Linux blochează automat adresele IP care au prea multe erori de conexiune. Este securitate autoreglată! Vă vom arăta cum să-l utilizați.

Securitate Securitate Securitate

Ducesa de Windsor, Wallis Simpson, a spus odată celebrul: „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 Shell Securizat (SSH) sau acționează ca un server web sau de e-mail, trebuie să îl protejați de atacurile cu 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 un pic de configurare simplă, fail2ban va gestiona monitorizarea, interzicerea și anularea interdicției Pentru dumneavoastră.

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. doar fail2ban adaugă și elimină propriile reguli—funcțiile dumneavoastră obișnuite de firewall vor rămâne neatinse.

Putem vedea setul nostru de reguli gol folosind această comandă:

sudo iptables -L

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.

  Cum se configurează un editor hexadecimal pe Kali Linux

Î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 [DEFAULT] secțiune undeva în jurul rândului 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. Au un card permanent Ieșiți din închisoare. The 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 căutare, 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.

  Cum să utilizați comanda Linux lsof

Poate ai ghicit din [DEFAULT] numele secțiunii, dar setările pe care le-am analizat sunt cele implicite. Acum, să ne uităm la setările pentru închisoarea SSH.

Configurarea unei închisori

Închisorile vă permit să mutați tipurile de conexiune în și în afara monitorizării fail2ban. 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 aproximativ linia 280 și veți vedea [sshd] secțiune.

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:

enabled = true

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 lui fail2ban ș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:

sudo systemctl status fail2ban.service

Totul arată bine – avem undă verde, așa că totul este bine.

Să vedem dacă fail2ban este de acord:

sudo fail2ban-client status

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.

  Cum se instalează Cisco Packet Tracer pe Linux

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 la detaliile [sshd] iar inchisoare:

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 dezactivată ș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.