Cum sa protejam SSH cu Fail2Ban pe CentOS 7

Blog: OS
In timp ce la server prin SSH poate fi foarte sigura, serviciul SSH in sine trebuie sa fie conectat la internet pentru a functiona corespunzator.

Introducere

In timp ce la server prin SSH poate fi foarte sigura, serviciul SSH in sine trebuie sa fie conectat la internet pentru a functiona corespunzator. Acest lucru vine cu un anumit risc inerent care ofera un vector de atac pentru agresori.

Orice serviciu care este expus unei retele este o potentiala tinta in acest mod. Daca acordati atentie jurnalelor acestor aplicatii, veti vedea adesea repetate incercari de conectare care reprezinta atacuri brute-force atat din partea utilizatorilor cat si a robotilor.

Un serviciu numit Fail2ban poate mitiga acesta problema prin crearea de reguli care modifica in mod  automat configurarea firewall iptable pentru un numar predefinit de conectari nereusite. Acesta va permite server-ului sa raspunda incercarilor nelegitime de acces fara a interveni dvs.

In acest ghid, vom vorbi despre cum sa instalam si sa folosim Fail2ban pe un server CentOS 7.

Instalarea Fail2Ban pe CentOS 7

Fail2ban este disponibil, oficial in arhiva de pachete CentOS, fiind cuprins in 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 tastati y si 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

Tastati y si Enter cand vi se va cere sa continuati:

Odata ce instalarea s-a finalizat folositi systemctl pentru a activa serviciul fail2ban:

sudo systemctl enable fail2ban

Configurarea Setarilor Locale

Serviciul Fail2ban pastreaza fisierele de configurare in directorul /etc/fail2ban. Acolo veti gasi un fisier cu valorile implicite numit jail.conf. Din moment ce acest fisier va fi rescris de actualizarile pachetului, nu va fi nevoie sa il editati. In schimb vom scrie un nou fisier numit jail.local. Orice valori definite in jail.local vor fi inlocuite cu acelea din jail.conf.

Fisierul  jail.conf contine o sectiune[DEFAULT], urmata de sectiuni pentru servicii individuale.  jail.local poate inlocui oricare dintre aceste valori. in plus, fisierele /etc/fail2ban/jail.d/ pot fi folosite pentru a inlocui setari in ambele fisiere. Fisierele sunt aplicate in urmatoarea ordine:

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf

In ordine alfabetica

/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local

In ordine alfabetica

Orice fisier poate contine sectiunea [DEFAULT], executa prima si mai poate contine sectiuni pentru spatii (jails) individuale. Ultima valoare stabilita pentru un anumit parametru are prioritate.

Haideti sa incepem prin a scrie o simpla versiune a jail.local. Deschideti un nou fisier folosind nano (sau editorul dvs.):

sudo nano /etc/fail2ban/jail.local

Lipiti urmatoarele:

/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 inlocuieste trei setari: Seteaza un nou bantime implicit pentru toate serviciile, se asigura ca folosim iptables pentru configurarea firewall si activeaza spatiul (jail) sshd.

Iesiti si salvati noul fisier (in nano, tastati Ctrl-X pentru a iesi, y pentru a salva si Enter pentru a confirma numele fisierului). Acum putem reporni serviciul fail2ban folosind systemctl:

sudo systemctl restart fail2ban

Comanda systemctl trebuie sa se termine fara nici un rezultat. Pentu a verifica dacaserviciul ruleaza, putem folosi fail2ban-client:

sudo fail2ban-client status

