
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:
Cod: Selectaţi tot
sudo yum install epel-release
Cod: Selectaţi tot
yum prompt
Transaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
Cod: Selectaţi tot
sudo yum install fail2ban
Odata ce instalarea s-a finalizat folositi systemctl pentru a activa serviciul fail2ban:
Cod: Selectaţi tot
sudo systemctl enable fail2ban
Cod: Selectaţi tot
sudo apt update
sudo apt install fail2ban -y
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:
Cod: Selectaţi tot
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
Cod: Selectaţi tot
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
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
Cod: Selectaţi tot
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
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:
Cod: Selectaţi tot
sudo systemctl restart fail2ban
sudo fail2ban-client status
Cod: Selectaţi tot
Output
Status
|- Number of jail: 1
`- Jail list: sshd
Cod: Selectaţi tot
sudo fail2ban-client status sshd
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.
Cod: Selectaţi tot
sudo nano /etc/fail2ban/jail.conf
Prima data cautati sectiunea[DEFAULT].
Cod: Selectaţi tot
ignoreip = 127.0.0.1/8
Cod: Selectaţi tot
bantime = 600
Cod: Selectaţi tot
findtime = 600
maxretry = 3
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.
Cod: Selectaţi tot
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
Cod: Selectaţi tot
action = $(action_)s
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:
Cod: Selectaţi tot
/etc/fail2ban/jail.local
[sshd]
port = ssh
logpath = %(sshd_log)s
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:
Cod: Selectaţi tot
ls /etc/fail2ban/filter.d
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
Cod: Selectaţi tot
[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
Cod: Selectaţi tot
sudo systemctl restart fail2ban
[c/ode]
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:
[code]
sudo systemctl status fail2ban
Cod: Selectaţi tot
sudo journalctl -b -u fail2ban
Cod: Selectaţi tot
sudo fail2ban-client status
sudo fail2ban-client status jail_name
Cod: Selectaţi tot
sudo tail -F /var/log/fail2ban.log
Cod: Selectaţi tot
sudo iptables -L
Cod: Selectaţi tot
sudo iptables -S
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.