Cum se instalează Fail2ban pe Rocky Linux 10, 9 și 8?

Configurare noua (How To)

Situatie

Sondele de parole SSH și scanările repetate de autentificare sunt mult mai ușor de gestionat când Rocky Linux poate bloca automat agresorii repetați, în loc să aștepte o regulă manuală de firewall. Fail2Ban monitorizează jurnalele serviciilor, numără eșecurile repetate și adaugă reguli temporare firewalld rich rules pentru adresele IP care depășesc pragul configurat.

Poți instala Fail2Ban pe Rocky Linux din EPEL, apoi activa un jail SSH care citește jurnalul systemd și blochează prin stiva implicită firewalld a Rocky. Același flux de lucru îți oferă și verificări de stare, comenzi manuale de ban și unban, jail-uri opționale pentru web sau mail și o cale curată de dezinstalare.

Rocky Linux 10, 9 și 8 folosesc aceeași configurare Fail2Ban bazată pe EPEL. EPEL împachetează în prezent Fail2Ban 1.1.0 pentru Rocky Linux 10 și 9, în timp ce Rocky Linux 8 primește Fail2Ban 1.0.2; jail-ul SSH și acțiunea firewalld funcționează pe toate cele trei versiuni.

Solutie

Pasi de urmat

Instalarea Fail2Ban pe Rocky Linux
Calea de instalare are trei părți: reîmprospătarea metadatelor DNF, activarea EPEL, apoi instalarea pachetului Fail2Ban. Rocky Linux nu include Fail2Ban în depozitele de bază, deci EPEL este sursa de pachete pentru acest flux de lucru.

Actualizarea pachetelor Rocky Linux
Reîmprospătează metadatele pachetelor și aplică actualizările disponibile înainte de a adăuga serviciul de securitate:

sudo dnf upgrade --refresh

Comenzile care încep cu sudo necesită un cont cu privilegii de administrator. Folosește un utilizator cu sudo activat sau comută la un shell administrativ înainte de a continua.

Activarea EPEL pentru Fail2Ban
Instalează pachetul de release EPEL din depozitul Extras al Rocky:

sudo dnf install -y epel-release

EPEL poate afișa o notă că multe pachete au nevoie de CRB sau PowerTools. Fail2Ban se rezolvă pe Rocky Linux 10, 9 și 8 după instalarea epel-release, deci nu activa depozite suplimentare decât dacă DNF raportează o problemă de dependență pe sistemul tău. Ghidul complet de configurare EPEL pentru Rocky Linux acoperă CRB și PowerTools în detaliu.
Confirmă că EPEL este activat:

dnf repolist --enabled | grep '^epel'

Rezultatul relevant pe Rocky Linux 10 arată astfel:

epel Extra Packages for Enterprise Linux 10 - x86_64

Instalarea pachetelor Fail2Ban
Instalează Fail2Ban din EPEL:

sudo dnf install -y fail2ban

Pachetul fail2ban este un meta-pachet mic. DNF instalează și pachetele separate care furnizează serverul, acțiunea firewalld, politica SELinux și acțiunea de notificare compatibilă cu sendmail.

Verifică setul de pachete instalate:

rpm -q fail2ban fail2ban-server fail2ban-firewalld fail2ban-selinux

Rocky Linux 10 returnează seria curentă de pachete EPEL 10:

fail2ban-1.1.0-6.el10_0.noarch
fail2ban-server-1.1.0-6.el10_0.noarch
fail2ban-firewalld-1.1.0-6.el10_0.noarch
fail2ban-selinux-1.1.0-6.el10_0.noarch

Rocky Linux 9 folosește aceeași serie 1.1.0 din EPEL 9. Rocky Linux 8 folosește seria 1.0.2 din EPEL 8.

Verificarea comenzii Fail2Ban
Verifică versiunea clientului înainte de a porni serviciul:

fail2ban-client --version

Rezultatul așteptat pe Rocky Linux 10 și 9:

Fail2Ban v1.1.0

Activarea și pornirea Fail2Ban
Fail2Ban se instalează dezactivat și inactiv. Activează-l pentru boot-urile viitoare și pornește-l acum

sudo systemctl enable --now fail2ban

Verifică atât starea de rulare cât și cea de boot:

systemctl is-active fail2ban
systemctl is-enabled fail2ban

Un serviciu activ și activat returnează:

active
enabled

Confirmă că clientul poate ajunge la socket-ul Fail2Ban:

sudo fail2ban-client ping
Server replied: pong

Configurarea protecției SSH Fail2Ban pe Rocky Linux
Primul jail cel mai sigur este SSH, deoarece majoritatea serverelor conectate la internet primesc rapid sonde de parole și nume de utilizator. Dacă SSH nu este instalat sau nu ascultă încă, finalizează configurarea SSH pe Rocky Linux înainte de a te baza pe jail.

Înțelegerea ordinii de configurare Fail2Ban
Fail2Ban încarcă mai întâi valorile implicite împachetate, iar apoi suprascrierea locală. Folosește fișiere locale pentru modificările tale, astfel încât actualizările de pachete să poată înlocui valorile implicite upstream în siguranță.

  • /etc/fail2ban/jail.conf conține valorile implicite împachetate. Nu edita direct acest fișier.
  • /etc/fail2ban/jail.d/*.conf conține fișiere de suprascriere împachetate, inclusiv fișierul de acțiune firewalld al Rocky.
  • /etc/fail2ban/jail.local poate conține suprascrieri locale la nivel de site.
  • /etc/fail2ban/jail.d/*.local este util pentru suprascrieri locale mici specifice serviciului, cum ar fi un fișier pentru SSH și altul pentru Nginx.

Pachetul fail2ban-firewalld setează acțiunea implicită de ban la regulile rich firewalld. Comanda sed afișează suprascrierea împachetată fără a o edita:

sudo sed -n '1,8p' /etc/fail2ban/jail.d/00-firewalld.conf

Liniile relevante sunt:

ini
# This file is part of the fail2ban-firewalld package to configure the use of
# the firewalld actions as the default actions.  You can remove this package
# (along with the empty fail2ban meta-package) if you do not use firewalld
[DEFAULT]
banaction = firewallcmd-rich-rules
banaction_allports = firewallcmd-rich-rules

Crearea unui fișier de suprascriere pentru jail-ul SSH
Creează un fișier local dedicat pentru jail-ul SSH. Comanda sudo tee scrie în directorul Fail2Ban deținut de root, în timp ce > /dev/null împiedică terminalul să redea conținutul fișierului a doua oară.

printf '%s\n' \
'[DEFAULT]' \
'ignoreip = 127.0.0.1/8 ::1' \
'bantime = 10m' \
'findtime = 10m' \
'maxretry = 5' \
'' \
'[sshd]' \
'enabled = true' \
'backend = systemd' \
'port = ssh' \
'maxretry = 3' \
'bantime = 1h' \
'findtime = 10m' | sudo tee /etc/fail2ban/jail.d/sshd.local > /dev/null

Acest fișier activează doar jail-ul SSH, citește evenimentele de autentificare SSH din jurnalul systemd și banează o adresă timp de o oră după trei încercări eșuate într-o fereastră de zece minute.

Adaugă adresa IP de administrare curentă în ignoreip înainte de a reduce limitele de reîncercare pe un server la distanță. Menținerea propriului IP de încredere în afara logicii de ban ajută la prevenirea blocării accidentale în timpul testării.

Validarea și repornirea Fail2Ban
Testează configurația înainte de repornirea serviciului:

sudo fail2ban-client -t
OK: configuration test is successful

Repornește Fail2Ban și confirmă că jail-ul SSH este activ:

sudo systemctl restart fail2ban
sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Inspectează detaliile jail-ului SSH:

sudo fail2ban-client status sshd

Rezultatul relevant pe Rocky Linux 10 și 9 include potrivirea jurnalului folosită de filtrul SSH împachetat:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd + _COMM=sshd-session
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Rocky Linux 8 afișează de obicei _SYSTEMD_UNIT=sshd.service + _COMM=sshd în schimb. Ambele forme sunt valori implicite valide ale pachetului pentru versiunea lor.

Ajustarea setărilor de ban Fail2Ban
Primul jail SSH este intenționat conservator. Ajustează următoarele valori în /etc/fail2ban/jail.d/sshd.local după ce confirmi că serviciul captează evenimentele corecte.

Setarea duratelor fixe de ban

Valoarea bantime acceptă unități de timp ușor de citit. Aceste exemple arată formatele comune:

ini
bantime = 10m
bantime = 1h
bantime = 1d
bantime = -1

Valoarea finală, -1, creează un ban permanent până când debanezi manual adresa IP. Folosește banurile permanente cu atenție pe serviciile unde utilizatorii legitimi pot greși parola sau schimba rețelele.

Creșterea timpilor de ban pentru agresorii repeți
Banurile incrementale fac abuzul repetat mai costisitor fără a transforma fiecare primă greșeală într-o întrerupere lungă:

ini
bantime.increment = true
bantime.multipliers = 1 2 4 8 16 32 64

Cu bantime = 10m, acești multiplicatori banează același IP pentru 10 minute, apoi 20 de minute, apoi 40 de minute și așa mai departe când IP-ul continuă să revină.

Permiterea adreselor IP de încredere
Adaugă rețele de administrare de încredere sau adrese de monitorizare în ignoreip astfel încât Fail2Ban să nu le blocheze niciodată:

ini
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.50

Exemplul menține localhost, loopback IPv6, o rețea LAN privată și o adresă publică din gama de documentare în afara banurilor Fail2Ban. Înlocuiește adresa publică cu adresa IP statică reală de administrare dacă ai una.

După ajustare, validează și reîncarcă configurația fără a șterge banurile curente:

sudo fail2ban-client -t
sudo fail2ban-client reload

Adăugarea jail-urilor pentru server web sau mail
Fail2Ban include filtre pentru servicii web și mail comune, dar acele jail-uri ar trebui activate doar pe serverele care rulează efectiv serviciul corespunzător și scriu jurnalele așteptate. Activarea unui jail fără sursa sa de jurnal produce erori de pornire în loc de protecție.

Protejarea autentificărilor Apache
Folosește jail-urile Apache doar pe sistemele care au jurnale Apache sub /var/log/httpd/:

ini
[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 3
bantime = 1h

[apache-badbots]
enabled = true
port = http,https
logpath = %(apache_access_log)s
maxretry = 2
bantime = 48h

Protejarea autentificărilor Nginx și a căutărilor de boți
Dacă rulezi Nginx pe Rocky Linux, activează jail-urile Nginx doar după ce există jurnalele de acces și erori relevante:

ini
[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
maxretry = 3
bantime = 1h

[nginx-botsearch]
enabled = true
port = http,https
logpath = %(nginx_access_log)s
maxretry = 2
bantime = 2h

Protejarea autentificării Postfix sau Dovecot
Pentru serverele de mail, menține numele jail-urilor aliniate cu definițiile împachetate și folosește backend-ul systemd când serviciul înregistrează în jurnal:

ini
[postfix]
enabled = true
backend = systemd
port = smtp,submission,submissions
maxretry = 3
bantime = 1h

[dovecot]
enabled = true
backend = systemd
port = imap,imaps,pop3,pop3s
maxretry = 5
bantime = 1h

Validează configurația după adăugarea oricărui jail de serviciu:

sudo fail2ban-client -t
sudo systemctl restart fail2ban

Verificarea stării Fail2Ban și gestionarea banurilor
Comanda fail2ban-client este instrumentul normal de control pentru starea jail-ului, banuri manuale, debanuri și reîncărcări.

Listarea jail-urilor active

Afișează toate jail-urile active:

sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Afișarea IP-urilor banate pentru un jail
Vizualizează banurile curente și totale pentru SSH:

sudo fail2ban-client status sshd

Linia Banned IP list este goală până când jail-ul blochează o adresă.

Banarea și debanarea unui singur IP
Banează manual o adresă de test din gama de documentare în jail-ul SSH:

sudo fail2ban-client set sshd banip 203.0.113.7
1

1 înseamnă că Fail2Ban a acceptat o acțiune de ban. Elimină banul de test după aceea:

sudo fail2ban-client set sshd unbanip 203.0.113.7

Debanarea tuturor banurilor active
Folosește comanda globală de unban doar când intenționezi să ștergi fiecare jail:

sudo fail2ban-client unban --all

Pentru recuperarea normală a contului, debanează singura adresă afectată în loc să ștergi toate banurile active.

Reîncărcarea Fail2Ban fără ștergerea banurilor
Reîncarcă după modificări minore ale jail-ului când dorești să păstrezi starea curentă a banurilor:

sudo fail2ban-client reload

Folosește systemctl restart fail2ban pentru modificări la nivel de serviciu sau recuperare dintr-o stare de eșec; folosește fail2ban-client reload pentru editări normale ale jail-ului.

Verificarea blocării firewalld
Rocky Linux folosește firewalld implicit, iar pachetul EPEL Fail2Ban se integrează cu acesta prin firewallcmd-rich-rules. Un ban manual rapid dovedește că Fail2Ban poate crea regula de firewall așteptată.

Verifică că firewalld rulează:

sudo firewall-cmd --state
running

Banează un IP de test și listează regulile rich:

sudo fail2ban-client set sshd banip 203.0.113.7
sudo firewall-cmd --list-rich-rules

Rezultatul relevant include regula rich creată de Fail2Ban:

rule family="ipv4" source address="203.0.113.7" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"

Elimină banul de test:

sudo fail2ban-client set sshd unbanip 203.0.113.7

Revizuiește zona firewalld activă dacă un ban apare în Fail2Ban dar traficul ajunge totuși la serviciu:

sudo firewall-cmd --list-all

Rezultatul zonei este specific gazdei. Confirmă că serviciul SSH sau portul SSH personalizat este permis pentru accesul normal, apoi verifică dacă regulile rich Fail2Ban apar după un ban.

Monitorizarea jurnalelor Fail2Ban
Fail2Ban scrie propriul jurnal de activitate în /var/log/fail2ban.log. Folosește-l pentru a revizui pornirile serviciului, evenimentele de ban, evenimentele de unban și erorile de filtru. Exemplele de comandă tail sunt utile când ai nevoie de mai multe tipare de urmărire a jurnalului.

Afișează ultimele 20 de linii de jurnal:

sudo tail -n 20 /var/log/fail2ban.log

Urmărește jurnalul până apeși Ctrl+C:

sudo tail -f /var/log/fail2ban.log

Caută evenimente de ban, un singur IP sau înregistrări din jail-ul SSH cu exemple de comandă grep:

sudo grep "Ban" /var/log/fail2ban.log
sudo grep "203.0.113.7" /var/log/fail2ban.log
sudo grep "sshd" /var/log/fail2ban.log

Configurarea alertelor opționale prin email Fail2Ban poate trimite mail când au loc banuri, dar livrarea depinde de un agent local de transfer mail funcțional sau de un releu. Instalarea pachetului include acțiunea sendmail Fail2Ban; această secțiune adaugă Postfix, comanda mail și căutări whois pentru acțiunea de mail mai bogată.

Instalează și pornește Postfix, apoi adaugă s-nail pentru comanda mail și whois pentru rapoartele expeditorului:

sudo dnf install -y postfix s-nail whois
sudo systemctl enable --now postfix

Rocky Linux 10 și 9 furnizează s-nail din AppStream. Rocky Linux 8 furnizează s-nail prin EPEL, care este deja activat pentru pachetul Fail2Ban.

Adaugă aceste setări de notificare la blocul [DEFAULT] existent din suprascrierea locală Fail2Ban. Dacă folosești un fișier separat la nivel de site, cum ar fi /etc/fail2ban/jail.local, include antetul secțiunii o singură dată.

ini
[DEFAULT]
destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s

Acțiunea action_mwl trimite un mesaj cu informații whois și liniile de jurnal relevante. Validează și reîncarcă Fail2Ban astfel încât acțiunea de notificare să fie activă:

sudo fail2ban-client -t
sudo fail2ban-client reload

Trimite un mesaj de test local pentru a confirma că calea de mail funcționează înainte de a aștepta un ban real:echo "Test email from Fail2Ban server" | mail -s "Fail2Ban Test" admin@example.c

Depanarea Fail2Ban pe Rocky Linux
Folosește aceste verificări când pachetul se instalează dar jail-urile nu pornesc, banurile nu apar sau firewall-ul nu blochează traficul.

Clientul Fail2Ban nu poate ajunge la socket
Dacă rulezi o comandă client imediat după pornirea serviciului, poți vedea această eroare înainte ca socket-ul să fie pregătit:

ERROR Failed to access socket path: /var/run/fail2ban/fail2ban.sock. Is fail2ban running?

Așteaptă un moment, apoi verifică din nou serviciul și socket-ul:

systemctl is-active fail2ban
sudo fail2ban-client ping

Dacă ping-ul tot eșuează, inspectează jurnalul unității înainte de repornire:

sudo journalctl -u fail2ban -n 30 --no-pager
sudo systemctl restart fail2ban

Jail-ul SSH nu este listat

Dacă sudo fail2ban-client status nu listează sshd, validează configurația și verifică jurnalele Fail2Ban:

sudo fail2ban-client -t
sudo journalctl -u fail2ban -n 30 --no-pager

Corectează fișierul raportat, numele jail-ului sau opțiunea, apoi repornește Fail2Ban și verifică din nou lista de jail-uri:

sudo systemctl restart fail2ban
sudo fail2ban-client status

Filtrul nu potrivește nimic

Când un jail este activ dar nu banează niciodată, testează filtrul SSH față de o formă de jurnal de autentificare eșuată cunoscut:

printf 'May 16 12:00:00 host sshd[123]: Failed password for invalid user test from 203.0.113.8 port 4242 ssh2\n' > /tmp/sshd-filter-test.log
fail2ban-regex -v /tmp/sshd-filter-test.log /etc/fail2ban/filter.d/sshd.conf

Rezultatul relevant ar trebui să arate IP-ul de documentare ca gazdă potrivită:

Failregex: 1 total
|      203.0.113.8  Sat May 16 12:00:00 2026
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
rm -f /tmp/sshd-filter-test.log

Pentru date reale din jurnal, copiază valoarea Journal matches din sudo fail2ban-client status sshd și transmite-o cu -m:

sudo fail2ban-regex -v -m "_SYSTEMD_UNIT=sshd.service + _COMM=sshd + _COMM=sshd-session" systemd-journal /etc/fail2ban/filter.d/sshd.conf

Rocky Linux 8 omite de obicei + _COMM=sshd-session din potrivirea jurnalului. Folosește valoarea afișată de starea jail-ului în loc să forțezi exemplul Rocky Linux 10 sau 9.

Jail-ul web raportează fișiere de jurnal lipsă

Un jail web eșuează când calea de jurnal configurată nu există. Verifică jurnalul serviciului și directorul așteptat:

sudo journalctl -u fail2ban -n 30 --no-pager
sudo ls -ld /var/log/httpd /var/log/nginx 2>/dev/null

Instalează sau pornește mai întâi serverul web corespunzător, sau dezactivează jail-ul până când există fișierele sale de jurnal. Pentru Nginx, confirmă sursa pachetului activ și calea jurnalului înainte de a activa jail-ul.

Banurile nu blochează traficul
Dacă Fail2Ban afișează un IP banat dar conexiunea funcționează totuși, verifică mai întâi firewalld:

sudo systemctl is-active firewalld
sudo firewall-cmd --list-rich-rules

Pornește firewalld dacă este inactiv, apoi repornește Fail2Ban astfel încât acțiunea firewalld să se reconecteze curat:

sudo systemctl enable --now firewalld
sudo systemctl restart fail2ban

Eliminarea Fail2Ban din Rocky Linux
Elimină Fail2Ban cu DNF când nu mai ai nevoie de banuri automate. Aceasta oprește și elimină pachetele de servicii lăsând EPEL intact pentru alte pachete care pot depinde de el.

sudo systemctl disable --now fail2ban
sudo dnf remove fail2ban fail2ban-server fail2ban-firewalld fail2ban-sendmail fail2ban-selinux

Verifică că pachetul principal a dispărut:

if rpm -q fail2ban >/dev/null 2>&1; then
    echo "Fail2Ban este încă instalat"
else
    echo "Fail2Ban nu este instalat"
fi
Fail2Ban nu este instalat

Dacă ai adăugat alerte opționale prin email doar pentru Fail2Ban, elimină acele pachete mail separat. Păstrează-le când Postfix gestionează deja alt mail de sistem.

sudo systemctl disable --now postfix

sudo dnf remove postfix s-nail whois

Elimină EPEL doar când Fail2Ban și orice pachete mail opționale exclusiv EPEL au fost singurul motiv pentru care l-ai activat:

sudo dnf remove epel-release
dnf repolist --enabled | grep '^epel' || echo "EPEL nu este activat"

Comenzile de curățare următoare șterg permanent configurația Fail2Ban, baza de date și fișierele de jurnal, inclusiv fișierele personalizate de jail din /etc/fail2ban/. Fă o copie de rezervă a oricărui fișier de care ai putea avea nevoie înainte de a elimina aceste căi.

sudo rm -rf /etc/fail2ban /var/lib/fail2ban
sudo rm -f /var/log/fail2ban.log*

Confirmă că căile locale lipsesc:

test ! -e /etc/fail2ban && test ! -e /var/lib/fail2ban && echo "Configurația Fail2Ban și căile bazei de date sunt eliminate"

Tip solutie

Permanent

Voteaza

(1 din 1 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?