Modul 5 · 5.3
fail2ban a jelszótalálgatás ellen
Modul 5: A hálózat védelme · Olvasási idő: 10 perc
Tanulási cél: A lecke után Ön képes lesz a fail2bant SSH-hoz beállítani, a státuszát és a naplóját elolvasni, egy címet újra feloldani, és elmagyarázni, mit véd a fail2ban és mit nem.
Kulcsfogalmak: brute force, jail, szűrő (filter), művelet (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local és jail.d, fail2ban-client, recidive
Az internet kilincsrángatói
Nézzen bele egy nappal a telepítés után az SSH naplójába, és látni fogja: több száz bejelentkezési kísérlet, olyan nevekkel, mint root, admin, test, ubuntu és oracle, a világ minden tájáról érkező címekről.
anna@web1:~$ sudo journalctl -u ssh --since today | grep -c "Invalid user"
412
anna@web1:~$ sudo journalctl -u ssh --since today | grep "Invalid user" | tail -n 3
nov 09 14:02:11 web1 sshd-session[20311]: Invalid user admin from 203.0.113.77 port 51522
nov 09 14:02:13 web1 sshd-session[20313]: Invalid user oracle from 203.0.113.77 port 51544
nov 09 14:02:16 web1 sshd-session[20315]: Invalid user test from 203.0.113.77 port 51560(Ubuntun a szolgáltatás neve ssh, AlmaLinuxon és Rockyn sshd. A folyamat neve az OpenSSH verziójától függően sshd vagy sshd-session lehet.) Ez egy brute force támadás: botok, amelyek egyszerűen végigpróbálják az összes szokásos felhasználónevet és jelszót. Ha kulccsal jelentkezik be, és a jelszavas bejelentkezés ki van kapcsolva (2.2. lecke), soha nem jutnak be, akárhányszor próbálkoznak is. Viszont teleírják a naplót, némi számítási kapacitást is elvesznek, és azoknál a szolgáltatásoknál, ahol mégis jelszó kell (egy webmail, egy kezelőpanel), valóban veszélyesek lehetnek.
A fail2ban naplókat olvas, felismeri a sikertelen kísérleteket, és azt a címet, amely túl sokszor hibázik, egy időre letiltja a tűzfalban.
Hogyan gondolkodik a fail2ban: jailek
A fail2ban jailekkel (cellákkal) dolgozik. Egy jail három dolgot kapcsol össze:
- egy szűrőt: reguláris kifejezéseket, amelyek egy naplóban felismerik a sikertelen kísérleteket (például a "Invalid user ... from <adres>" sort);
- egy műveletet: azt, ami túl sok kísérlet esetén történik, többnyire egy tűzfalszabályt, amely letiltja a címet (
banaction, Debian 13-on alapértelmezetten nftables segítségével); - küszöbértékeket: hány sikertelen kísérlet (
maxretry) mennyi időn belül (findtime) vezet mennyi ideig tartó tiltáshoz (bantime).
A jail.conf alapértelmezett értékei: maxretry = 5, findtime = 10m, bantime = 10m. Vagyis: öt sikertelen kísérlet tíz percen belül tíz perc tiltást eredményez.
Telepítés és a Debian 12 csapdája
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banDebianon és Ubuntun az SSH-hoz tartozó jail ([sshd]) a telepítés után már be van kapcsolva, a /etc/fail2ban/jail.d/defaults-debian.conf fájlon keresztül.
Van egy ismert csapda. A fail2bannak tudnia kell, hol található a napló. Korábban ez a /var/log/auth.log szöveges fájl volt. A Debian 12 óta az rsyslog alapértelmezetten már nincs telepítve, és az üzenetek csak a systemd journaljában szerepelnek (6.2. lecke). A Debian 12 fail2ban csomagja még a /var/log/auth.log fájlt kereste, nem találta, és nem indult el. A Debian 13 ezt úgy oldotta meg, hogy a defaults-debian.conf fájlban az SSH-hoz beállította a backend = systemd értéket. Debian 12-n ugyanezt Önnek kell megtennie (lásd lent). Az Ubuntun az rsyslog még alapértelmezetten megvan, de a backend = systemd ott is működik.
Saját beállítások: jail.local
A jail.conf fájlt soha ne módosítsa: egy frissítéskor ezt a fájlt lecseréli a rendszer. Saját beállításait a /etc/fail2ban/jail.local fájlba vagy a /etc/fail2ban/jail.d/ mappában egy .local kiterjesztésű fájlba írja:
# /etc/fail2ban/jail.d/eigen.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
bantime.increment = true
ignoreip = 127.0.0.1/8 ::1 198.51.100.20
[sshd]
enabled = true
backend = systemdMit csinálnak a sorok:
bantime = 1h: egy óra tiltás tíz perc helyett.bantime.increment = true: aki egy tiltás után visszatér, minden alkalommal hosszabb tiltást kap.ignoreip: címek, amelyeket soha nem tilt le. Ide írja az irodája fix IP-címét, ha van ilyen. Ide ne írjon nagy címtartományokat "a biztonság kedvéért".backend = systemd: szöveges fájl helyett a journalt olvassa (Debian 12-n szükséges, máshol is ajánlott). Ehhez telepítve kell lennie apython3-systemdcsomagnak; függőségként többnyire már az.
Újratöltés és ellenőrzés:
anna@web1:~$ sudo fail2ban-client -t # konfiguráció tesztelése
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdA státusz olvasása, tiltás és feloldás
anna@web1:~$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 3
| |- Total failed: 1288
| `- Journal matches: _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
|- Currently banned: 2
|- Total banned: 117
`- Banned IP list: 203.0.113.77 198.51.100.140A "Currently failed" azokat a címeket jelenti, amelyek már próbálkoztak, de még nem lépték túl a küszöböt. A "Currently banned" azok a címek, amelyek jelenleg le vannak tiltva.
Ha saját magát tiltotta ki (például azzal, hogy néhányszor rossz kulccsal vagy felhasználónévvel próbálkozott), jelentkezzen be egy másik hálózatról vagy a konzolon keresztül, és oldja fel a címét:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Magának a fail2bannak a naplója a /var/log/fail2ban.log helyen található, és megmutatja, mikor melyik címet tiltotta le és oldotta fel:
2026-11-09 14:02:16,903 fail2ban.actions [811]: NOTICE [sshd] Ban 203.0.113.77
2026-11-09 15:02:17,120 fail2ban.actions [811]: NOTICE [sshd] Unban 203.0.113.77Visszaesők: recidive
Egyes botok minden tiltás után egyszerűen visszatérnek. Erre két eszköz létezik. A bantime.increment (lásd fent) minden alkalommal meghosszabbítja a tiltást. Emellett ott van a recidive jail: ez magának a fail2bannak a naplóját olvassa, és azt a címet, amelyet egy napon belül sokszor letiltottak, egy hétre az összes porton letiltja. Bekapcsolás a .local fájlban:
[recidive]
enabled = trueMit csinál a fail2ban, és mit nem
A fail2ban hasznos, de nem ez a zár az ajtón. A zár a kulccsal történő bejelentkezés, kikapcsolt jelszavakkal (2.2. lecke). Ezért azt is tudja, mire nem képes a fail2ban:
- Egy elosztott támadás több ezer címről, címenként egy-két kísérlettel, soha nem lépi túl a
maxretryértéket. - Egy gyenge jelszó gyenge marad. A fail2ban lassítja a találgatást, semmi több.
- Csak azt látja, ami a naplóban van: egy szolgáltatást, amely nem naplózza a sikertelen kísérleteket, vagy egy naplót, amelyet a fail2ban nem olvas, nem vesz észre.
- Docker: a normál tűzfallánc tiltásai nem vonatkoznak a közzétett konténerportokra (9.3. lecke). A konténerekben futó szolgáltatásokhoz külön beállítás szükséges (művelet a
DOCKER-USERláncon).
Amiben a fail2ban jó: nyugodtan tartja a naplót, csökkenti a botok okozta terhelést, és védi azokat a szolgáltatásokat, ahol (még) jelszót használ, például egy webmailt vagy kezelőpanelt. Ilyen szolgáltatásokhoz vannak szűrők nginxhez, Postfixhez, Dovecothoz és sok máshoz.
AlmaLinuxon és Rocky Linuxon
Ott a fail2ban az EPEL-ből érkezik: dnf install epel-release, majd dnf install fail2ban. A fail2ban csomag a firewalld-kapcsolatot is telepíti. Az SSH-szolgáltatás neve sshd. Magát a jailt egy .local fájlban kapcsolja be; a Debiantól eltérően itt nincs automatikusan bekapcsolva.
Összefoglalás
- A botok egész nap próbálnak bejelentkezni; kulcsokkal és kikapcsolt jelszavas bejelentkezéssel nem jutnak be, a fail2ban emellett távol tartja őket.
- Egy jail = szűrő + művelet + küszöbértékek (
maxretry,findtime,bantime); alapértelmezetten 5 kísérlet 10 percen belül, 10 perc tiltás. - Saját beállítások a
jail.localvagy ajail.d/*.localhelyen, soha nem ajail.conffájlban; használja abackend = systemdbeállítást (Debian 12-n szükséges). - A
fail2ban-client status sshdmegmutatja a letiltott címeket, aset sshd unbanipfeloldja őket; a recidive és abantime.incrementkezeli a visszaesőket. - A fail2ban nem állítja meg az elosztott támadásokat és a gyenge jelszavakat, és a Docker-portokat sem látja magától.
Kvíz
Feladat
Feladat Z5.3: Behatolási napló olvasása. A ssh-journal-1.txt mintafájlban egy fail2bant használó SSH-szerver journaljának egy részlete található, valamint a fail2ban-client status sshd kimenete. Válaszolja meg: melyik cím próbálta a legtöbb felhasználónevet, melyik címnek sikerült kulccsal bejelentkeznie és melyik felhasználóként, melyik címet tiltotta le a rendszer és hány órakor, és az alapértelmezett beállításokkal (maxretry = 5, findtime = 10m) is letiltotta volna-e ezt a címet? A program a rögzített megoldókulccsal veti össze a válaszait. Ha van saját szervere fail2bannal, ott is nézze meg a fail2ban-client status sshd kimenetét.
További olvasnivaló
- A VPS biztonságossá tétele: az első öt perc
- Le vagyok tiltva? Az Ön IP-címe és a tűzfalunk
- fail2ban, alapértelmezett konfiguráció
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Kézikönyv
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html - VPS: az első bejelentkezéstől a biztonságos szerverig 3.5: fail2ban a jelszótalálgatás ellen
