Sari la conținut

Acasă › Blog › Cum securizați un server Linux folosind fail2ban

Cum securizați un server Linux folosind fail2ban

14 august 2025 · , specialist în servicii SEO din 2007 · Linux

Cum securizați un server Linux folosind fail2ban

Cum securizați un server Linux folosind fail2ban este prima întrebare după ce deschideți jurnalul unui server nou și vedeți sute de încercări de autentificare pe SSH în prima oră. Niciuna nu reușește, dar fiecare consumă procesor și fiecare este o loterie pe care atacatorul o joacă gratuit. fail2ban citește jurnalele, numără încercările eșuate pe adresă și, la depășirea unui prag, blochează adresa în firewall pentru o perioadă.

Instalarea durează un minut. Configurarea corectă, cea care protejează fără să vă blocheze pe dvs., este subiectul acestui ghid.

Cum securizați un server Linux folosind fail2ban

fail2ban are trei componente: filtre, expresii regulate care recunosc o încercare eșuată într-un jurnal; jail-uri, reguli care leagă un filtru de un jurnal, de un prag și de o acțiune; acțiuni, comenzile care blochează și deblochează adresa, de obicei prin nftables, iptables sau firewalld.

Vine cu zeci de filtre gata scrise pentru serviciile obișnuite. Munca dvs. este să activați jail-urile potrivite și să calibrați pragurile.

Ce protejează și ce nu

  • Protejează serviciile care scriu încercările eșuate într-un jurnal: SSH, e-mail, FTP, autentificarea WordPress dacă serverul web o jurnalizează.
  • Nu protejează împotriva unei parole slabe ghicite din prima încercare; parola bună și cheile SSH rămân obligatorii.
  • Nu oprește un atac distribuit, în care fiecare adresă încearcă de două ori. Pragurile pe adresă nu se ating.
  • Nu înlocuiește firewall-ul; îl folosește. Firewall-ul de bază, cu porturile închise, se configurează separat, cum arată ghidul despre firewall-ul cu UFW și iptables.

Instalarea

Ubuntu și Debian:

sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable --now fail2ban

AlmaLinux, Rocky și alte derivate Enterprise Linux, unde pachetul vine din depozitul EPEL:

sudo dnf install epel-release -y
sudo dnf install fail2ban -y
sudo systemctl enable --now fail2ban

Verificați că serviciul rulează și că vede firewall-ul:

sudo systemctl status fail2ban
sudo fail2ban-client status

Pe un server cu cPanel și Imunify360 sau CSF, fail2ban de obicei nu este necesar: acele produse fac același lucru și se pot încurca reciproc. Ghidul despre securitatea AlmaLinux 9 descrie alegerea dintre ele.

Configurarea: jail.local, nu jail.conf

/etc/fail2ban/jail.conf este fișierul pachetului și se suprascrie la actualizări. Setările dvs. merg în /etc/fail2ban/jail.local, care are prioritate. Nu copiați tot jail.conf în jail.local; scrieți doar ce schimbați.

[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
bantime.maxtime = 1w
ignoreip = 127.0.0.1/8 ::1 5.15.0.0/16
backend  = systemd

[sshd]
enabled = true
port    = 2200
mode    = aggressive

Ce înseamnă fiecare linie:

  • bantime: cât stă blocată o adresă la prima abatere. O oră este suficientă ca să facă atacul nerentabil.
  • findtime: fereastra în care se numără încercările. 5 încercări în 10 minute prinde atacurile automate și nu prinde omul care greșește parola de două ori.
  • bantime.increment: fiecare blocare repetată a aceleiași adrese durează mai mult, până la bantime.maxtime. Adresele recidiviste ajung blocate o săptămână.
  • ignoreip: adresele care nu se blochează niciodată. Puneți aici rețeaua de la birou și adresa de acasă, altfel vă blocați singur după trei parole greșite.
  • backend = systemd: citește jurnalul systemd în loc de fișiere; obligatoriu pe distribuțiile unde SSH nu mai scrie în /var/log/auth.log.
  • port la jail-ul sshd: dacă SSH rulează pe alt port decât 22, scrieți-l aici, altfel blocarea se aplică pe portul greșit.

După orice modificare:

sudo fail2ban-client reload
sudo fail2ban-client status sshd

Jail-uri pentru serverul web

Pentru un server care găzduiește WordPress, atacurile pe wp-login.php și xmlrpc.php sunt mai numeroase decât cele pe SSH. Filtrul de mai jos, salvat ca /etc/fail2ban/filter.d/wordpress.conf, recunoaște cererile POST către pagina de autentificare în jurnalul de acces:

[Definition]
failregex = ^<HOST> .* "POST /wp-login\.php
ignoreregex =

Și jail-ul, în jail.local, cu calea către jurnalul de acces al serverului web:

[wordpress]
enabled  = true
filter   = wordpress
logpath  = /var/log/nginx/access.log
port     = http,https
maxretry = 10
findtime = 5m
bantime  = 6h

Pragul de 10 este mai mare decât la SSH, fiindcă un utilizator legitim care greșește parola trimite și el POST-uri. Pentru pagina de autentificare, măsurile din interiorul WordPress rămân necesare; ghidul despre securizarea unui website WordPress le acoperă.

Jail-uri pentru e-mail și FTP

fail2ban vine cu filtre pentru Postfix, Exim, Dovecot, vsftpd și ProFTPD. Se activează cu enabled = true sub numele jail-ului, de exemplu [postfix-sasl] sau [dovecot]. Serverele de e-mail sunt ținte permanente pentru încercări de autentificare, iar un cont spart trimite spam de pe domeniul dvs. în câteva minute.

Verificarea că funcționează

sudo fail2ban-client status              lista jail-urilor active
sudo fail2ban-client status sshd        adresele blocate acum și totalul
sudo journalctl -u fail2ban -f          blocările și deblocările, în timp real
sudo nft list set inet f2b-table addr-set-sshd   sau, pe iptables: sudo iptables -L f2b-sshd -n

Testul cel mai sigur: de pe o altă conexiune, care nu este în ignoreip, încercați de șase ori o parolă greșită pe SSH. A șaptea conexiune trebuie să nu mai răspundă deloc, iar adresa să apară în status. Citirea jurnalului fail2ban și a celui SSH cu journalctl este descrisă în ghidul despre utilizarea journalctl în analiza logurilor.

Deblocarea unei adrese

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Prima deblochează o adresă dintr-un jail; a doua golește toate blocările, utilă când ați greșit configurația și ați blocat clienți.

Dacă v-ați blocat singur

Se întâmplă tuturor o dată. Semnul: SSH nu mai răspunde de la adresa dvs., dar serverul este vizibil din altă parte.

  1. Conectați-vă din altă rețea, de pe telefon prin date mobile, sau prin consola furnizorului de găzduire, care nu trece prin firewall.
  2. Deblocați adresa cu fail2ban-client set sshd unbanip.
  3. Adăugați adresa sau rețeaua în ignoreip și reîncărcați.
  4. Dacă adresa dvs. de acasă se schimbă des, adăugați întreaga rețea a furnizorului sau configurați accesul prin chei SSH, care nu produc încercări eșuate.

Blocarea atacurilor pe SSH are și alte straturi, în afara fail2ban: port schimbat, autentificare doar cu chei, limitarea la anumite adrese. Ghidul despre blocarea atacurilor brute force pe SSH le pune împreună.

Greșeli frecvente

  • Jail-ul sshd activ, dar pe portul 22, când SSH rulează pe alt port: adresele sunt blocate pe un port pe care nu ajunge nimeni.
  • backend lăsat pe auto pe o distribuție fără /var/log/auth.log: fail2ban pornește, dar nu vede nicio încercare.
  • Praguri prea mici pe serverul web: un formular trimis de trei ori de un client blochează clientul.
  • Adresele proxy-ului, Cloudflare sau un balansor, nepuse în ignoreip: fail2ban blochează proxy-ul și site-ul dispare pentru toată lumea. Pe un server din spatele Cloudflare, jurnalul de acces trebuie să conțină adresa reală a vizitatorului, nu a proxy-ului, altfel filtrele blochează ce nu trebuie.
  • fail2ban instalat lângă CSF sau Imunify, fără să se știe care blochează ce. Alegeți unul.

Ce vedeți după o săptămână

Pe un server obișnuit, cu SSH pe portul standard, fail2ban blochează între 100 și 500 de adrese pe zi în prima săptămână. Cu portul mutat, numărul scade la câteva zeci. Cu autentificare doar prin chei, încercările continuă, dar niciuna nu are cum să reușească, iar fail2ban devine un mod de a ține jurnalul curat și procesorul liber.

Verificați săptămânal fail2ban-client status pentru fiecare jail și treceți cifrele în jurnalul de administrare. O creștere bruscă înseamnă un val nou de atac sau o adresă legitimă blocată repetat, iar ambele merită o privire. Pentru utilizatorii cu drepturi limitate, care au nevoie doar să citească aceste rapoarte, aveți ghidul despre crearea unui utilizator cu acces limitat.

Acțiuni: ce se întâmplă la blocare

Implicit, fail2ban blochează adresa pe portul serviciului din jail. Pentru o adresă care atacă SSH, asta înseamnă că poate încerca în continuare e-mailul sau site-ul. Dacă preferați blocarea pe toate porturile, schimbați acțiunea:

[DEFAULT]
banaction = nftables-allports
# sau, pe iptables: banaction = iptables-allports
# sau, pe firewalld: banaction = firewallcmd-rich-rules

Alegeți acțiunea potrivită firewall-ului instalat; una nepotrivită produce erori în jurnal la fiecare blocare și nu blochează nimic. journalctl -u fail2ban arată imediat dacă acțiunea a eșuat.

Notificări

fail2ban poate trimite un e-mail la fiecare blocare, cu action = %(action_mwl)s, care include și liniile de jurnal. Pe un server cu sute de blocări pe zi, e-mailurile devin spam propriu. Mai util este un raport săptămânal din fail2ban-client status, trimis printr-un cron, cu numărul de blocări pe jail.

Jail-ul recidive

Adresele care revin după expirarea blocării sunt tratate de jail-ul recidive, inclus în pachet: citește jurnalul fail2ban însuși și blochează, pentru o săptămână, adresele blocate de cel puțin cinci ori într-o zi.

[recidive]
enabled  = true
bantime  = 1w
findtime = 1d
maxretry = 5

Este stratul care reduce cel mai mult zgomotul pe un server expus: după prima săptămână, majoritatea adreselor persistente sunt deja blocate pe termen lung.

De reținut

fail2ban se instalează dintr-un pachet, se configurează în jail.local cu praguri realiste, cu ignoreip completat și cu portul corect, și se verifică cu fail2ban-client status. Activați jail-uri pentru fiecare serviciu expus, SSH, web, e-mail, și nu îl combinați cu alt sistem de blocare. Recomandările distribuțiilor pentru securizarea serverului sunt în documentația de securitate Ubuntu Server și în manualul de securizare Debian.

Dacă nu știți câte încercări de autentificare primește serverul dvs. sau dacă are vreo protecție, o verificare a antetelor și a serviciilor expuse face parte din auditul SEO gratuit de la GOAI, iar securizarea completă a serverului intră în serviciile de SEO tehnic.

Cum a fost realizat acest articol

Autor
Publicat
14 august 2025
Ultima actualizare
18 septembrie 2026
Surse

Lucrăm după principiile noastre de publicare, politica pentru corectare, politica pentru etică.

Articole similare