# Fail2ban veebiserverite jaoks seadistamine

> Fail2ban Nginxile ja Apache'ile: aktiveerige sobivad jail'id, testige oma filtreid käsuga fail2ban-regex, blokeerige kordajad ja vältige enda väljalukustamist.

Allikas: https://phpsos.de/et/blog/fail2ban-fuer-webserver/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** Fail2ban loeb logifaile ja blokeerib tulemüüris aadressid, mis ajaaknas liiga sageli silma jäävad. Nginxile ja Apache'ile on kaasas valmis jail'id, nagu `nginx-botsearch` või `apache-noscript`; oma filtreid testite käsuga `fail2ban-regex`. Sätted kuuluvad faili `jail.local`, teie enda aadressid sätte `ignoreip` alla, kordajaid püüab `recidive`-jail. Üksikute sihipäraste rünnakute vastu Fail2ban ei aita, masskaskimiste vastu aitab.

## Kui logid on skannereid täis

Kes vaatab praegu oma veebiserverite pöördusprotokolle, leiab need sageli täis päringuid teedele, mida üldse ei ole: vanad haldusliidesed, testifailid, teiste toodete tuntud nõrkused. PHP2Shelli-laadses olukorras lisandub haavatavate serverite sihipärane otsing: Cloudflare ja Patchstack teatasid ründekatsetest, Unit 42 luges üle 22,6 miljoni avatud, potentsiaalselt haavatava instantsi.

Fail2ban on selle massi vastu end tõestanud tööriist. See loeb logifaile, tuvastab filtritega silmatorkavad kirjed ja blokeerib saatja aadressi kindlaks ajaks tulemüüris. See vabastab serverit, vähendab logimüra ja teeb süstemaatilise läbiproovimise ühest allikast vaevalisemaks.

