Moodul 5 · 5.3
fail2ban paroolide arvamise vastu
Moodul 5: Võrgu kaitsmine · Lugemisaeg: 10 minutit
Õpieesmärk: Pärast seda õppetundi oskad seadistada fail2bani SSH jaoks, lugeda selle olekut ja logi, vabastada aadressi blokeeringust ning selgitada, mida fail2ban kaitseb ja mida mitte.
Põhimõisted: brute force, jail, filter, toiming (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local ja jail.d, fail2ban-client, recidive
Interneti ukselingi katsujad
Vaata päev pärast paigaldamist SSH logisse ja näed seda kohe: sadu sisselogimiskatseid nimedega nagu root, admin, test, ubuntu ja oracle, aadressidelt üle kogu maailma.
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(Ubuntus on teenuse nimi ssh, AlmaLinuxis ja Rockys sshd. Protsessi nimi võib olla sshd või sshd-session, olenevalt OpenSSH versioonist.) See on jõurünne (brute force): robotid, mis lihtsalt proovivad läbi kõik levinud nimed ja paroolid. Kui logid sisse võtmetega ja parooliga sisselogimine on välja lülitatud (õppetund 2.2), ei pääse nad kunagi sisse, ükskõik kui palju nad proovivad. Aga nad täidavad su logi, võtavad natuke arvutusvõimsust ning teenustes, kus parool on siiski vajalik (veebipost, halduspaneel), võivad nad olla päriselt ohtlikud.
fail2ban loeb logisid, tunneb ära ebaõnnestunud katsed ja lukustab liiga sageli ebaõnnestuva aadressi mõneks ajaks tulemüüris.
Kuidas fail2ban mõtleb: jailid
fail2ban töötab jailidega (kongidega). Jail ühendab kolm asja:
- filter: regulaaravaldised, mis tunnevad logis ära ebaõnnestunud katsed (näiteks rea "Invalid user ... from <adres>");
- toiming: mis juhtub liiga paljude katsete korral, tavaliselt tulemüürireegel, mis aadressi blokeerib (
banaction, Debian 13-s vaikimisi nftablesi kaudu); - lävendid: mitu ebaõnnestunud katset (
maxretry) millise aja jooksul (findtime) toob kaasa kui pika blokeeringu (bantime).
Failis jail.conf on vaikeväärtused: maxretry = 5, findtime = 10m, bantime = 10m. Seega: viis ebaõnnestunud katset kümne minuti jooksul annab kümneminutilise blokeeringu.
Paigaldamine ja Debian 12 lõks
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banDebianis ja Ubuntus on SSH jail ([sshd]) pärast paigaldamist juba sees, faili /etc/fail2ban/jail.d/defaults-debian.conf kaudu.
On üks tuntud lõks. fail2ban peab teadma, kus logi asub. Varem oli see tekstifail /var/log/auth.log. Alates Debian 12-st ei paigaldata rsyslogi enam vaikimisi ja teated on ainult systemd journalis (õppetund 6.2). Debian 12 fail2bani pakett otsis ikka veel faili /var/log/auth.log, ei leidnud seda ega käivitunud. Debian 13 lahendas selle, pannes failis defaults-debian.conf SSH jaoks kirja backend = systemd. Debian 12-s lahendad selle ise (vt allpool), tehes sama. Ubuntus on rsyslog endiselt vaikimisi olemas, aga ka seal töötab backend = systemd.
Sinu enda seaded: jail.local
Ära muuda kunagi faili jail.conf: see asendatakse uuendamisel. Pane oma seaded faili /etc/fail2ban/jail.local või kausta /etc/fail2ban/jail.d/ faili, mille laiend on .local:
# /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 = systemdMida read teevad:
bantime = 1h: tunnine blokeering kümne minuti asemel.bantime.increment = true: kes pärast blokeeringut tagasi tuleb, saab iga kord pikema blokeeringu.ignoreip: aadressid, mida kunagi ei blokeerita. Pane siia oma kontori püsiv IP-aadress, kui see sul on. Ära pane siia suuri vahemikke "igaks juhuks".backend = systemd: loe tekstifaili asemel journalit (vajalik Debian 12-s, soovitatav kõikjal). Selleks peab olema paigaldatud pakettpython3-systemd; tavaliselt on see sõltuvusena juba olemas.
Laadi uuesti ja kontrolli:
anna@web1:~$ sudo fail2ban-client -t # seadistuse testimine
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdOleku lugemine, blokeerimine ja vabastamine
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.140"Currently failed" on aadressid, mis on juba katseid teinud, aga pole veel lävendit ületanud. "Currently banned" on aadressid, mis on praegu blokeeritud.
Kui oled ennast blokeerinud (näiteks proovides paar korda vale võtme või kasutajanimega), logi sisse teise võrgu või konsooli kaudu ja vabasta oma aadress:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20fail2bani enda logi asub failis /var/log/fail2ban.log ja näitab, millal milline aadress blokeeriti ja vabastati:
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.77Kordajad: recidive
Mõned robotid tulevad pärast iga blokeeringut lihtsalt tagasi. Selleks on kaks vahendit. bantime.increment (ülal) teeb blokeeringu iga kord pikemaks. Lisaks on olemas jail recidive: see loeb fail2bani enda logi ja blokeerib aadressi, mis on ööpäeva jooksul sageli blokeeritud, nädalaks kõigil portidel. Lülita see sisse oma .local-failis:
[recidive]
enabled = trueMida fail2ban teeb ja mida mitte
fail2ban on kasulik, aga see ei ole lukk uksel. Lukk on võtmega sisselogimine, kui paroolid on välja lülitatud (õppetund 2.2). Seepärast tea ka, mida fail2ban ei suuda:
- Hajutatud rünne tuhandetelt aadressidelt, igaüks ühe või kahe katsega, ei ületa kunagi väärtust
maxretry. - Nõrk parool jääb nõrgaks. fail2ban aeglustab arvamist, rohkem mitte.
- Ainult see, mis on logis: teenust, mis ebaõnnestunud katseid ei logi, või logi, mida fail2ban ei loe, see ei näe.
- Docker: blokeeringud tavalises tulemüüriahelas ei kehti avaldatud konteineriportidele (õppetund 9.3). Konteinerites olevate teenuste jaoks on vaja eraldi seadistust (toiming ahelal
DOCKER-USER).
Mida fail2ban teeb hästi: hoiab logi rahulikuna, vähendab robotite koormust ja kaitseb teenuseid, kus kasutad (veel) paroole, näiteks veebiposti või halduspaneeli. Selliste teenuste jaoks on filtrid nginxile, Postfixile, Dovecotile ja paljudele teistele.
AlmaLinuxis ja Rocky Linuxis
Seal tuleb fail2ban EPEL-ist: dnf install epel-release ja siis dnf install fail2ban. Pakett fail2ban paigaldab ka sidumise firewalldiga. SSH teenuse nimi on sshd. Lülita jail ise sisse .local-failis; erinevalt Debianist ei ole see automaatselt sees.
Kokkuvõte
- Robotid proovivad terve päeva sisse logida; võtmete ja väljalülitatud paroolisisselogimisega nad sisse ei pääse, fail2ban hoiab neid lisaks eemal.
- Jail on filter + toiming + lävendid (
maxretry,findtime,bantime); vaikimisi 5 katset 10 minuti jooksul, 10 minutit blokeeringut. - Oma seaded pane faili
jail.localvõijail.d/*.local, mitte kunagi failijail.conf; kasutabackend = systemd(vajalik Debian 12-s). fail2ban-client status sshdnäitab blokeeritud aadresse,set sshd unbanipvabastab; recidive jabantime.incrementtegelevad kordajatega.- fail2ban ei peata hajutatud rünnakuid ega nõrku paroole ega näe Dockeri porte iseenesest.
Test (quiz)
Ülesanne
Ülesanne Z5.3: Sissemurdmise logi lugemine. Näidisfailis ssh-journal-1.txt on lõik fail2baniga SSH-serveri journalist ning käsu fail2ban-client status sshd väljund. Vasta: milline aadress proovis kõige rohkem kasutajanimesid, milline aadress suutis võtmega sisse logida ja millise kasutajana, milline aadress blokeeriti ja mis kell, ning kas see aadress oleks ka vaikeseadetega (maxretry = 5, findtime = 10m) blokeeritud? Programm võrdleb vastuseid kindla võtmega. Kui sul on oma server fail2baniga, vaata seal ka käsu fail2ban-client status sshd väljundit.
Loe edasi
- Oma VPS-i turvamine: esimesed viis minutit
- Kas mind on blokeeritud? Sinu IP-aadress ja meie tulemüür
- fail2ban, vaikekonfiguratsioon
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Juhend
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
