Protejare SSH cu FAIL2BAN (CentOS / Debian / Ubuntu)

Tutoriale Linux
Post Reply
User avatar
CryWolf
Sys Admin
Sys Admin
Posts: 448
Joined: Tue Dec 15, 2009 11:32 am
Detinator Steam: Da
Cunostinte CS: Excelente
Reputatie: Detinator
Webmaster
Scripter
Trance Fan
Location: Botosani
Contact:

Protejare SSH cu FAIL2BAN (CentOS / Debian / Ubuntu)

Post by CryWolf »

Image
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:

Code: Select all

sudo yum install epel-release
Pentru a continua tastati y si Enter:

Code: Select all

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:

Code: Select all

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:

Code: Select all

sudo systemctl enable fail2ban
INFO: Aceiasi pasi de instalare se aplica si la Debian/Ubuntu doar ca mai simpli

Code: Select all

sudo apt update
sudo apt install fail2ban -y
* In rest comenzile si restul sun la fel.

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:

Code: Select all

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
In ordine alfabetica

Code: Select all

/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

Code: Select all

[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:

Code: Select all

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

Code: Select all

Output
Status
|- Number of jail:      1
`- Jail list:   sshd
Puteti obtine informatii detaliate cu privire la un anumit spatiu (jail):

Code: Select all

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.

Code: Select all

sudo nano /etc/fail2ban/jail.conf
Setarile Implicite pentru Toate Spatiile (Jails)

Prima data cautati sectiunea[DEFAULT].

Code: Select all

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.

Code: Select all

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.

Code: Select all

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.

Code: Select all

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.

Code: Select all

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:

Code: Select all

/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:

Code: Select all

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

Code: Select all

[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:

Code: Select all

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
Daca ceva pare gresit aici, puteti remedia problemele prin verificarea jurnalelor fail2ban de la ultimul boot:

Code: Select all

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

Code: Select all

sudo fail2ban-client status
sudo fail2ban-client status jail_name
Urmariti jurnalul fail2ban pentru inregistrarea actiunilor recente (tastati Ctrl+C pentru a iesi)

Code: Select all

sudo tail -F /var/log/fail2ban.log
Listati regulile curente configurate pentru iptables:

Code: Select all

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

Code: Select all

sudo iptables -S
Concluzie
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.
Info: NU IMI DATI PM PENTRU CERERI AJUTOR ETC (NU RASPUND) FOLOSITI FORUMUL.
Image

Image
CUM SA NU LUPTI PENTRU IUBIRE ????
Daca lupti,inseamna ca vrei sa castigi ceva.Iubirea nu-i o miza.
Post Reply