Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

fail2ban proti poskusom ugibanja

Modul 5: Zaščita omrežja · Čas branja: 10 minut

Učni cilj: Po tej lekciji boste znali nastaviti fail2ban za SSH, brati njegovo stanje in dnevnik, znova sprostiti naslov ter razložiti, kaj fail2ban ščiti in česa ne.

Ključni pojmi: brute force (groba sila), jail, filter, akcija (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local in jail.d, fail2ban-client, recidive

Tisti, ki na internetu tresejo kljuke

Dan po namestitvi poglejte v dnevnik SSH in videli boste: na stotine poskusov prijave z imeni, kot so root, admin, test, ubuntu in oracle, z naslovov po vsem svetu.

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 Ubuntuju se storitev imenuje ssh, na AlmaLinuxu in Rockyju sshd. Ime procesa je lahko sshd ali sshd-session, odvisno od različice OpenSSH.) To je napad z grobo silo (brute force): roboti, ki preprosto preizkušajo vsa običajna imena in gesla. Če se prijavljate s ključi in je prijava z geslom izklopljena (lekcija 2.2), ne pridejo nikoli noter, ne glede na to, kolikokrat poskusijo. Vendar Vam polnijo dnevnik, porabijo nekaj procesorske moči, pri storitvah, kjer je geslo še vedno potrebno (spletna pošta, nadzorna plošča), pa so lahko resnično nevarni.

fail2ban bere dnevnike, prepozna neuspele poskuse in naslov, ki prepogosto spodleti, za nekaj časa zaklene v požarnem zidu.

Kako razmišlja fail2ban: jaili

fail2ban deluje z jaili (celicami). Jail združuje tri stvari:

  • filter: regularni izrazi, ki v dnevniku prepoznajo neuspele poskuse (na primer vrstico "Invalid user ... from <adres>");
  • akcijo: kaj se zgodi ob preveč poskusih, običajno pravilo požarnega zidu, ki naslov blokira (banaction, na Debianu 13 privzeto prek nftables);
  • pragove: koliko neuspelih poskusov (maxretry) v katerem času (findtime) povzroči blokado za koliko časa (bantime).

Privzete vrednosti iz jail.conf so: maxretry = 5, findtime = 10m, bantime = 10m. Torej: pet neuspelih poskusov v desetih minutah pomeni deset minut blokade.

Namestitev in past na Debianu 12

anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2ban

Na Debianu in Ubuntuju je jail za SSH ([sshd]) po namestitvi že vklopljen, prek datoteke /etc/fail2ban/jail.d/defaults-debian.conf.

Obstaja ena znana past. fail2ban mora vedeti, kje je dnevnik. Nekoč je bila to besedilna datoteka /var/log/auth.log. Od Debiana 12 rsyslog ni več privzeto nameščen in sporočila so samo v journalu sistema systemd (lekcija 6.2). Paket fail2ban v Debianu 12 je še vedno iskal /var/log/auth.log, je ni našel in se ni zagnal. Debian 13 je to odpravil tako, da je v defaults-debian.conf za SSH nastavil backend = systemd. Na Debianu 12 to rešite sami (glejte spodaj), tako da storite enako. Ubuntu ima rsyslog še vedno privzeto, a backend = systemd deluje tudi tam.

Vaše lastne nastavitve: jail.local

jail.conf nikoli ne spreminjajte: ta datoteka se ob posodobitvi zamenja. Svoje nastavitve zapišite v /etc/fail2ban/jail.local ali v datoteko v /etc/fail2ban/jail.d/ s končnico .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

Kaj naredijo te vrstice:

  • bantime = 1h: ena ura blokade namesto desetih minut.
  • bantime.increment = true: kdor se po blokadi vrne, dobi vsakič daljšo blokado.
  • ignoreip: naslovi, ki nikoli niso blokirani. Sem vpišite stalni naslov IP svoje pisarne, če ga imate. Sem ne vpisujte velikih obsegov "za vsak primer".
  • backend = systemd: berite journal namesto besedilne datoteke (potrebno na Debianu 12, priporočljivo povsod). Za to mora biti nameščen paket python3-systemd; običajno je že nameščen kot odvisnost.

Ponovno nalaganje in preverjanje:

anna@web1:~$ sudo fail2ban-client -t            # preizkus 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

Branje stanja, blokiranje in sprošč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" so naslovi, ki so že poskušali, a še niso presegli praga. "Currently banned" so naslovi, ki so trenutno blokirani.

Če ste blokirali sami sebe (na primer tako, da ste nekajkrat poskusili z napačnim ključem ali uporabniškim imenom), se prijavite prek drugega omrežja ali konzole in sprostite svoj naslov:

anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20

Dnevnik samega fail2ban je v /var/log/fail2ban.log in pokaže, kdaj je bil kateri naslov blokiran in sproščen:

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.77

