Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

fail2ban împotriva încercărilor de ghicire

Modulul 5: Protejarea rețelei · Timp de citire: 10 minute

Obiectivul lecției: După această lecție veți putea configura fail2ban pentru SSH, citi starea și jurnalul său, debloca din nou o adresă și explica ce protejează fail2ban și ce nu.

Noțiuni cheie: brute force, jail, filtru, acțiune (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local și jail.d, fail2ban-client, recidive

Cei care încearcă toate ușile internetului

Priviți în jurnalul SSH la o zi după instalare și veți vedea: sute de încercări de autentificare, cu nume precum root, admin, test, ubuntu și oracle, de la adrese din toată lumea.

anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560

(Pe Ubuntu serviciul se numește ssh, pe AlmaLinux și Rocky sshd. Numele procesului poate fi sshd sau sshd-session, în funcție de versiunea OpenSSH.) Acesta este un atac brute force: boți care încearcă pur și simplu toate numele și parolele obișnuite. Dacă vă autentificați cu chei și autentificarea cu parolă este dezactivată (lecția 2.2), aceștia nu vor intra niciodată, oricât de des ar încerca. Totuși, vă umplu jurnalul, consumă puțină putere de calcul, iar la serviciile unde este necesară o parolă (un webmail, un panou de administrare) pot fi cu adevărat periculoși.

fail2ban citește jurnalele, recunoaște încercările eșuate și blochează în firewall, pentru o perioadă, o adresă care eșuează prea des.

Cum gândește fail2ban: jails

fail2ban lucrează cu jails (celule). Un jail combină trei lucruri:

  • un filtru: expresii regulate care recunosc în jurnal încercările eșuate (de exemplu linia "Invalid user ... from <adres>");
  • o acțiune: ce se întâmplă la prea multe încercări, de obicei o regulă de firewall care blochează adresa (banaction, pe Debian 13 implicit prin nftables);
  • praguri: câte încercări eșuate (maxretry) într-un anumit interval (findtime) duc la o blocare de ce durată (bantime).

Valorile implicite din jail.conf sunt: maxretry = 5, findtime = 10m, bantime = 10m. Așadar: cinci încercări eșuate în zece minute duc la o blocare de zece minute.

Instalarea și capcana din Debian 12

anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2ban

Pe Debian și Ubuntu, jail-ul pentru SSH ([sshd]) este deja activ după instalare, prin fișierul /etc/fail2ban/jail.d/defaults-debian.conf.

Există o capcană cunoscută. fail2ban trebuie să știe unde se află jurnalul. Înainte, acesta era fișierul text /var/log/auth.log. Începând cu Debian 12, rsyslog nu mai este instalat implicit, iar mesajele se află doar în jurnalul systemd (lecția 6.2). Pachetul fail2ban din Debian 12 căuta încă /var/log/auth.log, nu îl găsea și nu pornea. Debian 13 a rezolvat acest lucru setând în defaults-debian.conf pentru SSH backend = systemd. Pe Debian 12 rezolvați singur problema (vedeți mai jos) făcând același lucru. Ubuntu are încă rsyslog implicit, dar backend = systemd funcționează și acolo.

Setările dumneavoastră proprii: jail.local

Nu modificați niciodată jail.conf: acest fișier este înlocuit la o actualizare. Puneți setările dumneavoastră în /etc/fail2ban/jail.local sau într-un fișier din /etc/fail2ban/jail.d/ cu extensia .local:

# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20

[sshd]
enabled = true
backend = systemd

Ce fac aceste linii:

  • bantime = 1h: o oră de blocare în loc de zece minute.
  • bantime.increment = true: cine revine după o blocare primește de fiecare dată o blocare mai lungă.
  • ignoreip: adrese care nu sunt blocate niciodată. Puneți aici adresa IP fixă a biroului dumneavoastră, dacă aveți una. Nu puneți aici intervale mari „pentru siguranță”.
  • backend = systemd: citește jurnalul systemd în loc de un fișier text (necesar pe Debian 12, recomandat peste tot). Pentru aceasta trebuie să fie instalat pachetul python3-systemd; de obicei este deja instalat ca dependență.

Reîncărcați și verificați:

anna@web1:~$ sudo fail2ban-client -t            # testarea configurației
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Citirea stării, blocarea și deblocarea

anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     1288
|  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     117
   `- Banned IP list:   203.0.113.77 198.51.100.140

"Currently failed" sunt adresele care au făcut deja încercări, dar nu au depășit încă pragul. "Currently banned" sunt adresele blocate în acest moment.

Dacă v-ați blocat singur (de exemplu încercând de câteva ori cu cheia sau numele de utilizator greșit), autentificați-vă printr-o altă rețea sau prin consolă și deblocați-vă adresa:

anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20

Jurnalul propriu al fail2ban se află în /var/log/fail2ban.log și arată când a fost blocată și deblocată fiecare adresă:

2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE  [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE  [sshd] Unban 203.0.113.77

Recidiviștii: recidive

Unii boți revin pur și simplu după fiecare blocare. Pentru aceștia există două mijloace. bantime.increment (mai sus) face blocarea tot mai lungă de fiecare dată. În plus, există jail-ul recidive: acesta citește jurnalul propriu al fail2ban și blochează pentru o săptămână, pe toate porturile, o adresă care a fost blocată des în decurs de o zi. Activați-l în fișierul dumneavoastră .local:

[recidive]
enabled = true

Ce face fail2ban și ce nu face

fail2ban este util, dar nu este lacătul de pe ușă. Lacătul este autentificarea cu cheie, cu parolele dezactivate (lecția 2.2). De aceea, este bine să știți și ce nu poate face fail2ban:

  • Un atac distribuit de la mii de adrese, fiecare cu una sau două încercări, nu depășește niciodată maxretry.
  • O parolă slabă rămâne slabă. fail2ban încetinește ghicirea, nimic mai mult.
  • Doar ce apare într-un jurnal: un serviciu care nu înregistrează încercările eșuate sau un jurnal pe care fail2ban nu îl citește rămân invizibile pentru el.
  • Docker: blocările din lanțul obișnuit al firewall-ului nu se aplică porturilor de container publicate (lecția 9.3). Pentru serviciile din containere este necesară o setare separată (acțiune pe lanțul DOCKER-USER).

Ce face fail2ban bine: menține jurnalul liniștit, reduce încărcarea cauzată de boți și protejează serviciile la care folosiți (încă) parole, precum un webmail sau un panou de administrare. Pentru astfel de servicii există filtre pentru nginx, Postfix, Dovecot și multe altele.

Pe AlmaLinux și Rocky Linux

Acolo fail2ban provine din EPEL: dnf install epel-release și apoi dnf install fail2ban. Pachetul fail2ban instalează și legătura cu firewalld. Serviciul SSH se numește sshd. Activați jail-ul într-un fișier .local; spre deosebire de Debian, acesta nu este activat automat.

Rezumat

  • Boții încearcă toată ziua să se autentifice; cu chei și autentificarea cu parolă dezactivată nu intră, iar fail2ban îi ține în plus la distanță.
  • Un jail înseamnă filtru + acțiune + praguri (maxretry, findtime, bantime); implicit 5 încercări în 10 minute, 10 minute de blocare.
  • Setările proprii în jail.local sau jail.d/*.local, niciodată în jail.conf; folosiți backend = systemd (necesar pe Debian 12).
  • fail2ban-client status sshd afișează adresele blocate, set sshd unbanip deblochează; recidive și bantime.increment se ocupă de recidiviști.
  • fail2ban nu oprește atacurile distribuite sau parolele slabe și nu vede de la sine porturile Docker.

Test (quiz)

1. Ați instalat fail2ban pe Debian 12 și nu pornește, cu mesajul că nu există fișier de jurnal pentru jail-ul sshd. Care este cauza?



2. De ce vă puneți setările în jail.local și nu în jail.conf?



3. Setările implicite sunt maxretry = 5, findtime = 10m, bantime = 10m. O adresă face o încercare eșuată la 14:00, 14:03, 14:05, 14:08 și 14:09. Ce se întâmplă?



4. Serverul dumneavoastră primește zilnic mii de încercări de autentificare, distribuite pe zeci de mii de adrese, fiecare cu o singură încercare. Ce face fail2ban împotriva lor?



5. V-ați blocat singur tastând de câteva ori un nume de utilizator greșit. Care este soluția corectă?



Exercițiu

Exercițiul Z5.3: Citirea unui jurnal de intruziune. Fișierul de exemplu ssh-journal-1.txt conține o porțiune din jurnalul unui server SSH cu fail2ban, plus rezultatul comenzii fail2ban-client status sshd. Răspundeți: ce adresă a încercat cele mai multe nume de utilizator, ce adresă a reușit să se autentifice cu o cheie și ca ce utilizator, ce adresă a fost blocată și la ce oră și ar fi fost blocată acea adresă și cu setările implicite (maxretry = 5, findtime = 10m)? Programul compară răspunsurile cu cheia fixă. Dacă aveți un server propriu cu fail2ban, verificați acolo și fail2ban-client status sshd.

Exercițiul Z5.3: Citirea unui jurnal de intruziune

Fișier la acest exercițiu: ssh-journal-1.txt








Ceea ce completați și ceea ce găsim nu se salvează. Browserul dumneavoastră reține răspunsurile și dacă ați rezolvat exercițiul. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că exercițiul a fost (aproape) corect; și de acolo îl puteți șterge.

Lecturi suplimentare

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…