# A Fail2ban beállítása webszerverekhez

> Fail2ban Nginxhez és Apache-hoz: jailek aktiválása, saját szűrők tesztelése a fail2ban-regex-szel, visszaeső elkövetők tiltása, önkizárás elkerülése.

Forrás: https://phpsos.de/hu/blog/fail2ban-fuer-webserver/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**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](https://phpsos.de/hu/blog/automatisierte-massenscans/) í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:

```ini
# /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:

```ini
# /etc/fail2ban/filter.d/nginx-php-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) [^"]*\.php[^"]*" 404
ignoreregex =
```

```ini
# 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:

```bash
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:

1. **Önkizárás:** Az irodai, VPN- és monitoring-címek az `ignoreip`-be valók, mielőtt a jailek aktívvá válnak.
2. **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](https://phpsos.de/hu/ratgeber/brute-force-login-schutz/) útmutatóban.
3. **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.
4. **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](https://phpsos.de/hu/blog/firewall-fuer-webserver/) írja le.
5. **IPv6:** A támadások IPv6-on keresztül is érkeznek. Ellenőrizze, hogy a tiltási művelete mindkét protokollt lefedi-e.

> **Tipp:**
> 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](https://phpsos.de/hu/leistungen/security-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.

## Források

- [Fail2ban: a mellékelt jail.conf](https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf)
- [BSI IT-Grundschutz (a német Szövetségi Információbiztonsági Hivatal módszertana)](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