Output
Status
|- Number of jail:      1
`- Jail list:   sshd

Puteti obtine informatii detaliate cu privire la un anumit spatiu (jail):

sudo fail2ban-client status sshd

Studierea Setarilor Disponibile

Versiunea jail.local pe care am definit-o mai sus este un bun inceput, dar poate veti dori sa ajustati un numar oarecare de alte setari. Deschideti jail.conf si vom examina cateva setari implicite. Daca decideti sa schimbati oricare dintre aceste valori, nu uitati ca acestea trebuie copiate intr-o sectiune apropiata a jail.local si ajutate acolo, decat sa fie modificate acolo unde sunt.

sudo nano /etc/fail2ban/jail.conf

Setarile Implicite pentru Toate Spatiile (Jails)

Prima data cautati sectiunea[DEFAULT].

ignoreip = 127.0.0.1/8

Puteti modifica sursa adreselor pe care Fail2ban le ignora adaugand o valoare parametrului  ignoreip. in mod normal este configurat sa nu interzica traficul primit de la masina locala. Puteti include adrese suplimentare pentru a ignora adaugandu-le la sfarsitul parametrului, separate prin spatiu.

bantime = 600

Parametrul bantime seteaza durata de timp in care unui client nu i se va permite autentificarea din cauza unei autentificari esuate. Este masurata in secunde. Implicit, este setat la 600 de secunde sau 10 minute.

findtime = 600
maxretry = 3

Urmatorii doi parametrii la care trebuie sa fiti atenti sunt findtime si maxretry. Acestia lucreaza impreuna pentru a stabili conditiile in care un client ar trebui sa fie blocat.

Variabila maxretry seteaza numarul de incercari pe care un client le are la dispozitie pentru a se autentifica intr-un anume timp definit de findtime inainte de a fi blocat. Cu setarile implicite, Fail2ban va bloca un client care nu reuseste sa se autentifice din 3 incercari intr-o fereastra de 10 minute.

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

Daca doriti sa configurati alertele de email, veti fi nevoit sa anulati setarile destemail, sendername si mta. Parametrul destemail seteaza adresele de email care ar trebui sa primeasca mesaje de blocare. Parametrul sendername seteaza valoare din campul in "From" email. Parametrul mta configureaza ce serviciu de email va fi folosit pentru a trimite email.

action = $(action_)s

Acest parametru configureaza actiunea pe care Fail2ban o ia cand doreste sa instituie o interdictie. Valoarea action_ este definita in fisier la putin timp inaintea acestui parametru. Actiunea implicita este de a configura simplu firewall-ul pentru a respinge traficul suparator al host-ului pana cand trece blocarea.

Daca doriti sa configurati alertele de email, puteti trece valoarea action_ la action_mw. Daca doriti ca email-ul sa includa linii relevante de autentificare, puteti schimba in action_mwl. Va trebui sa va asigurati ca aveti setarile corespunzatoare de email configurate daca alegeti sa utilizati alerte e-mail.

Setari pentru Spatii (Jail) Individuale

Dupa [DEFAULT], vom intalni sectiuni pentru configurarea spatiilor pentru diferite servicii. Acestea vor include in mod obisnuit un port pentru a fi blocat si un logpath pentru a monitoriza tentativele negative de acces. De exemplu, spatiul SSH pe care l-am activat deja in jail.local are urmatoarele setari:

/etc/fail2ban/jail.local
[sshd]

port    = ssh
logpath = %(sshd_log)s

In acest caz, ssh este o variabila pre-definita pentru portul standard SSH si %(sshd_log)s utilizeaza o valoare definita in alta parte in configuratia standard a Fail2ban (acesta ajuta sa tineti jail.conf portabil intre diferite sisteme de operare).

O alta setare pe care o veti putea gasi in filter care va fi folosita pentru a decide daca o linie intr-un jurnal indica o autentificare esuata.

Valoare filter este practic o referinta a unui fisier localizat in directorul /etc/fail2ban/filter.d, cu extensia .conf inlaturata. Acest fisier contine expresii obisnuite care determina daca o linie din jurnal este nepotrivita.

In acest ghid nu ne vom ocupa de acest fisier in profunzime, pentru ca este destul de complex si setarile pre-definite se potrivesc liniilor bine.

Oricum, puteti vedea ce filtre sunt disponibile cautand in interiorul directorului:

ls /etc/fail2ban/filter.d

Daca vedeti un fisier care este in legatura cu un serviciu pe care il folositi, ar trebui sa il deschideti cu un editor de text. Majoritatea fisierelor sunt destul de bine descrise si ar trebui sa puteti spune pentru ce tip de conditie a fost script-ul conceput sa se protejeze. Majoritatea acestor fisiere au sectiuni apropiate (dezactivate) in jail.conf pe care le putem activa in jail.local daca dorim.

De exemplu, presupunand ca deservim un website folosind Nginx si realizam ca o portiune protejata a site-ului nostru este fortat cu tentative de conectare. Putem cere Fail2ban sa foloseasca fisierul nginx-http-auth.conf pentru a verifica acesta conditie in interiorul fisierului //var/log/nginx/error.log.

Acesta este deja setat in sectiunea numita [nginx-http-auth] din fisierul /etc/fail2ban/jail.conf. Va mai fi nevoie sa adaugam parametrul enabled pentru spatiul (jail) nnginx-http-auth in 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

Reporniti serviciul fail2ban:

sudo systemctl restart fail2ban

Monitorizarea Jurnalelor Fail2Ban si a Configurarii Firewall

Este bine de stiut ca un serviciu ca File2ban functioneaza cum a fost setat. incepeti prin a folosi systemctl pentru a verifica statusul serviciului:

sudo systemctl status fail2ban

Daca ceva pare gresit aici, puteti remedia problemele prin verificarea jurnalelor fail2ban de la ultimul boot:

sudo journalctl -b -u fail2ban

In continuare, folositi fail2ban-client pentru a interoga intregul status al fail2ban-server, sau orice spatiu individual:

sudo fail2ban-client status
sudo fail2ban-client status jail_name

Urmariti jurnalul fail2ban pentru inregistrarea actiunilor recente (tastati Ctrl+C pentru a iesi)

sudo tail -F /var/log/fail2ban.log

Listati regulile curente configurate pentru iptables:

sudo iptables -L

Afisati regulile iptables intr-un format care sa reflecte comenzile necesare pentru a activa fiecare regula:

sudo iptables -S

Concluzii

Acum veti putea fi capabili sa configurati unele politici de baza privind interzicerea pentru serviciile dvs. Fail2ban este foarte usor de configurat si este o buna modalitate pentru a proteja orice tip de serviciu care foloseste autentificarea.

Din aceeasi categorie

Te muti la noi?

Ai gratuit transfer fisiere, import baze de date, transfer adrese de email si configurarea acestora !