Ponavljavci: recidive

Nekateri roboti se po vsaki blokadi preprosto vrnejo. Za to obstajata dve sredstvi. bantime.increment (zgoraj) blokado vsakič podaljša. Poleg tega obstaja jail recidive: ta bere dnevnik samega fail2ban in naslov, ki je bil v enem dnevu pogosto blokiran, za en teden blokira na vseh vratih. Vklopite ga v svoji datoteki .local:

[recidive]
enabled = true

Kaj fail2ban zmore in česa ne

fail2ban je koristen, vendar ni ključavnica na vratih. Ključavnica je prijava s ključem, z izklopljenimi gesli (lekcija 2.2). Zato vedite tudi, česa fail2ban ne zmore:

  • Porazdeljen napad s tisočev naslovov, vsak z enim ali dvema poskusoma, nikoli ne preseže maxretry.
  • Šibko geslo ostane šibko. fail2ban ugibanje upočasni, nič več.
  • Samo tisto, kar je v dnevniku: storitve, ki neuspelih poskusov ne beleži, ali dnevnika, ki ga fail2ban ne bere, ne vidi.
  • Docker: blokade v običajni verigi požarnega zidu ne veljajo za objavljena vrata vsebnikov (lekcija 9.3). Za storitve v vsebnikih je potrebna posebna nastavitev (akcija na verigi DOCKER-USER).

Kar fail2ban dobro opravi: ohranja dnevnik miren, zmanjšuje obremenitev zaradi robotov in ščiti storitve, kjer (še) uporabljate gesla, kot sta spletna pošta ali nadzorna plošča. Za take storitve obstajajo filtri za nginx, Postfix, Dovecot in mnoge druge.

Na AlmaLinuxu in Rocky Linuxu

Tam fail2ban prihaja iz EPEL: dnf install epel-release in nato dnf install fail2ban. Paket fail2ban namesti tudi povezavo s firewalld. Storitev SSH se imenuje sshd. Jail vklopite sami v datoteki .local; za razliko od Debiana ni samodejno vklopljen.

Povzetek

  • Roboti ves dan poskušajo s prijavo; s ključi in izklopljeno prijavo z geslom ne pridejo noter, fail2ban pa jih dodatno drži na razdalji.
  • Jail je filter + akcija + pragovi (maxretry, findtime, bantime); privzeto 5 poskusov v 10 minutah, 10 minut blokade.
  • Lastne nastavitve v jail.local ali jail.d/*.local, nikoli v jail.conf; uporabite backend = systemd (potrebno na Debianu 12).
  • fail2ban-client status sshd prikaže blokirane naslove, set sshd unbanip jih sprosti; recidive in bantime.increment poskrbita za ponavljavce.
  • fail2ban ne ustavi porazdeljenih napadov ali šibkih gesel in vrat Dockerja ne vidi sam od sebe.

Kviz

1. Na Debian 12 ste namestili fail2ban, a se ne zažene, s sporočilom, da za jail sshd ni dnevniške datoteke. Kaj je vzrok?



2. Zakaj nastavitve zapišete v jail.local in ne v jail.conf?



3. Privzete nastavitve so maxretry = 5, findtime = 10m, bantime = 10m. Naslov naredi neuspel poskus ob 14:00, 14:03, 14:05, 14:08 in 14:09. Kaj se zgodi?



4. Vaš strežnik vsak dan prejme na tisoče poskusov prijave, razporejenih po desettisočih naslovov, vsak po en poskus. Kaj fail2ban naredi proti temu?



5. Blokirali ste sami sebe, ker ste nekajkrat vtipkali napačno uporabniško ime. Katera je ustrezna rešitev?



Naloga

Naloga Z5.3: Branje dnevnika vdora. V vzorčni datoteki ssh-journal-1.txt je del journala strežnika SSH s fail2ban ter izpis fail2ban-client status sshd. Odgovorite: kateri naslov je preizkusil največ uporabniških imen, kateremu naslovu se je uspelo prijaviti s ključem in kot kateri uporabnik, kateri naslov je blokiran in ob kateri uri ter ali bi bil ta naslov blokiran tudi s privzetimi nastavitvami (maxretry = 5, findtime = 10m)? Program odgovore primerja s fiksnim ključem. Če imate lasten strežnik s fail2ban, si tam oglejte tudi fail2ban-client status sshd.

Naloga Z5.3: Branje dnevnika vdora

Datoteka za to nalogo: ssh-journal-1.txt








Tega, kar vnesete, in tega, kar najdemo, ne shranjujemo. Vaš brskalnik si zapomni Vaše odgovore in to, ali ste nalogo opravili. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo (skoraj) pravilno opravili; tudi to lahko tam izbrišete.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…