Instalați Fail2ban și asociați-l cu SSH și Nginx

Când am montat un server cu Linux și dorim să îl gestionăm de pe internet prin telecomandă SSH, se poate întâmpla să începem să primim atacuri cu scopul de a intra în sistem și de a-l putea controla în scopurile sale. Aceste atacuri sunt de obicei efectuate de programe de calculator (roboți) care încearcă mult timp să acceseze sistemul folosind forța brută.

În postările anterioare am vorbit despre cum să configurați serviciul SSH, dar unii roboți avansați nu intră în serviciu, dar pot ucide serviciul SSH de pe server dezactivând accesul la distanță.

Manual complet al SSH (Secure Shell)

O putem evita folosind instrumentul fail2ban, este foarte practic și oferă o mare marjă de siguranță. Pentru a explica puțin cum funcționează. Este capabil să creeze iptables înainte de orice încercare eșuată de conectare de mai mult de 5 ori la rând, respingând orice tip de conexiune odată ce este interzisă.

Instalați Fail2ban


Instalarea se poate face direct din apt. Mai întâi actualizăm sistemul și apoi instalăm Fail2ban.
 apt-get update && apt-get -y upgrade
 apt-get install fail2ban
Aceasta nu numai că instalează programul, dar îl lasă și să ruleze și să înceapă cu sistemul.

Configurarea Fail2ban


Serviciul Fail2ban are setările sale în director / etc / fail2ban. Aveți câteva opțiuni preconfigurate în jail.conf, cel mai bun lucru în acest caz este să copiați fișierul și să nu faceți modificările direct în acesta, când actualizați fail2ban aceste fișiere sunt suprascrise și puteți pierde toate modificările făcute anterior.

În acest caz, copiem fișierul și îl denumim jail.local, astfel încât să îl poată găsi.

 sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
După copiere, îl putem deschide și vedea cum funcționează.
 vim /etc/fail2ban/jail.local
În interiorul fișierului, avem mai mulți parametri pe care îi putem regla. Orice parametru care se află sub eticheta [DEFAULT] va fi aplicat tuturor serviciilor activate de Fail2ban, cum ar fi SSH, NGINX, APACHE, îl vom numi global, apoi vom avea secțiuni specifice pentru fiecare serviciu.

Vom începe prin adăugarea de parametri la secțiunea globală.

 ignoreip = 127.0.0.1
Adăugăm localhost-ul nostru în acest fel, va ignora tot traficul local, putem adăuga adrese suplimentare separându-le printr-un spațiu.
 bantime = 600
Timpul bantime este perioada de timp în care clientul va fi interzis după blocare. Unitatea este în secunde 600 de secunde ar fi 10 minute este valoarea implicită.
 timp de căutare = 600 maxretry = 3
Apoi avem timp de căutare și maxretry. Aceștia sunt responsabili pentru stabilirea condițiilor pentru ca un client să fie interzis în mod implicit, se poate citi că orice utilizator cu mai mult de 3 încercări eșuate în mai puțin de 10 minute va fi interzis.
 destemail = root @ localhost sendername = Fail2Ban mta = sendmail
Dacă dorim să creăm alerte pentru utilizatorii interzise, ​​acești 3 parametri sunt necesari, vom defini destinația către care să trimitem e-mailul de alertă, cine va fi responsabil de trimiterea acestuia și, în cele din urmă, mta pentru a defini ce serviciu de e-mail vom folosi .
 action = $ (action_) s
Aici vom defini ce acțiune trebuie luată atunci când este necesară o interdicție. Valoarea action_ este acțiunea implicită care se bazează pe respingerea oricărui trafic client până la expirarea timpului de interzicere.

Dacă dorim să trimitem o alertă prin poștă, trebuie să schimbăm valoarea în action_mw, dar dacă dorim să atașeze și liniile jurnalului în corpul e-mailului, vom folosi action_mwl. Trebuie să fim siguri că setările de e-mail sunt corecte înainte de a modifica această valoare.

Setări după serviciu


Odată ce configurațiile globale au fost finalizate, vom adăuga parametrii care vor fi aplicați exclusiv pentru

Serviciul SSH, ne asigurăm că adăugăm opțiunile sub eticheta [SSH].

 enabled = adevărat
În mod implicit, serviciul SSH este activat, dar îl putem modifica, dacă este necesar, în această opțiune.

Toată această secțiune ar putea funcționa cu valorile pe care le voi detalia mai târziu, dar le puteți modifica pentru a le adapta nevoilor dvs. sau le puteți lăsa pe toate în mod implicit.

