Situația actuală: PHP2Shell. Două vulnerabilități critice PHP (CVSS 9.2) permit cod malițios fără autentificare. Patchuri din 21.10.2026.Ce este de făcut acum →

Configurarea Fail2ban pentru servere web

Fail2ban blochează adresele care apar repetat în jurnale. Pentru servere web vine cu filtre gata făcute, iar cu câteva rânduri se adaugă filtre proprii. Cum îl configurați fără a vă bloca pe dumneavoastră sau pe clienți.

Stadiu 6 min de cititSecurizare și configurare

Pe scurt: Fail2ban citește fișiere de jurnal și blochează în firewall adresele care apar prea des într-un interval de timp. Pentru Nginx și Apache vine cu jail-uri gata făcute, precum nginx-botsearch sau apache-noscript; filtrele proprii le testați cu fail2ban-regex. Setările aparțin în jail.local, adresele dumneavoastră în ignoreip, iar recidiviștii sunt prinși de jail-ul recidive. Împotriva unor atacuri individuale țintite Fail2ban nu ajută, împotriva scanărilor în masă da.

Când jurnalele sunt pline de scannere

Cine privește în aceste zile jurnalele de acces ale serverelor sale web le găsește adesea pline de cereri către căi care nu există deloc: interfețe de administrare vechi, fișiere de test, vulnerabilități cunoscute ale altor produse. Într-o situație ca PHP2Shell se adaugă căutarea țintită de servere vulnerabile: Cloudflare și Patchstack au raportat tentative de atac, iar Unit 42 a numărat mai mult de 22,6 milioane de instanțe expuse, potențial vulnerabile.

Fail2ban este o unealtă verificată împotriva acestei mase. Citește fișiere de jurnal, recunoaște cu filtre intrările suspecte și blochează adresa expeditorului, pentru un timp stabilit, în firewall. Aceasta ușurează serverul, reduce zgomotul din jurnale și face mai anevoioasă încercarea sistematică dintr-o singură sursă.

Ce nu poate face Fail2ban este la fel de important: o singură cerere care exploatează o vulnerabilitate nu este împiedicată. Împotriva PHP2Shell ajută doar actualizarea PHP. Cum decurg atacurile automatizate descrie Scanări în masă după PHP nepatchuit.

Fail2ban pentru Nginx și Apache: jail-urile livrate

Un jail leagă un filtru de un fișier de jurnal și de o acțiune de blocare. jail.conf livrat conține deja jail-uri pentru servere web. Ele sunt implicit dezactivate și se activează individual.

Jail Server web Recunoaște
nginx-http-auth Nginx autentificări HTTP Basic eșuate
nginx-limit-req Nginx cereri care depășesc rate-limit-ul Nginx
nginx-botsearch Nginx căutarea unor căi tipice, inexistente
nginx-bad-request Nginx cereri defectuoase
apache-auth Apache autentificări eșuate
apache-badbots Apache identificatori cunoscuți de boți dăunători
apache-noscript Apache apelări de scripturi inexistente
apache-overflows Apache cereri prea lungi
apache-botsearch Apache căutarea unor căi tipice, inexistente
php-url-fopen ambele anumite tipare de încercări de includere de URL
recidive ambele adrese pe care Fail2ban le-a blocat în mod repetat

Valorile implicite ale configurației livrate sunt mai degrabă blânde: blocaj de 10 minute după 5 apariții în 10 minute. Pentru serverele web cu mult trafic de scanare merită un blocaj mai lung și un factor crescător pentru repetări.

Configurația de bază în jail.local

jail.conf spune el însuși că nu trebuie modificat, pentru că actualizările îl înlocuiesc. Valorile proprii aparțin în /etc/fail2ban/jail.local. Exemplul următor pentru Nginx stabilește valori implicite rezonabile și activează jail-urile potrivite:

# /etc/fail2ban/jail.local
[DEFAULT]
# Introduceți propriile adrese fixe (înlocuiți adresa exemplu)
ignoreip = 127.0.0.1/8 ::1 203.0.113.10
bantime  = 1h
findtime = 10m
maxretry = 5
bantime.increment = true

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true

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

Pentru Apache activați în schimb, de exemplu, apache-auth, apache-noscript și apache-botsearch. Căile jurnalelor le aduce Fail2ban pentru fiecare distribuție; dacă căile dumneavoastră diferă, stabiliți logpath în jail-ul respectiv. Dacă sistemul dumneavoastră citește jurnalele doar prin journal, ajută backend = systemd.

Un filtru propriu pentru cereri în masă către fișiere PHP

Un tipar tipic în situația actuală sunt multe cereri într-un timp scurt către fișiere PHP care nu există. Un filtru propriu recunoaște aceasta după codul de stare 404. El descrie doar ce se află în propriul jurnal:

# /etc/fail2ban/filter.d/nginx-php-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) [^"]*\.php[^"]*" 404
ignoreregex =
# Completare în /etc/fail2ban/jail.local
[nginx-php-404]
enabled  = true
port     = http,https
filter   = nginx-php-404
logpath  = /var/log/nginx/access.log
maxretry = 20
findtime = 1m
bantime  = 1h

