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 fail2banAceasta 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.localDupă 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.1Adă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 = 600Timpul 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 = 3Apoi 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 = sendmailDacă 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_) sAici 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.logAcum, 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 nginxvom 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-persistentAcesta 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 DROPPutem vedea modificările cu:
iptables -SAr 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.localPutem 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 = 1800Trebuie 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) sApoi 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 = 5Dacă avem serviciul SSH pe un alt port decât 22, ceea ce este foarte recomandat, trebuie să menționăm portul acestuia.
port = 45024Apoi vom căuta eticheta [nginx-http-auth], o vom lăsa așa cum este.
[nginx-http-auth] activat = adevăratAm 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 stopAtunci le putem începe din nou
service fail2ban startVa 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 RETURNVedem 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