O altă configurație este filtrele care indică dacă datele de conectare au fost corecte sau nu și pot fi adăugate pentru alte servicii, de exemplu avem un server cu nginx și o porțiune a paginii este protejată prin parolă, dar un client atacă cu forță brută , putem opri acest lucru adăugând următoarele sub eticheta [nginx-http-auth].

 [nginx-http-auth] activat = true filter = nginx-http-auth port = http, https logpath = /var/log/nginx/error.log
Acum, dacă un utilizator are mai mult de 3 încercări de conectare eșuate, acesta se reflectă în jurnale și fail2ban va acționa și va bloca tot traficul utilizatorului.

Mediu de testare


După ce am înțeles elementele de bază, vom face un mediu de testare mic în care vom proteja SSH și Nginx prin Fail2ban prin crearea unei politici de interzicere care ne va notifica IP-ul care a fost interzis.

Vom instala mai întâi Nginx dacă nu este instalat

 apt-get install nginx
vom instala un serviciu de e-mail pentru notificări, acesta poate fi sendmail
 apt-get install sendmail
în cele din urmă, dorim ca iptables-urile noastre să fie persistente după pornire, fie putem crea un script rc.0, fie instala pachetul iptables-persistent.
 apt-get install iptables-persistent
Acesta va fi instalat.

Stabilirea firewall-ului nostru


După instalarea celor de mai sus, trebuie să implementăm un firewall, astfel încât să poată bloca traficul. Voi crea un firewall de bază în postările ulterioare Voi vorbi mai multe despre iptables.

Vom permite conexiunile stabilite, traficul serverului, cum ar fi actualizările, și traficul destinat porturilor SSH și Nginx. Tot traficul rămas va fi refuzat.

 sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -m conntrack --ctstate STABILIT, RELATAT -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPTĂ sudo iptables -A INPUT -j DROP
Putem vedea modificările cu:
 iptables -S
Ar trebui să dea un rezultat similar.
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, STABILIT -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban -ssh -j RETURN

Reglarea setărilor Fail2ban


Acum trebuie să configurăm fișierul jail.local după bunul nostru plac.
 vi /etc/fail2ban/jail.local
Putem prelungi timpul pentru care un utilizator este interzis pentru cel puțin 30 de minute, nu uitați să setați valoarea în câteva secunde.
 bantime = 1800
Trebuie să configurăm un e-mail care primește toate alertele de interzicere fail2ban, să căutăm valoarea e-mailului în fișier și să punem e-mailul.
 destemail = [email protected]
Putem schimba expeditorul care va trimite alerta pe care o plasez de obicei cu numele fail2ban, astfel încât să putem filtra mai bine între toate jurnalele.

După ce trebuie să schimbăm valoarea acțiunii, avem 2 opțiuni:

  • action_mw: trimite o alertă cu un raport similar cu comanda whois a clientului interzis.
  • action_mwl: trimiteți o alertă mult mai detaliată prin includerea unui jurnal în corpul mesajului.

În aceasta vom folosi a doua opțiune:

 acțiune =% (action_mwl) s 
Apoi vom merge la secțiunea [SSH] și putem edita numărul maxim de încercări înainte de interdicție, îl vom lăsa la 5:
 maxretry = 5
Dacă avem serviciul SSH pe un alt port decât 22, ceea ce este foarte recomandat, trebuie să menționăm portul acestuia.
 port = 45024
Apoi vom căuta eticheta [nginx-http-auth], o vom lăsa așa cum este.
 [nginx-http-auth] activat = adevărat
Am terminat și putem salva și închide fișierul.

Repornirea serviciului Fail2ban


Pentru toate modificările care trebuie aplicate, vă recomand să opriți serviciul.
 service fail2ban stop 
Atunci le putem începe din nou
 service fail2ban start
Va dura ceva timp, după aproximativ 5 minute vom putea vedea din nou regulile noastre
 iptables -S
 -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80.443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp - -dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN
Vedem cum fail2ban a adăugat politici noi, poate varia în funcție de configurația pe care ați definit-o în /etc/fail2ban/jail.local.

ConcluziiAm instalat fail2ban și am configurat să funcționeze cu SSH și NGINX în cazul APACHE, trebuie să schimbăm etichetele și directorul jurnalelor, dar este foarte similar cu nginx. Am configurat doar elementele de bază, puteți crea filtre și reguli mult mai avansate, vă recomand să le citiți puțin pagina de manual, fișierele de configurare sunt bine comentate, vă recomand să mergeți puțin câte puțin pentru a-i descoperi toate funcțiile.

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave