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.