Modul 5 · 5.3
fail2ban protiv pokušaja pogađanja
Modul 5: Zaštita mreže · Vrijeme čitanja: 10 minuta
Cilj učenja: Nakon ove lekcije moći ćete postaviti fail2ban za SSH, čitati njegov status i zapisnik, ponovno osloboditi adresu te objasniti što fail2ban štiti, a što ne.
Ključni pojmovi: brute force, jail, filter, akcija (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local i jail.d, fail2ban-client, recidive
Oni koji kucaju na vrata interneta
Pogledajte dan nakon instalacije u zapisnik SSH-a i vidjet ćete: stotine pokušaja prijave, s imenima kao što su root, admin, test, ubuntu i oracle, s adresa iz cijelog svijeta.
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(Na Ubuntuu se usluga zove ssh, na AlmaLinuxu i Rockyju sshd. Naziv procesa može biti sshd ili sshd-session, ovisno o verziji OpenSSH-a.) To je brute-force napad: botovi koji jednostavno isprobavaju sva uobičajena imena i lozinke. Ako se prijavljujete ključevima, a prijava lozinkom je isključena (lekcija 2.2), nikada neće ući, koliko god puta pokušali. No pune Vaš zapisnik, troše nešto procesorske snage, a na uslugama na kojima je lozinka ipak potrebna (webmail, upravljačka ploča) mogu biti stvarno opasni.
fail2ban čita zapisnike, prepoznaje neuspjele pokušaje i adresu koja prečesto griješi na neko vrijeme zaključava u vatrozidu.
Kako fail2ban razmišlja: jailovi
fail2ban radi s jailovima (ćelijama). Jail kombinira tri stvari:
- filter: regularne izraze koji u zapisniku prepoznaju neuspjele pokušaje (na primjer redak "Invalid user ... from <adres>");
- akciju: što se događa kod previše pokušaja, obično pravilo vatrozida koje blokira adresu (
banaction, na Debianu 13 standardno putem nftablesa); - pragove: koliko neuspjelih pokušaja (
maxretry) unutar kojeg vremena (findtime) dovodi do blokade koliko dugo (bantime).
Zadane vrijednosti iz jail.conf su: maxretry = 5, findtime = 10m, bantime = 10m. Dakle: pet neuspjelih pokušaja unutar deset minuta znači deset minuta blokade.
Instalacija i zamka Debiana 12
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banNa Debianu i Ubuntuu jail za SSH ([sshd]) je nakon instalacije već uključen, putem datoteke /etc/fail2ban/jail.d/defaults-debian.conf.
Postoji jedna poznata zamka. fail2ban mora znati gdje se nalazi zapisnik. Nekada je to bila tekstualna datoteka /var/log/auth.log. Od Debiana 12 rsyslog se više ne instalira standardno, a poruke se nalaze samo u journalu systemd-a (lekcija 6.2). Paket fail2ban u Debianu 12 još je tražio /var/log/auth.log, nije ga pronašao i nije se pokrenuo. Debian 13 to je riješio tako da u defaults-debian.conf za SSH postavlja backend = systemd. Na Debianu 12 to rješavate sami (pogledajte niže) tako da učinite isto. Ubuntu i dalje standardno ima rsyslog, ali backend = systemd radi i ondje.
Vaše vlastite postavke: jail.local
Nikada ne mijenjajte jail.conf: ta se datoteka pri ažuriranju zamjenjuje. Svoje postavke stavite u /etc/fail2ban/jail.local ili u datoteku u /etc/fail2ban/jail.d/ s nastavkom .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 = systemdŠto rade ovi retci:
bantime = 1h: blokada od jednog sata umjesto deset minuta.bantime.increment = true: tko se nakon blokade vrati, svaki put dobiva dulju blokadu.ignoreip: adrese koje se nikada ne blokiraju. Ovdje upišite fiksnu IP adresu svog ureda, ako je imate. Ne upisujte ovdje velike raspone "za svaki slučaj".backend = systemd: čitaj journal umjesto tekstualne datoteke (potrebno na Debianu 12, preporučljivo svugdje). Za to mora biti instaliran paketpython3-systemd; obično već jest, kao ovisnost.
Ponovno učitavanje i provjera:
anna@web1:~$ sudo fail2ban-client -t # testiranje konfiguracije
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdČitanje statusa, blokiranje i oslobađanje
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" su adrese koje su već pokušavale, ali još nisu prešle prag. "Currently banned" su adrese koje su trenutačno blokirane.
Ako ste blokirali sami sebe (na primjer jer ste nekoliko puta pokušali s pogrešnim ključem ili korisničkim imenom), prijavite se putem druge mreže ili konzole i oslobodite svoju adresu:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Zapisnik samog fail2bana nalazi se u /var/log/fail2ban.log i pokazuje kada je koja adresa blokirana i oslobođena:
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.77Ponavljači: recidive
Neki se botovi nakon svake blokade jednostavno vrate. Za to postoje dva sredstva. bantime.increment (gore) svaki put produljuje blokadu. Osim toga postoji jail recidive: on čita zapisnik samog fail2bana i adresu koja je unutar jednog dana često blokirana blokira na tjedan dana na svim priključcima. Uključite ga u svojoj .local datoteci:
[recidive]
enabled = trueŠto fail2ban radi, a što ne
fail2ban je koristan, ali nije brava na vratima. Brava je prijava ključem, uz isključene lozinke (lekcija 2.2). Zato znajte i što fail2ban ne može:
- Raspodijeljeni napad s tisuća adresa, s po jednim ili dva pokušaja, nikada ne prelazi
maxretry. - Slaba lozinka ostaje slaba. fail2ban usporava pogađanje, ništa više.
- Samo ono što je u zapisniku: uslugu koja ne bilježi neuspjele pokušaje, ili zapisnik koji fail2ban ne čita, on ne vidi.
- Docker: blokade u običnom lancu vatrozida ne vrijede za objavljene priključke kontejnera (lekcija 9.3). Za usluge u kontejnerima potrebna je zasebna postavka (akcija na lancu
DOCKER-USER).
Što fail2ban radi dobro: održava zapisnik mirnim, smanjuje opterećenje od botova i štiti usluge na kojima (još) koristite lozinke, kao što su webmail ili upravljačka ploča. Za takve usluge postoje filteri za nginx, Postfix, Dovecot i mnoge druge.
Na AlmaLinuxu i Rocky Linuxu
Ondje fail2ban dolazi iz EPEL-a: dnf install epel-release, a zatim dnf install fail2ban. Paket fail2ban instalira i povezivanje s firewalldom. SSH usluga zove se sshd. Sam jail uključite u .local datoteci; za razliku od Debiana, on nije automatski uključen.
Sažetak
- Botovi cijeli dan pokušavaju prijavu; uz ključeve i isključenu prijavu lozinkom ne mogu ući, a fail2ban ih dodatno drži na udaljenosti.
- Jail je filter + akcija + pragovi (
maxretry,findtime,bantime); standardno 5 pokušaja u 10 minuta, 10 minuta blokade. - Vlastite postavke u
jail.localilijail.d/*.local, nikada ujail.conf; koristitebackend = systemd(potrebno na Debianu 12). fail2ban-client status sshdprikazuje blokirane adrese,set sshd unbanipih oslobađa; recidive ibantime.incrementrješavaju ponavljače.- fail2ban ne zaustavlja raspodijeljene napade ni slabe lozinke i ne vidi sam od sebe Docker priključke.
Kviz
Zadatak
Zadatak Z5.3: Čitanje zapisnika provale. U primjernoj datoteci ssh-journal-1.txt nalazi se dio journala SSH poslužitelja s fail2banom, uz izlaz naredbe fail2ban-client status sshd. Odgovorite: koja je adresa isprobala najviše korisničkih imena, koja se adresa uspjela prijaviti ključem i kao koji korisnik, koja je adresa blokirana i u koliko sati, te bi li ta adresa sa zadanim postavkama (maxretry = 5, findtime = 10m) također bila blokirana? Program uspoređuje s fiksnim ključem. Ako imate vlastiti poslužitelj s fail2banom, ondje također pogledajte fail2ban-client status sshd.
Dodatno štivo
- Zaštita VPS-a: prvih pet minuta
- Jesam li blokiran? Vaša IP adresa i naš vatrozid
- fail2ban, zadana konfiguracija
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Priručnik
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
