BLACKBOXCentru de ajutor

Protecție împotriva încercărilor de ghicire a parolei cu fail2ban

Instalarea și configurarea fail2ban pentru SSH, verificarea blocărilor și deblocarea unei adrese.

generalActualizat 2026-10-09~9 min de citit
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 fail2ban

AlmaLinux și CentOS Stream

fail2ban vine din depozitul EPEL:

dnf install -y epel-release
dnf install -y fail2ban

Configurarea î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.

  1. 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ă.

  2. Pe Ubuntu și Debian, verificați dacă există fișierul jurnal al SSH:

    ls -l /var/log/auth.log

    Dacă 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.

  3. Deschideți fișierul în editor:

    nano /etc/fail2ban/jail.local

    Pe AlmaLinux și CentOS Stream, dacă primiți „nano: command not found”, instalați întâi editorul:

    dnf install -y nano
  4. Lipiți conținutul de mai jos și înlocuiți IP_DVS cu 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 = true
  5. Doar pe Ubuntu și Debian, dacă fișierul jurnal lipsea la pasul 2: adăugați în secțiunea [sshd], sub enabled = true, linia de mai jos.

    backend = systemd
  6. Salvați și închideți: în nano, Ctrl + O, Enter, apoi Ctrl + X.

  7. 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 pe ip.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-allports

Dacă nu folosiți firewalld, verificați și dacă este setat să pornească la boot:

systemctl is-enabled firewalld

Dacă 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 firewalld

Pornirea și verificarea

  1. Verificați configurația. Răspunsul corect este „OK: configuration test is successful”; altfel, mesajul arată fișierul și linia cu problema.

    fail2ban-client -t
  2. Activaț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 fail2ban
  3. Verificați jail-urile active. În „Jail list” trebuie să apară sshd:

    fail2ban-client status
  4. Verificați protecția SSH:

    fail2ban-client status sshd
    Status 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 20

Dacă fișierul lipsește, citiți jurnalul systemd al serviciului:

journalctl -u fail2ban -n 50

Testaț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.10

Adresa 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_IP

Sau din toate jail-urile deodată:

fail2ban-client unban ADRESA_IP

Ca 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 fail2ban

Dacă 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:

  1. 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.
  2. 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.
  3. 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).
  4. 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 = true

Apoi verificați configurația, reporniți serviciul și controlați jail-ul nou:

fail2ban-client -t
systemctl restart fail2ban
fail2ban-client status nginx-http-auth

Dacă 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.

N-ați găsit răspunsul?Scrieți-ne și echipa de suport vă răspunde. support@blackbox.md
Deschideți un tichet