A Fail2ban naplókat olvas, reguláris kifejezésre illeszkedő találatokat számol, és tűzfalszabályt ad hozzá, amikor a számláló eléri a küszöböt. Az egész haszon a beállításban van — telepítés után egyetlen jail aktív, és az az SSH-hoz tartozik.

Hová valók a beállítások

Az /etc/fail2ban/jail.conf fájlhoz ne nyúlj — csomagfrissítéskor felülíródik. A saját értékeid az /etc/fail2ban/jail.local fájlba valók, amelynek csak azt kell tartalmaznia, amit módosítasz.

[DEFAULT]
bantime  = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25

Az ignoreip az a sor, amelyet elsőként írsz be. Nélküle előbb-utóbb a saját címedet tiltod le, és utána már csak a tárhely paneljének konzoljával jutsz be.

A bantime-ról

A tízperces alapérték gyakorlatilag értelmetlen: az automatikus jelszókitaláló visszatér és folytatja. Egy nap ésszerű minimum. Még jobb a fokozatos növelés:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 30d

Így aki visszatér, egyre hosszabb tiltásokat kap, míg egy valódi felhasználó egyetlen sikertelen bejelentkezését nem bünteti keményen.

Bekapcsolásra érdemes jailek

Az sshd már fut. Ha a jelszavas bejelentkezést teljesen kikapcsoltad, a jail nem sok hasznot hoz, de nem is árt.

A webszerver hitelesítése. Ha valami jelszóval védett a szerveren keresztül:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Az alkalmazásod bejelentkezési űrlapja. Ehhez nincs kész szűrő — a webhely jelszóűrlapja az alkalmazás saját naplójába ír, saját formátumban. A szűrőt magad írod meg az /etc/fail2ban/filter.d/ könyvtárba, és éppen ez a jail hozza a legtöbbet, mert jelszavakat éppen ott találgatnak.

Postfix és Dovecot, ha a szerver levelezést szolgál ki. A levelezőportokat legalább annyira támadják találgatással, mint az SSH-t.

recidive — olyan jail, amely a Fail2ban saját naplóját olvassa, és hosszú tiltást ad azoknak a címeknek, amelyeket már többször letiltottak:

[recidive]
enabled  = true
bantime  = 4w
findtime = 1d
maxretry = 3

Ellenőrizd, hogy tényleg működik-e

sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Az utolsó parancs a legfontosabb, és túlságosan ritkán használják. Megmutatja, a napló hány sorára illeszkedik ténylegesen a szűrő. A nulla találat azt jelenti, hogy a jail fut, de semmit nem csinál — vagy rossz a naplóhoz vezető útvonal, vagy nem stimmel a formátum.

Ez egyben a leggyakoribb oka annak, hogy a Fail2ban működőnek tűnik, de senkit nem tilt: Debian 12-n és Ubuntu 24.04-en a /var/log/auth.log már alapból nem létezik. A megoldás vagy az rsyslog telepítése, vagy a jail ráirányítása a naplózóra:

[sshd]
backend = systemd

Saját magad feloldása

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Ezt előre érdemes tudni, nem abban a pillanatban, amikor kívül állsz.

Amit a Fail2ban nem tud

Egy és ugyanazon cím gyakoriságával dolgozik. Az elosztott támadás — ezer cím, mindegyik egy próbálkozással — egyenesen átmegy, mert egyetlen számláló sem éri el a küszöböt. Ez elvi korlát, nem beállítási hiba.

Az alkalmazás sebezhetőségét sem állítja meg. Az a kérés, amely egy bővítmény hibáját használja ki, elsőre sikerül, és egyetlen sikertelen bejelentkezést sem hagy maga után. A Fail2ban a háttérzajt szünteti meg; nem helyettesíti az időben elvégzett frissítéseket.

A gyakorlati érték az időbeli számokban látszik: hány cím van most letiltva, melyik jail lép működésbe a leggyakrabban, nem változott-e hirtelen a szám. Az a jail, amely már semmire nem reagál, arra utal, hogy egy napló elköltözött — és ezt csak akkor veszi észre az ember, ha nézi. Hogy néz ki mindez egyetlen oldalon, azt az alábbi bemutató mutatja.