Înainte să activați filtrul, verificați-l pe jurnalul real. Astfel vedeți câte rânduri prinde și dacă între ele se află accesări legitime:

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-php-404.conf
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status nginx-php-404
# Deblocarea unei adrese blocate din greșeală
sudo fail2ban-client set nginx-php-404 unbanip 203.0.113.25

Alegeți pragul cu generozitate. Un crawler care parcurge linkuri depășite sau un serviciu de monitorizare nu are voie să ajungă în blocaj.

Cele mai frecvente capcane

Fail2ban se instalează repede, dar se folosește ușor greșit. Verificați aceste puncte înainte de utilizarea în producție:

  1. Autoblocarea: Adresele de birou, VPN și monitorizare aparțin în ignoreip, înainte ca jail-urile să devină active.
  2. Servicii din față: În spatele unui CDN sau load balancer, Fail2ban vede fără adaptare doar adresele acestora. Mai multe în ghidul Protejarea autentificărilor de administrator împotriva brute force.
  3. Rotația jurnalelor: După schimbarea fișierului de jurnal, Fail2ban trebuie să citească fișierul nou. Verificați după prima rotație dacă jail-urile numără în continuare apariții.
  4. Colaborarea cu firewall-ul: Fail2ban introduce blocajele în firewall. Cine își administrează firewall-ul cu o reîncărcare completă a setului de reguli poate șterge aceste intrări. Cum construiți firewall-ul însuși se află la Firewall pentru servere web: deschideți doar porturile necesare.
  5. IPv6: Atacurile vin și prin IPv6. Verificați dacă acțiunea dumneavoastră de blocare acoperă ambele protocoale.
Sfat

Evaluați regulat listele de blocaje. Dacă blocajele se acumulează din anumite rețele sau către anumite căi, este un indiciu de căutare țintită și un motiv de a privi mai atent aplicația afectată.

Concluzie: o unealtă împotriva maselor, nu împotriva a tot

Fail2ban se configurează repede și scutește serverele web de o parte din bombardamentul permanent. Jail-urile livrate acoperă tipare tipice, filtrele proprii pot fi testate fără pericol cu fail2ban-regex pe jurnale reale, iar jail-ul recidive face ca sursele încăpățânate să rămână mai mult timp afară.

Nu ar trebui să-l supraestimați. Fail2ban reacționează la repetare, nu la prima apariție, și vede doar ce se află în jurnale. Împotriva unei vulnerabilități ca PHP2Shell ajută doar actualizarea, iar împotriva atacurilor distribuite din multe adrese Fail2ban ajută puțin. Își dezvăluie valoarea ca strat printre mai multe: alături de un firewall suplu, o configurație întărită a serverului web, autentificare în doi factori și o monitorizare care nu doar blochează anomaliile, ci și le raportează.

Cum ajută PHP SOS concret?

  • Evaluarea jurnalelor: Analizăm ce tipare apar în jurnalele dumneavoastră de acces și alegem jail-urile potrivite.
  • Configurare și testare: Configurăm Fail2ban cu filtre proprii, testăm fiecare filtru pe jurnale reale și introducem adresele dumneavoastră fixe ca excepție.
  • Clarificarea colaborării: Coordonăm CDN, load balancer, firewall și rotația jurnalelor astfel încât blocajele să lovească adresele corecte.
  • Observare: În cadrul monitorizării de securitate evaluăm continuu blocajele și anomaliile.

Întrebări frecvente

Mă protejează Fail2ban de PHP2Shell?

Nu. Fail2ban reacționează abia după ce o adresă a apărut de mai multe ori în jurnale. Un singur atac reușit nu este astfel împiedicat. Fail2ban reduce însă încărcarea provocată de scannere și face mai costisitoare încercările repetate din aceeași sursă.

De ce să nu modific direct jail.conf?

Fișierul este înlocuit la actualizările de pachete și o spune el însuși. Setările proprii aparțin unui jail.local sau unor fișiere din jail.d. Acolo suprascriu țintit valorile implicite.

Ce este jail-ul recidive?

Un jail care evaluează jurnalul propriu al Fail2ban. Cine este blocat din nou și din nou primește un blocaj mult mai lung. În configurația livrată, acesta este de o săptămână.

Funcționează Fail2ban în spatele Cloudflare sau al unui load balancer?

Doar cu configurație suplimentară. Fără ea, în jurnale apare adresa serviciului din față, iar un blocaj ar lovi toți vizitatorii. Serverul web trebuie atunci să preia adresa reală a vizitatorului, iar blocajele se stabilesc mai bine la serviciul din față.

Surse

Contact imediat

Fiecare oră contează. Scrieți-ne acum.

Descrieți pe scurt sistemul, versiunea PHP și ce ați observat. Ne vom face auziți, clarificăm situația și lucrăm la distanță până când incidentul este încheiat și documentat.

Ajutor imediat