Protecție împotriva încercărilor de ghicire a parolei cu fail2ban
Instalarea și configurarea fail2ban pentru SSH, verificarea blocărilor și deblocarea unei adrese.
Pe această pagină
fail2ban citește jurnalele serverului și blochează temporar adresele IP care greșesc autentificarea de prea multe ori într-un interval scurt. Îl instalați și îl configurați chiar pe server, conectat prin SSH ca root (Conectarea la server prin SSH (Windows, macOS, Linux)). BLACKBOX nu instalează fail2ban pe serverele noi, iar panoul app.blackbox.md nu are setări pentru el.
Disponibil pentru: oricine are acces root prin SSH la un server BLACKBOX cu Ubuntu, Debian, AlmaLinux sau CentOS Stream. Pe serverele marcate „Administrat” în „Serverele mele”, modificările le face echipa BLACKBOX: scrieți-ne.
Când vă trebuie fail2ban
Roboții din internet încearcă fără oprire parole pe portul SSH al oricărui server public. Rolul fail2ban depinde de insigna de pe cardul serverului din „Serverele mele”:
| Insigna | Situația | Ce face fail2ban |
|---|---|---|
| „Parolă + cheie” | Parola root funcționează prin SSH și poate fi ghicită | Blochează adresele care încearcă parole. Recomandat. |
| „Doar cheie” | SSH acceptă doar chei, parola nu poate fi ghicită | Reduce în principal zgomotul din jurnale și încărcarea produsă de roboți. Tot recomandat. |
Cea mai sigură variantă rămâne autentificarea doar cu cheie: Activarea și dezactivarea autentificării SSH cu parolă. fail2ban o completează, nu o înlocuiește. Locul lui între ceilalți pași de securitate: Securizarea unui server nou: lista de verificare. Dacă serverul are un panou de control instalat (planurile „VPS hosting”), întrebați întâi suportul: panoul poate avea propriul fail2ban.
Instalarea
Ubuntu și Debian
apt update
apt install -y fail2banAlmaLinux și CentOS Stream
fail2ban vine din depozitul EPEL:
dnf install -y epel-release
dnf install -y fail2banConfigurarea în jail.local
Setările implicite sunt în /etc/fail2ban/jail.conf. Nu modificați acest fișier: o actualizare a pachetului îl poate înlocui. Scrieți setările dvs. în /etc/fail2ban/jail.local, care se citește după jail.conf și după fișierele .conf din /etc/fail2ban/jail.d/ și are prioritate față de ele. Fiecare secțiune protejează un serviciu și se numește „jail”: [sshd] pentru SSH, [nginx-http-auth] pentru nginx etc. Secțiunea [DEFAULT] conține valorile comune.
Aflați adresa IP publică de pe care vă conectați: deschideți
https://ip.blackbox.mdși apăsați „Copiază” (Instrumentul „Adresa ta IP”). Dacă lucrați din mai multe locuri, de exemplu de la birou și de acasă, notați fiecare adresă.Pe Ubuntu și Debian, verificați dacă există fișierul jurnal al SSH:
ls -l /var/log/auth.logDacă răspunsul este „No such file or directory”, sistemul păstrează jurnalele doar în jurnalul systemd (de exemplu, pe Debian 12) și veți face și pasul 5. Pe AlmaLinux și CentOS Stream săriți acest pas: acolo fail2ban citește implicit jurnalul systemd, așa că nu aveți nevoie nici de pașii 5 și 7.
Deschideți fișierul în editor:
nano /etc/fail2ban/jail.localPe AlmaLinux și CentOS Stream, dacă primiți „nano: command not found”, instalați întâi editorul:
dnf install -y nanoLipiți conținutul de mai jos și înlocuiți
IP_DVScu adresa de la pasul 1 (mai multe adrese se separă prin spațiu). Dacă fișierul există deja, de exemplu creat după lista de verificare, nu dublați secțiunile: adăugați liniile lipsă în secțiunile existente.[DEFAULT] ignoreip = 127.0.0.1/8 ::1 IP_DVS bantime = 1h findtime = 10m maxretry = 5 [sshd] enabled = trueDoar pe Ubuntu și Debian, dacă fișierul jurnal lipsea la pasul 2: adăugați în secțiunea
[sshd], subenabled = true, linia de mai jos.backend = systemdSalvați și închideți: în
nano, Ctrl + O, Enter, apoi Ctrl + X.Dacă ați făcut pasul 5, instalați modulul de care are nevoie
backend = systemd. De regulă, el se instalează deja împreună cu fail2ban; atunci comanda doar confirmă acest lucru.apt install -y python3-systemd
| Parametru | Ce face | Valoarea din exemplu |
|---|---|---|
ignoreip |
Adresele și rețelele care nu sunt blocate niciodată. 127.0.0.1/8 ::1 este serverul însuși. Acceptă și rețele, de exemplu 198.51.100.0/24. |
adresa dvs. |
bantime |
Cât durează o blocare. Unități: m (minute), h (ore), d (zile). |
1 oră (implicit 10 minute) |
findtime |
Intervalul în care se numără încercările greșite. | 10 minute (ca implicit) |
maxretry |
Câte încercări greșite în findtime duc la blocare. |
5 (ca implicit) |
bantime.increment |
Opțional, în [DEFAULT]. Cu true, fiecare nouă blocare a aceleiași adrese durează mai mult decât precedenta. |
— |
enabled |
În [sshd]: pornește protecția SSH. |
true |
backend |
În [sshd]: systemd înseamnă că fail2ban citește jurnalul systemd. Pe AlmaLinux și CentOS Stream aceasta este deja valoarea implicită. Pe Ubuntu și Debian îl adăugați doar dacă fișierul jurnal lipsește. |
doar la pasul 5 |
Important Adăugați-vă adresa la
ignoreipînainte de a porni fail2ban. Altfel, câteva autentificări greșite de pe calculatorul dvs. vă blochează accesul la server. Nu închideți sesiunea SSH curentă până nu verificați că vă puteți conecta dintr-un terminal nou. Multe conexiuni de acasă și de pe mobil au o adresă dinamică, care se schimbă: dacă nu vă mai puteți conecta, verificați din nou adresa peip.blackbox.md.
AlmaLinux și CentOS Stream: cum se aplică blocarea
Pe aceste sisteme, pachetul fail2ban instalează și firewalld și blochează adresele prin el. Pe un server nou firewalld nu rulează, iar fără el blocările nu au efect. Verificați:
systemctl is-active firewalld| Răspuns | Ce faceți |
|---|---|
active |
Nimic: blocările se adaugă în firewalld. |
inactive sau alt răspuns |
Adăugați în secțiunea [DEFAULT] din jail.local cele două linii de mai jos: fail2ban va bloca adresele direct prin nftables. Alternativ, porniți și configurați firewalld: Firewall: filtrarea din rețea și ufw/firewalld pe server. |
banaction = nftables-multiport
banaction_allports = nftables-allportsDacă nu folosiți firewalld, verificați și dacă este setat să pornească la boot:
systemctl is-enabled firewalldDacă răspunsul este enabled, dezactivați pornirea automată. Altfel, după o repornire firewalld pornește cu regulile implicite, care lasă să treacă SSH, dar nu și porturile 80 și 443 ale site-urilor.
systemctl disable firewalldPornirea și verificarea
Verificați configurația. Răspunsul corect este „OK: configuration test is successful”; altfel, mesajul arată fișierul și linia cu problema.
fail2ban-client -tActivați pornirea automată și porniți serviciul, apoi reporniți-l ca să citească sigur
jail.local(pe Ubuntu și Debian poate rula deja de la instalare):systemctl enable --now fail2ban systemctl restart fail2banVerificați jail-urile active. În „Jail list” trebuie să apară
sshd:fail2ban-client statusVerificați protecția SSH:
fail2ban-client status sshdStatus for the jail: sshd |- Filter | |- Currently failed: 2 | |- Total failed: 57 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 1 |- Total banned: 9 `- Banned IP list: 203.0.113.45
| Câmp | Ce arată |
|---|---|
| „Currently failed” | Câte adrese au încercări greșite în intervalul findtime, dar nu sunt încă blocate |
| „Total failed” | Încercările greșite numărate de la pornirea fail2ban |
| „File list” sau „Journal matches” | De unde citește fail2ban: din fișier sau, cu backend = systemd, din jurnalul systemd |
| „Currently banned”, „Total banned”, „Banned IP list” | Câte adrese sunt blocate acum, câte blocări au fost de la pornirea fail2ban și care adrese sunt blocate acum |
Istoricul blocărilor și erorile sunt în jurnalul fail2ban, de regulă fișierul /var/log/fail2ban.log. Ultimele blocări și deblocări:
grep -E "(Ban|Unban) " /var/log/fail2ban.log | tail -n 20Dacă fișierul lipsește, citiți jurnalul systemd al serviciului:
journalctl -u fail2ban -n 50Testați blocarea
Verificați o dată că blocarea chiar funcționează, cu 203.0.113.10, o adresă rezervată pentru documentație, care nu aparține nimănui:
fail2ban-client set sshd banip 203.0.113.10
fail2ban-client status sshd
tail -n 20 /var/log/fail2ban.log
fail2ban-client set sshd unbanip 203.0.113.10Adresa trebuie să apară în „Banned IP list”, iar în jurnal, după linia cu Ban 203.0.113.10, să nu existe linii cu ERROR (dacă fișierul jurnal lipsește, folosiți comanda journalctl de mai sus). Dacă apar erori, vedeți „Probleme frecvente” mai jos.
Deblocarea unei adrese
Scoateți adresa din blocarea SSH:
fail2ban-client set sshd unbanip ADRESA_IPSau din toate jail-urile deodată:
fail2ban-client unban ADRESA_IPCa adresa să nu mai fie blocată pe viitor, adăugați-o la ignoreip în /etc/fail2ban/jail.local, apoi reporniți fail2ban:
systemctl restart fail2banDacă v-ați blocat propria adresă
Semnul: conexiunea SSH de pe calculatorul dvs. este refuzată sau expiră, deși de pe altă rețea serverul răspunde. Aveți patru variante:
- Așteptați să expire blocarea (
bantime, o oră în exemplul de mai sus). Repornirea serverului nu ajută: fail2ban reține blocările active și le aplică din nou la pornire. - Conectați-vă de pe altă rețea, de exemplu prin internetul mobil al telefonului, deblocați adresa ca mai sus și adăugați-o la
ignoreip. - Dacă ați conectat un asistent AI printr-un token cu permisiunea „Rulează orice comandă ca root pe serverele mele”, cereți-i să ruleze comanda de deblocare: ea ajunge pe server prin conexiunea BLACKBOX, nu de la adresa dvs. (Rularea comenzilor pe server prin AI).
- Scrieți-ne și indicați IP-ul serverului și adresa dvs. IP: Cum contactați suportul BLACKBOX.
Atenție Pentru clienți nu există consolă web sau VNC prin care să intrați pe server ocolind blocarea. De aceea, adăugați-vă adresa la
ignoreipînainte de a porni fail2ban.
Protecție pentru nginx (opțional)
Dacă pe server rulează nginx (Server web cu HTTPS: nginx sau Apache și Let's Encrypt), fail2ban are filtre gata făcute. Ele citesc jurnalele de erori nginx (/var/log/nginx/*error.log) și blochează porturile 80 și 443.
| Jail | Ce blochează | Când îl activați |
|---|---|---|
nginx-http-auth |
Adresele care greșesc repetat utilizatorul sau parola la paginile protejate cu autentificare HTTP (auth_basic) |
Dacă aveți astfel de pagini, de exemplu un panou de administrare |
nginx-limit-req |
Adresele care depășesc repetat limita de cereri setată în nginx | Doar dacă ați configurat limit_req_zone și limit_req; fără ele, jurnalul nu are ce semnala |
Adăugați la sfârșitul /etc/fail2ban/jail.local doar secțiunile de care aveți nevoie:
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = trueApoi verificați configurația, reporniți serviciul și controlați jail-ul nou:
fail2ban-client -t
systemctl restart fail2ban
fail2ban-client status nginx-http-authDacă site-urile scriu jurnalul de erori în alt loc, adăugați în secțiune linia logpath = CALEA_JURNALULUI.
Notă Dacă domeniul trece prin proxy-ul Cloudflare (norul portocaliu), cererile vin de la adresele Cloudflare, nu direct de la vizitatori. O blocare pe server nu oprește atunci atacatorul și poate bloca chiar adresele Cloudflare. Pentru astfel de domenii nu activați jail-urile nginx; folosiți protecțiile din contul Cloudflare.
Probleme frecvente
Începeți cu aceste comenzi: prima arată erorile de configurare, celelalte starea serviciului.
fail2ban-client -t
systemctl status fail2ban
journalctl -u fail2ban -n 50| Mesaj | Cauza | Ce faceți |
|---|---|---|
Failed to access socket path: …/fail2ban.sock. Is fail2ban running? |
Serviciul nu rulează, de obicei din cauza unei erori în configurație | Corectați eroarea arătată de prima comandă de mai sus, apoi reporniți serviciul. Dacă tocmai l-ați pornit, așteptați câteva secunde și repetați comanda |
Have not found any log file for sshd jail |
Fișierul jurnal al SSH lipsește (Ubuntu, Debian) | Faceți pașii 5 și 7 din „Configurarea în jail.local” |
Have not found any log file for nginx-http-auth jail (sau nginx-limit-req) |
nginx nu este instalat sau jurnalele lui sunt în alt loc | Scoateți secțiunea din jail.local sau adăugați logpath |
În jurnalul fail2ban, la o blocare: iptables: not found |
Metoda implicită de blocare folosește iptables, care nu este instalat (se poate întâmpla pe Debian) | Instalați pachetul iptables și reporniți fail2ban |
În jurnalul fail2ban, la o blocare: FirewallD is not running |
Pe AlmaLinux sau CentOS Stream firewalld este oprit | Urmați „AlmaLinux și CentOS Stream: cum se aplică blocarea” |
Întrebări frecvente
Serverul meu este „Doar cheie”. Mai are rost fail2ban? Da. Parola nu poate fi ghicită, dar roboții continuă să se conecteze și să umple jurnalele. fail2ban îi blochează după câteva încercări și reduce zgomotul și încărcarea.
Panoul îmi arată dacă fail2ban funcționează? Pentru serverele comandate pe blackbox.md, nu: pagina „Monitorizare” arată încărcarea serverelor cu serviciul Monitoring (CPU, RAM, disc), nu starea fail2ban (Pagina „Monitorizare”). Verificați pe server, cu comenzile din „Pornirea și verificarea”. Pentru serverele unei companii administrate de BLACKBOX, pagina „Prezentare generală” are placa „Fără fail2ban” și coloana „fail2ban” (Pagina „Prezentare generală” (Overview)).
fail2ban mă apără de un atac DDoS? Nu. fail2ban reacționează la autentificări greșite și la erori din jurnale, adresă cu adresă. Dacă serverul sau site-ul este atacat, citiți Serverul a fost spart sau este atacat: ce faceți și scrieți-ne.
Pot folosi fail2ban împreună cu ufw sau firewalld? Da. fail2ban își adaugă propriile reguli de blocare, separat de regulile dvs. de firewall. Filtrarea din rețea, administrată de BLACKBOX, funcționează independent de ambele: Firewall: filtrarea din rețea și ufw/firewalld pe server.