Introducere
În timp ce la server prin SSH poate fi foarte sigură, serviciul SSH în sine trebuie să fie conectat la internet pentru a funcționa corespunzător. Acest lucru vine cu un anumit risc inerent care oferă un vector de atac pentru agresori.
Orice serviciu care este expus unei rețele este o potențială țintă în acest mod. Dacă acordați atenție jurnalelor acestor aplicații, veți vedea adesea încercări repetate de conectare care reprezintă atacuri brute-force atât din partea utilizatorilor, cât și a roboților.
Un serviciu numit Fail2ban poate mitiga această problemă prin crearea de reguli care modifică în mod automat configurarea firewall-ului iptable pentru un număr predefinit de conectări nereușite. Acesta va permite serverului să răspundă încercărilor nelegitime de acces fără a interveni dvs.
În acest ghid, vom vorbi despre cum să instalăm și să folosim Fail2ban pe un server CentOS 7.
Instalarea Fail2Ban pe CentOS 7
Fail2ban este disponibil, oficial, în arhiva de pachete CentOS, fiind cuprins în proiectul EPEL. EPEL – Extra Packages for Enterprise Linux, poate fi instalat cu un pachet disponibil pentru CentOS:
sudo yum install epel-release
Pentru a continua, tastați y și Enter:
yum prompt
Transaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
Acum vom putea instala pachetul fail2ban:
sudo yum install fail2ban
Tastați y și Enter când vi se va cere să continuați:
Odată ce instalarea s-a finalizat, folosiți systemctl pentru a activa serviciul fail2ban:
sudo systemctl enable fail2ban
Configurarea Setărilor Locale
Serviciul Fail2ban păstrează fișierele de configurare în directorul /etc/fail2ban. Acolo veți găsi un fișier cu valorile implicite numit jail.conf. Din moment ce acest fișier va fi rescris de actualizările pachetului, nu va fi nevoie să îl editați. În schimb, vom scrie un nou fișier numit jail.local. Orice valori definite în jail.local vor înlocui acelea din jail.conf.
Fișierul jail.conf conține o secțiune [DEFAULT], urmată de secțiuni pentru servicii individuale. jail.local poate înlocui oricare dintre aceste valori. În plus, fișierele /etc/fail2ban/jail.d/ pot fi folosite pentru a înlocui setări în ambele fișiere. Fișierele sunt aplicate în următoarea ordine:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
În ordine alfabetică
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
În ordine alfabetică
Orice fișier poate conține secțiunea [DEFAULT], executată prima, și mai poate conține secțiuni pentru spații (jails) individuale. Ultima valoare stabilită pentru un anumit parametru are prioritate.
Haideți să începem prin a scrie o simplă versiune a jail.local. Deschideți un nou fișier folosind nano (sau editorul dvs.):
sudo nano /etc/fail2ban/jail.local
Lipiți următoarele:
/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
Acesta înlocuiește trei setări: setează un nou bantime implicit pentru toate serviciile, se asigură că folosim iptables pentru configurarea firewall-ului și activează spațiul (jail) sshd.
Ieșiți și salvați noul fișier (în nano, tastați Ctrl-X pentru a ieși, y pentru a salva și Enter pentru a confirma numele fișierului). Acum putem reporni serviciul fail2ban folosind systemctl:
sudo systemctl restart fail2ban
Comanda systemctl trebuie să se termine fără niciun rezultat. Pentru a verifica dacă serviciul rulează, putem folosi fail2ban-client:
sudo fail2ban-client status
Output
Status
|- Number of jail: 1
`- Jail list: sshd
Puteți obține informații detaliate cu privire la un anumit spațiu (jail):
sudo fail2ban-client status sshd
Studierea Setărilor Disponibile
Versiunea jail.local pe care am definit-o mai sus este un bun început, dar poate veți dori să ajustați un număr oarecare de alte setări. Deschideți jail.conf și vom examina câteva setări implicite. Dacă decideți să schimbați oricare dintre aceste valori, nu uitați că acestea trebuie copiate într-o secțiune apropiată a jail.local și ajustate acolo, decât să fie modificate acolo unde sunt.
sudo nano /etc/fail2ban/jail.conf
Setările Implicite pentru Toate Spațiile (Jails)
Prima dată căutați secțiunea [DEFAULT].
ignoreip = 127.0.0.1/8
Puteți modifica sursa adreselor pe care Fail2ban le ignoră adăugând o valoare parametrului ignoreip. În mod normal, este configurat să nu interzică traficul primit de la mașina locală. Puteți include adrese suplimentare pentru a ignora, adăugându-le la sfârșitul parametrului, separate prin spațiu.
bantime = 600
Parametrul bantime setează durata de timp în care unui client nu i se va permite autentificarea din cauza unei autentificări eșuate. Este măsurată în secunde. Implicit, este setat la 600 de secunde sau 10 minute.
findtime = 600
maxretry = 3
Următorii doi parametri la care trebuie să fiți atenți sunt findtime și maxretry. Aceștia lucrează împreună pentru a stabili condițiile în care un client ar trebui să fie blocat.
Variabila maxretry setează numărul de încercări pe care un client le are la dispoziție pentru a se autentifica într-un anumit timp definit de findtime înainte de a fi blocat. Cu setările implicite, Fail2ban va bloca un client care nu reușește să se autentifice din 3 încercări într-o fereastră de 10 minute.
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
Dacă doriți să configurați alertele de email, veți fi nevoit să anulați setările destemail, sendername și mta. Parametrul destemail setează adresele de email care ar trebui să primească mesaje de blocare. Parametrul sendername setează valoarea din câmpul „From” email. Parametrul mta configurează ce serviciu de email va fi folosit pentru a trimite email.
action = $(action_)s
Acest parametru configurează acțiunea pe care Fail2ban o ia când dorește să instituie o interdicție. Valoarea action_ este definită în fișier la puțin timp înaintea acestui parametru. Acțiunea implicită este de a configura simplu firewall-ul pentru a respinge traficul supărător al host-ului până când trece blocarea.
Dacă doriți să configurați alertele de email, puteți trece valoarea action_ la action_mw. Dacă doriți ca email-ul să includă linii relevante de autentificare, puteți schimba în action_mwl. Va trebui să vă asigurați că aveți setările corespunzătoare de email configurate dacă alegeți să utilizați alerte e-mail.
Setări pentru Spații (Jail) Individuale
După [DEFAULT], vom întâlni secțiuni pentru configurarea spațiilor pentru diferite servicii. Acestea vor include, în mod obișnuit, un port pentru a fi blocat și un logpath pentru a monitoriza tentativele negative de acces. De exemplu, spațiul SSH pe care l-am activat deja în jail.local are următoarele setări:
/etc/fail2ban/jail.local
[sshd]
port = ssh
logpath = %(sshd_log)s
În acest caz, ssh este o variabilă predefinită pentru portul standard SSH și %(sshd_log)s utilizează o valoare definită în altă parte în configurația standard a Fail2ban (acesta ajută să țineți jail.conf portabil între diferite sisteme de operare).
O altă setare pe care o veți putea găsi este filter, care va fi folosită pentru a decide dacă o linie într-un jurnal indică o autentificare eșuată.
Valoarea filter este, practic, o referință a unui fișier localizat în directorul /etc/fail2ban/filter.d, cu extensia .conf înlăturată. Acest fișier conține expresii obișnuite care determină dacă o linie din jurnal este nepotrivită.
În acest ghid nu ne vom ocupa de acest fișier în profunzime, pentru că este destul de complex, iar setările predefinite se potrivesc liniilor bine.
Oricum, puteți vedea ce filtre sunt disponibile căutând în interiorul directorului:
ls /etc/fail2ban/filter.d
Dacă vedeți un fișier care este în legătură cu un serviciu pe care îl folosiți, ar trebui să îl deschideți cu un editor de text. Majoritatea fișierelor sunt destul de bine descrise și ar trebui să puteți spune pentru ce tip de condiție a fost scriptul conceput să se protejeze. Majoritatea acestor fișiere au secțiuni apropiate (dezactivate) în jail.conf pe care le putem activa în jail.local dacă dorim.
De exemplu, presupunând că deservim un website folosind Nginx și realizăm că o porțiune protejată a site-ului nostru este forțată cu tentative de conectare. Putem cere Fail2ban să folosească fișierul nginx-http-auth.conf pentru a verifica această condiție în interiorul fișierului //var/log/nginx/error.log.
Acesta este deja setat în secțiunea numită [nginx-http-auth] din fișierul /etc/fail2ban/jail.conf. Va mai fi nevoie să adăugăm parametrul enabled pentru spațiul (jail) nginx-http-auth în jail.local:
/etc/fail2ban/jail.local
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
Reporniți serviciul fail2ban:
sudo systemctl restart fail2ban
Monitorizarea Jurnalelor Fail2Ban și a Configurării Firewall
Este bine de știut că un serviciu ca File2ban funcționează cum a fost setat. Începeți prin a folosi systemctl pentru a verifica statusul serviciului:
sudo systemctl status fail2ban
Dacă ceva pare greșit aici, puteți remedia problemele prin verificarea jurnalelor fail2ban de la ultimul boot:
sudo journalctl -b -u fail2ban
În continuare, folosiți fail2ban-client pentru a interoga întregul status al fail2ban-server, sau orice spațiu individual:
sudo fail2ban-client status
sudo fail2ban-client status jail_name
Urmăriți jurnalul fail2ban pentru înregistrarea acțiunilor recente (tastați Ctrl+C pentru a ieși):
sudo tail -F /var/log/fail2ban.log
Listați regulile curente configurate pentru iptables:
sudo iptables -L
Afișați regulile iptables într-un format care să reflecte comenzile necesare pentru a activa fiecare regulă:
sudo iptables -S
Concluzii
Acum veți putea fi capabili să configurați unele politici de bază privind interzicerea pentru serviciile dvs. Fail2ban este foarte ușor de configurat și este o bună modalitate pentru a proteja orice tip de serviciu care folosește autentificarea.