5 modulis · 5.3
fail2ban prieš slaptažodžių spėliojimą
5 modulis: Tinklo apsauga · Skaitymo laikas: 10 min.
Mokymosi tikslas: Po šios pamokos galėsite nustatyti fail2ban SSH apsaugai, perskaityti jo būseną ir žurnalą, vėl atblokuoti adresą ir paaiškinti, ką fail2ban apsaugo, o ko ne.
Pagrindinės sąvokos: brute force, jail, filtras, veiksmas (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local ir jail.d, fail2ban-client, recidive
Interneto durų varstytojai
Praėjus parai po įdiegimo pažvelkite į SSH žurnalą ir pamatysite: šimtai bandymų prisijungti su tokiais vardais kaip root, admin, test, ubuntu ir oracle, iš adresų visame pasaulyje.
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(Ubuntu sistemoje paslauga vadinasi ssh, AlmaLinux ir Rocky sistemose sshd. Proceso pavadinimas gali būti sshd arba sshd-session, priklausomai nuo OpenSSH versijos.) Tai yra brute force ataka: robotai tiesiog bando visus įprastus vardus ir slaptažodžius. Jei jungiamasi raktais, o prisijungimas slaptažodžiu išjungtas (pamoka 2.2), jie niekada nepateks į vidų, kad ir kiek kartų bandytų. Tačiau jie pildo Jūsų žurnalą, naudoja šiek tiek skaičiavimo galios, o paslaugoms, kuriose slaptažodis vis dėlto reikalingas (žiniatinklio paštui, valdymo skydeliui), jie gali būti tikrai pavojingi.
fail2ban skaito žurnalus, atpažįsta nesėkmingus bandymus ir adresą, kuris per dažnai klysta, kuriam laikui užblokuoja ugniasienėje.
Kaip mąsto fail2ban: jails
fail2ban dirba su jails (kameromis). Kiekviena jail sujungia tris dalykus:
- filtrą: reguliariąsias išraiškas, kurios žurnale atpažįsta nesėkmingus bandymus (pavyzdžiui, eilutę "Invalid user ... from <adres>");
- veiksmą: kas nutinka po per daug bandymų, dažniausiai ugniasienės taisyklė, blokuojanti adresą (
banaction, Debian 13 sistemoje pagal numatytuosius nustatymus per nftables); - ribas: kiek nesėkmingų bandymų (
maxretry) per kokį laiką (findtime) lemia kiek trunkantį blokavimą (bantime).
Numatytosios reikšmės iš jail.conf yra: maxretry = 5, findtime = 10m, bantime = 10m. Taigi: penki nesėkmingi bandymai per dešimt minučių reiškia dešimties minučių blokavimą.
Įdiegimas ir Debian 12 spąstai
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banDebian ir Ubuntu sistemose SSH skirta jail ([sshd]) po įdiegimo jau įjungta, per failą /etc/fail2ban/jail.d/defaults-debian.conf.
Yra vieni žinomi spąstai. fail2ban turi žinoti, kur yra žurnalas. Anksčiau tai buvo tekstinis failas /var/log/auth.log. Nuo Debian 12 rsyslog pagal numatytuosius nustatymus nebeįdiegiamas, o pranešimai saugomi tik systemd žurnale (journal, pamoka 6.2). Debian 12 fail2ban paketas vis dar ieškojo /var/log/auth.log, jo nerasdavo ir nepasileisdavo. Debian 13 tai išsprendė, faile defaults-debian.conf SSH nustatydamas backend = systemd. Debian 12 sistemoje tai išspręsite patys (žr. toliau), padarę tą patį. Ubuntu rsyslog vis dar turi pagal numatytuosius nustatymus, tačiau backend = systemd veikia ir ten.
Jūsų nustatymai: jail.local
Niekada nekeiskite jail.conf: atnaujinant šis failas pakeičiamas. Savo nustatymus įrašykite į /etc/fail2ban/jail.local arba į failą kataloge /etc/fail2ban/jail.d/ su plėtiniu .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 = systemdKą daro šios eilutės:
bantime = 1h: valandos blokavimas vietoje dešimties minučių.bantime.increment = true: kas po blokavimo grįžta, kaskart gauna ilgesnį blokavimą.ignoreip: adresai, kurie niekada neblokuojami. Čia įrašykite savo biuro fiksuotą IP adresą, jei jį turite. Neįrašykite čia didelių intervalų "dėl visa ko".backend = systemd: skaityti journal vietoje tekstinio failo (būtina Debian 12, rekomenduojama visur). Tam turi būti įdiegtas paketaspython3-systemd; dažniausiai jis jau įdiegtas kaip priklausomybė.
Įkelkite iš naujo ir patikrinkite:
anna@web1:~$ sudo fail2ban-client -t # patikrinti konfigūraciją
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdBūsenos skaitymas, blokavimas ir atblokavimas
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" yra adresai, kurie jau bandė jungtis, bet dar neviršijo ribos. "Currently banned" yra šiuo metu užblokuoti adresai.
Jei užblokavote patys save (pavyzdžiui, kelis kartus bandę su netinkamu raktu ar naudotojo vardu), prisijunkite per kitą tinklą arba konsolę ir atblokuokite savo adresą:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Paties fail2ban žurnalas yra /var/log/fail2ban.log ir rodo, kada kuris adresas buvo užblokuotas ir atblokuotas:
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.77Pasikartojantys: recidive
Kai kurie robotai po kiekvieno blokavimo tiesiog grįžta. Tam yra dvi priemonės. bantime.increment (aprašyta aukščiau) kaskart prailgina blokavimą. Be to, yra jail recidive: ji skaito paties fail2ban žurnalą ir adresą, kuris per parą buvo dažnai blokuojamas, užblokuoja savaitei visuose prievaduose. Įjunkite ją savo .local faile:
[recidive]
enabled = trueKą fail2ban daro, o ko ne
fail2ban naudingas, bet tai nėra durų spyna. Spyna yra prisijungimas raktu, kai slaptažodžiai išjungti (pamoka 2.2). Todėl žinokite ir tai, ko fail2ban negali:
- Paskirstyta ataka iš tūkstančių adresų, kurių kiekvienas bando vieną ar du kartus, niekada neviršija
maxretry. - Silpnas slaptažodis lieka silpnas. fail2ban tik sulėtina spėliojimą, ne daugiau.
- Tik tai, kas yra žurnale: paslaugos, kuri neregistruoja nesėkmingų bandymų, arba žurnalo, kurio fail2ban neskaito, jis nemato.
- Docker: blokavimai įprastoje ugniasienės grandinėje negalioja paskelbtiems konteinerių prievadams (pamoka 9.3). Konteineriuose veikiančioms paslaugoms reikia atskiro nustatymo (veiksmo grandinėje
DOCKER-USER).
Ką fail2ban daro gerai: palaiko žurnalą ramų, mažina robotų apkrovą ir saugo paslaugas, kuriose (dar) naudojate slaptažodžius, pavyzdžiui, žiniatinklio paštą ar valdymo skydelį. Tokioms paslaugoms yra filtrų nginx, Postfix, Dovecot ir daugeliui kitų.
AlmaLinux ir Rocky Linux sistemose
Ten fail2ban gaunamas iš EPEL: dnf install epel-release, o tada dnf install fail2ban. Paketas fail2ban įdiegia ir ryšį su firewalld. SSH paslauga vadinasi sshd. Pačią jail įjunkite .local faile; kitaip nei Debian, ji neįjungiama automatiškai.
Santrauka
- Robotai visą dieną bando prisijungti; kai naudojami raktai, o prisijungimas slaptažodžiu išjungtas, jie nepatenka į vidų, o fail2ban dar ir laiko juos atokiau.
- Jail yra filtras + veiksmas + ribos (
maxretry,findtime,bantime); pagal numatytuosius nustatymus 5 bandymai per 10 minučių, 10 minučių blokavimas. - Savo nustatymus laikykite
jail.localarbajail.d/*.local, niekada nejail.conf; naudokitebackend = systemd(būtina Debian 12). fail2ban-client status sshdrodo užblokuotus adresus,set sshd unbanipatblokuoja; recidive irbantime.incrementsusidoroja su pasikartojančiais.- fail2ban nesustabdo paskirstytų atakų ar silpnų slaptažodžių ir savaime nemato Docker prievadų.
Testas (quiz)
Užduotis
Užduotis Z5.3: Įsilaužimo žurnalo skaitymas. Pavyzdiniame faile ssh-journal-1.txt yra SSH serverio su fail2ban journal ištrauka ir fail2ban-client status sshd išvestis. Atsakykite: kuris adresas išbandė daugiausiai naudotojo vardų, kuris adresas sugebėjo prisijungti raktu ir kaip kuris naudotojas, kuris adresas užblokuotas ir kada, ir ar tas adresas būtų užblokuotas ir su numatytaisiais nustatymais (maxretry = 5, findtime = 10m)? Programa palygina atsakymus su nustatytais teisingais atsakymais. Jei turite savo serverį su fail2ban, peržiūrėkite ir jame fail2ban-client status sshd.
Skaitykite daugiau
- VPS apsauga: pirmosios penkios minutės
- Ar esu užblokuotas? Jūsų IP adresas ir mūsų ugniasienė
- fail2ban, numatytoji konfigūracija
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Vadovas
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
