Röviden: A Fail2ban naplófájlokat olvas, és a tűzfalban tiltja azokat a címeket, amelyek egy időablakon belül túl gyakran feltűnnek. Az Nginxhez és az Apache-hoz kész jaileket hoz, mint az nginx-botsearch vagy az apache-noscript; a saját szűrőket a fail2ban-regex-szel tesztelje. A beállítások a jail.local-ba valók, a saját címei az ignoreip-be, a visszaeső elkövetőket a recidive-jail fogja meg. Az egyedi célzott támadások ellen a Fail2ban nem segít, a tömeges vizsgálatok ellen igen.
Amikor a naplók tele vannak keresőkkel
Aki ezekben a napokban megnézi webszervereinek hozzáférési naplóit, gyakran tele találja olyan útvonalakra irányuló kérésekkel, amelyek nem is léteznek: régi adminisztrációs felületek, tesztfájlok, más termékek ismert gyengeségei. A PHP2Shellhez hozzájön a sebezhető szerverek célzott keresése: a Cloudflare és a Patchstack támadási kísérletekről számolt be, a Unit 42 több mint 22,6 millió kitett, potenciálisan sebezhető példányt számolt.
A Fail2ban bevált eszköz ez ellen a tömeg ellen. Naplófájlokat olvas, szűrőkkel felismeri a feltűnő bejegyzéseket, és a feladó címét meghatározott időre tiltja a tűzfalban. Ez tehermentesíti a szervert, csökkenti a naplózaj mennyiségét, és fáradságosabbá teszi az egy forrásból érkező módszeres próbálkozást.
Amit a Fail2ban nem tud, az ugyanolyan fontos: egyetlen kérést, amely kihasznál egy rést, nem akadályoz meg. A PHP2Shell ellen csak a PHP-frissítés segít. Hogyan zajlanak az automatizált támadások, azt a Tömeges vizsgálatok javítatlan PHP után írja le.
Fail2ban Nginxhez és Apache-hoz: a mellékelt jailek
Egy jail összeköt egy szűrőt egy naplófájllal és egy tiltási művelettel. A mellékelt jail.conf már tartalmaz jaileket webszerverekhez. Alapértelmezetten ki vannak kapcsolva, és egyenként kell aktiválni őket.
| Jail | Webszerver | Mit ismer fel |
|---|---|---|
nginx-http-auth |
Nginx | sikertelen HTTP Basic bejelentkezések |
nginx-limit-req |
Nginx | kérések, amelyek túllépik az Nginx rate-limitjét |
nginx-botsearch |
Nginx | tipikus, nem létező útvonalak keresése |
nginx-bad-request |
Nginx | hibás kérések |
apache-auth |
Apache | sikertelen bejelentkezések |
apache-badbots |
Apache | ismert káros botazonosítók |
apache-noscript |
Apache | nem létező szkriptek meghívásai |
apache-overflows |
Apache | túl hosszú kérések |
apache-botsearch |
Apache | tipikus, nem létező útvonalak keresése |
php-url-fopen |
mindkettő | az URL-beágyazási kísérletek bizonyos mintái |
recidive |
mindkettő | címek, amelyeket a Fail2ban ismételten tiltott |
A mellékelt konfiguráció alapértékei inkább enyhék: 10 perces tiltás 10 percen belüli 5 találat után. A sok vizsgálati forgalommal rendelkező webszervereknél megéri egy hosszabb tiltás és az ismétlésekre növekvő szorzó.
Az alapkonfiguráció a jail.local-ban
A jail.conf maga közli, hogy nem szabad módosítani, mert a frissítések kicserélik. A saját értékek a /etc/fail2ban/jail.local fájlba valók. A következő, Nginxhez készült példa értelmes alapértékeket állít be, és aktiválja a megfelelő jaileket:
# /etc/fail2ban/jail.local
[DEFAULT]
# Saját rögzített címek beírása (a példacímet cserélje le)
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
Az Apache-hoz ehelyett aktiválja például az apache-auth, az apache-noscript és az apache-botsearch jaileket. A naplóútvonalakat a Fail2ban disztribúciónként hozza; ha az Öné eltér, állítsa be a logpath értékét az adott jailben. Ha a rendszere a naplókat csak a journalon keresztül olvassa, a backend = systemd segít.
Saját szűrő a PHP-fájlokra irányuló tömeges kérésekhez
A jelenlegi helyzet tipikus mintája: rövid idő alatt sok kérés olyan PHP-fájlokra, amelyek nem léteznek. Egy saját szűrő ezt a 404-es állapotkódról ismeri fel. Csak azt írja le, ami az Ön saját naplójában áll:
# /etc/fail2ban/filter.d/nginx-php-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) [^"]*\.php[^"]*" 404
ignoreregex =
# Kiegészítés a /etc/fail2ban/jail.local fájlban
[nginx-php-404]
enabled = true
port = http,https
filter = nginx-php-404
logpath = /var/log/nginx/access.log
maxretry = 20
findtime = 1m
bantime = 1h
A szűrő aktiválása előtt ellenőrizze a valódi naplóval szemben. Így látja, hány sort talál el, és vannak-e köztük jogos hozzáférések:
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
# Egy véletlenül tiltott cím felszabadítása
sudo fail2ban-client set nginx-php-404 unbanip 203.0.113.25
A küszöböt válassza nagyvonalúan. Egy elavult linkeket feldolgozó crawler vagy egy monitoring-szolgáltatás nem kerülhet a tiltásba.
A leggyakoribb csapdák
A Fail2ban gyorsan telepíthető, de könnyen rosszul alkalmazható. Ezeket a pontokat éles használat előtt ellenőrizze:
- Önkizárás: Az irodai, VPN- és monitoring-címek az
ignoreip-be valók, mielőtt a jailek aktívvá válnak. - Előtte álló szolgáltatások: CDN vagy load balancer mögött a Fail2ban módosítás nélkül csak azok címeit látja. Bővebben az Admin-bejelentkezések védelme brute force ellen útmutatóban.
- Naplórotáció: A naplófájl váltása után a Fail2bannek az új fájlt kell olvasnia. Az első rotáció után ellenőrizze, hogy a jailek tovább számolnak-e találatokat.
- Együttműködés a tűzfallal: A Fail2ban a tiltásokat a tűzfalba írja be. Aki a tűzfalát a szabályrendszer teljes újratöltésével kezeli, ezeket a bejegyzéseket közben törölheti. Hogyan építse fel magát a tűzfalat, azt a Tűzfal webszerverekhez: csak a szükséges portokat nyissa meg írja le.
- IPv6: A támadások IPv6-on keresztül is érkeznek. Ellenőrizze, hogy a tiltási művelete mindkét protokollt lefedi-e.
Rendszeresen értékelje ki a tiltási listákat. Ha bizonyos hálózatokból vagy bizonyos útvonalakra felhalmozódnak a tiltások, az célzott keresésre utal, és ok arra, hogy az érintett alkalmazást közelebbről megvizsgálja.
Összegzés: eszköz a tömeg ellen, nem mindenre
A Fail2ban gyorsan beállítható, és leveszi a webszerverekről az állandó ostrom egy részét. A mellékelt jailek a tipikus mintákat lefedik, a saját szűrők a fail2ban-regex-szel veszélytelenül tesztelhetők valódi naplókon, a recidive-jail pedig gondoskodik arról, hogy a makacs források hosszabb ideig kint maradjanak.
Ne becsülje túl. A Fail2ban az ismétlésre reagál, nem az első találatra, és csak azt látja, ami a naplókban áll. Egy olyan rés ellen, mint a PHP2Shell, egyedül a frissítés segít, a sok címről érkező elosztott támadások ellen a Fail2ban alig. Értékét egy réteg a több közül fejti ki: egy karcsú tűzfal, egy keményített webszerver-konfiguráció, a kétfaktoros bejelentkezés és egy olyan felügyelet mellett, amely a feltűnéseket nem csak tiltja, hanem jelenti is.
Hogyan segít konkrétan a PHP SOS?
- Naplók kiértékelése: Megnézzük, milyen minták fordulnak elő a hozzáférési naplóiban, és kiválasztjuk a megfelelő jaileket.
- Beállítás és tesztelés: Saját szűrőkkel beállítjuk a Fail2bant, minden szűrőt valódi naplókon tesztelünk, és a rögzített címeit kivételként beírjuk.
- Az együttműködés tisztázása: A CDN-t, a load balancert, a tűzfalat és a naplórotációt úgy hangoljuk össze, hogy a tiltások a helyes címeket találják el.
- Megfigyelés: A biztonsági monitoring keretében folyamatosan kiértékeljük a tiltásokat és a feltűnéseket.
Gyakori kérdések
Véd a Fail2ban a PHP2Shell ellen?
Nem. A Fail2ban csak azután reagál, hogy egy cím többször feltűnt a naplókban. Egyetlen sikeres támadást ez nem akadályoz meg. A Fail2ban viszont csökkenti a keresők okozta terhelést, és költségesebbé teszi az ugyanabból a forrásból érkező ismételt kísérleteket.
Miért ne módosítsam közvetlenül a jail.conf fájlt?
A fájlt a csomagfrissítések kicserélik, és ezt maga is közli. A saját beállítások egy jail.local fájlba vagy a jail.d alatti fájlokba valók. Ott célzottan felülírják az alapértékeket.
Mi a recidive-jail?
Egy jail, amely magának a Fail2bannek a naplóját értékeli ki. Aki újra és újra tiltásba kerül, lényegesen hosszabb tiltást kap. A mellékelt konfigurációban ez egy hét.
Működik a Fail2ban a Cloudflare vagy egy load balancer mögött?
Csak kiegészítő konfigurációval. Anélkül a naplókban az előtte álló szolgáltatás címe áll, és egy tiltás minden látogatót érintene. A webszervernek ilyenkor át kell vennie a látogató valódi címét, a tiltásokat pedig jobb az előtte álló szolgáltatásnál beállítani.