Mida Fail2ban ei suuda, on sama oluline: üksikut päringut, mis auku ära kasutab, ei takistata. PHP2Shelli vastu aitab ainult PHP uuendus. Kuidas automatiseeritud rünnakud kulgevad, kirjeldab [Massiskannimised paigata PHP vastu](https://phpsos.de/et/blog/automatisierte-massenscans/).

## Fail2ban Nginxile ja Apache'ile: kaasasolevad jail'id

Jail ühendab filtri logifaili ja blokeerimistoiminguga. Kaasasolev `jail.conf` sisaldab juba veebiserverite jail'e. Need on vaikimisi välja lülitatud ja aktiveeritakse ükshaaval.

| Jail | Veebiserver | Tuvastab |
|---|---|---|
| `nginx-http-auth` | Nginx | ebaõnnestunud HTTP Basic sisselogimised |
| `nginx-limit-req` | Nginx | päringud, mis ületavad Nginxi rate-limit'i |
| `nginx-botsearch` | Nginx | tüüpiliste olematute teede otsing |
| `nginx-bad-request` | Nginx | vigased päringud |
| `apache-auth` | Apache | ebaõnnestunud sisselogimised |
| `apache-badbots` | Apache | tuntud kahjulikud robotitunnused |
| `apache-noscript` | Apache | olematute skriptide avamised |
| `apache-overflows` | Apache | ülipikad päringud |
| `apache-botsearch` | Apache | tüüpiliste olematute teede otsing |
| `php-url-fopen` | mõlemad | URL-i sissetoomiskatsete teatud mustrid |
| `recidive` | mõlemad | aadressid, mille Fail2ban on korduvalt blokeerinud |

Kaasasoleva konfiguratsiooni vaikeväärtused on pigem leebed: blokeering 10 minutiks pärast 5 tabamust 10 minuti jooksul. Palju skannimisliiklust saavate veebiserverite jaoks tasub pikem blokeering ja kasvav tegur kordamiste jaoks.

## Põhikonfiguratsioon failis jail.local

`jail.conf` ütleb ise, et seda ei tohiks muuta, sest uuendused asendavad selle. Oma väärtused kuuluvad faili `/etc/fail2ban/jail.local`. Järgmine Nginxi näide seab mõistlikud vaikeväärtused ja aktiveerib sobivad jail'id:

```ini
# /etc/fail2ban/jail.local
[DEFAULT]
# Kandke sisse oma kindlad aadressid (asendage näiteaadress)
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
```

Apache'i jaoks aktiveerite selle asemel näiteks `apache-auth`, `apache-noscript` ja `apache-botsearch`. Logiteed toob Fail2ban distributsiooniti kaasa; kui teie teed erinevad, seadke `logpath` vastavas jail'is. Kui teie süsteem loeb logisid ainult päeviku kaudu, aitab `backend = systemd`.

## Oma filter PHP-failide massipäringute jaoks

Praeguse olukorra tüüpiline muster on palju päringuid lühikese aja jooksul PHP-failidele, mida ei ole. Oma filter tuvastab selle olekukoodi 404 järgi. See kirjeldab ainult seda, mis on teie enda logis:

```ini
# /etc/fail2ban/filter.d/nginx-php-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD) [^"]*\.php[^"]*" 404
ignoreregex =
```

```ini
# Täiendus failis /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
```

Enne filtri aktiveerimist kontrollige seda tegeliku logi vastu. Nii näete, mitu rida see tabab ja kas hulgas on legitiimseid pöördusi:

```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
# Tahtmatult blokeeritud aadressi vabastamine
sudo fail2ban-client set nginx-php-404 unbanip 203.0.113.25
```

Valige künnis heldelt. Indekseerija, mis töötab läbi aegunud linke, või seiretenuse ei tohi blokeeringusse sattuda.

## Sagedasemad lõksud

Fail2ban on kiiresti paigaldatud, kuid kergesti valesti kasutatud. Kontrollige neid punkte enne tootmiskasutust:

1. **Enda väljalukustamine:** kontori, VPN-i ja seire aadressid kuuluvad sätte `ignoreip` alla enne, kui jail'id aktiveeruvad.
2. **Eelnevad teenused:** CDN-i või koormusjaoturi taga näeb Fail2ban ilma kohandamiseta ainult nende aadresse. Rohkem juhendis [Haldussisselogimiste kaitsmine toore jõu rünnete vastu](https://phpsos.de/et/ratgeber/brute-force-login-schutz/).
3. **Logirotatsioon:** pärast logifaili vahetust peab Fail2ban uut faili lugema. Kontrollige pärast esimest rotatsiooni, kas jail'id loevad tabamusi edasi.
4. **Koostoime tulemüüriga:** Fail2ban kannab blokeeringud tulemüüri. Kes haldab oma tulemüüri reeglistiku täieliku uuesti laadimisega, võib need kirjed seejuures kustutada. Kuidas tulemüüri ennast üles ehitada, on kirjas artiklis [Veebiserveri tulemüür: avage ainult vajalikud pordid](https://phpsos.de/et/blog/firewall-fuer-webserver/).
5. **IPv6:** rünnakud tulevad ka IPv6 kaudu. Kontrollige, kas teie blokeerimistoiming katab mõlemad protokollid.

> **Näpunäide:**
> Analüüsige blokeerimisloendeid korrapäraselt. Kui blokeeringud koonduvad teatud võrkudest või teatud teedele, on see vihje sihipärasele otsingule ja põhjus mõjutatud rakendust lähemalt vaadata.

## Kokkuvõte: tööriist massi vastu, mitte kõige vastu

Fail2ban on kiiresti seadistatud ja võtab veebiserveritelt osa pidevast pommitamisest. Kaasasolevad jail'id katavad tüüpilisi mustreid, oma filtreid saab käsuga `fail2ban-regex` ohutult tegelike logide vastu testida ja `recidive`-jail hoolitseb selle eest, et visad allikad jäävad kauem välja.

Üle hinnata te seda ei tohiks. Fail2ban reageerib kordusele, mitte esimesele tabamusele, ja see näeb ainult seda, mis on logides. Sellise augu nagu PHP2Shell vastu aitab ainult uuendus, paljudest aadressidest hajutatud rünnete vastu Fail2ban vaevalt aitab. Oma väärtuse avab see ühe kihina mitme seas: kõrvuti kerge tulemüüri, karastatud veebiserveri konfiguratsiooni, kaheastmelise sisselogimise ja seirega, mis kõrvalekaldeid mitte ainult ei blokeeri, vaid ka teatab.

## Kuidas PHP SOS konkreetselt aitab?

- **Logisid analüüsida:** vaatame, millised mustrid teie pöördusprotokollides esinevad, ja valime sobivad jail'id.
- **Seadistada ja testida:** seadistame Fail2bani oma filtritega, testime iga filtrit tegelike logide vastu ja kanname teie kindlad aadressid erandina sisse.
- **Koostoime selgitada:** CDN-i, koormusjaoturi, tulemüüri ja logirotatsiooni häälestame nii, et blokeeringud tabaksid õigeid aadresse.
- **Jälgida:** [turvaseire](https://phpsos.de/et/leistungen/security-monitoring/) raames analüüsime blokeeringuid ja kõrvalekaldeid jooksvalt.


## Korduma kippuvad küsimused

**Kas Fail2ban kaitseb PHP2Shelli vastu?**  
Ei. Fail2ban reageerib alles pärast seda, kui aadress on logides korduvalt silma jäänud. Üksikut edukat rünnakut see ei takista. Fail2ban vähendab aga skannerite tekitatud koormust ja teeb korduvad katsed samast allikast kallimaks.

**Miks ei tohiks ma jail.conf'i otse muuta?**  
Fail asendatakse paketiuuenduste käigus ja ta ütleb seda ise. Oma sätted kuuluvad faili jail.local või kausta jail.d failidesse. Seal kirjutavad need vaikeväärtused sihipäraselt üle.

**Mis on recidive-jail?**  
Jail, mis analüüsib Fail2bani enda protokolli. Kes saab pidevalt blokeeritud, saab märgatavalt pikema blokeeringu. Kaasasolevas konfiguratsioonis on see üks nädal.

**Kas Fail2ban töötab Cloudflare'i või koormusjaoturi taga?**  
Ainult lisakonfiguratsiooniga. Ilma selleta on logides eelneva teenuse aadress ja blokeering tabaks kõiki külastajaid. Veebiserver peab siis üle võtma külastaja tegeliku aadressi ning blokeeringud seatakse paremini eelneva teenuse juures.

## Allikad

- [Fail2ban: kaasasolev jail.conf](https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf)
- [BSI IT-Grundschutz](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/)
