5. modulis · 5.3
fail2ban pret paroļu minēšanas mēģinājumiem
5. modulis: Tīkla aizsardzība · Lasīšanas laiks: 10 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet iestatīt fail2ban SSH aizsardzībai, nolasīt tā statusu un žurnālu, atkal atbrīvot adresi un izskaidrot, ko fail2ban aizsargā un ko neaizsargā.
Pamatjēdzieni: brute force, jail, filtrs, darbība (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local un jail.d, fail2ban-client, recidive
Interneta durvju klauvētāji
Paskatieties SSH žurnālā dienu pēc instalēšanas, un Jūs to redzēsiet: simtiem pieteikšanās mēģinājumu ar tādiem vārdiem kā root, admin, test, ubuntu un oracle, no adresēm visā pasaulē.
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 sistēmā pakalpojums saucas ssh, AlmaLinux un Rocky sistēmā sshd. Procesa nosaukums var būt sshd vai sshd-session, atkarībā no OpenSSH versijas.) Tas ir brute force uzbrukums: roboti, kas vienkārši izmēģina visus izplatītos vārdus un paroles. Ja pieteikšanās notiek ar atslēgām un pieteikšanās ar paroli ir izslēgta (nodarbība 2.2), tie nekad netiks iekšā, lai cik bieži arī mēģinātu. Taču tie piepilda Jūsu žurnālu, patērē nedaudz skaitļošanas jaudas, un pakalpojumos, kur parole tomēr ir vajadzīga (tīmekļa pasts, pārvaldības panelis), tie var būt patiešām bīstami.
fail2ban lasa žurnālus, atpazīst neveiksmīgus mēģinājumus un uz laiku nobloķē ugunsmūrī adresi, kas pārāk bieži kļūdās.
Kā domā fail2ban: jails
fail2ban strādā ar jails (kamerām). Jail apvieno trīs lietas:
- filtru: regulārās izteiksmes, kas žurnālā atpazīst neveiksmīgus mēģinājumus (piemēram, rindu "Invalid user ... from <adres>");
- darbību: kas notiek pēc pārāk daudziem mēģinājumiem, parasti ugunsmūra noteikums, kas bloķē adresi (
banaction, Debian 13 sistēmā pēc noklusējuma ar nftables); - sliekšņus: cik neveiksmīgu mēģinājumu (
maxretry) kādā laikā (findtime) noved pie bloķēšanas uz cik ilgu laiku (bantime).
Noklusējuma vērtības no jail.conf ir: maxretry = 5, findtime = 10m, bantime = 10m. Tātad: pieci neveiksmīgi mēģinājumi desmit minūšu laikā nozīmē desmit minūšu bloķēšanu.
Instalēšana un Debian 12 slazds
anna@web1:~$ sudo apt install fail2ban
anna@web1:~$ sudo systemctl status fail2banDebian un Ubuntu sistēmā SSH jail ([sshd]) pēc instalēšanas jau ir ieslēgts, izmantojot failu /etc/fail2ban/jail.d/defaults-debian.conf.
Ir viens zināms slazds. fail2ban ir jāzina, kur atrodas žurnāls. Agrāk tas bija teksta fails /var/log/auth.log. Kopš Debian 12 rsyslog vairs netiek instalēts pēc noklusējuma, un ziņojumi atrodas tikai systemd žurnālā (journal, nodarbība 6.2). Debian 12 fail2ban pakotne joprojām meklēja /var/log/auth.log, neatrada to un nestartēja. Debian 13 to ir novērsis, failā defaults-debian.conf SSH gadījumā iestatot backend = systemd. Debian 12 sistēmā Jūs to novēršat paši (skatiet zemāk), izdarot to pašu. Ubuntu sistēmā rsyslog pēc noklusējuma joprojām ir, taču backend = systemd darbojas arī tur.
Jūsu pašu iestatījumi: jail.local
Nekad nemainiet jail.conf: šis fails atjaunināšanas laikā tiek aizstāts. Savus iestatījumus ierakstiet failā /etc/fail2ban/jail.local vai failā mapē /etc/fail2ban/jail.d/ ar paplašinājumu .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 = systemdKo dara šīs rindas:
bantime = 1h: viena stunda bloķēšanas desmit minūšu vietā.bantime.increment = true: kas pēc bloķēšanas atgriežas, katru reizi saņem ilgāku bloķēšanu.ignoreip: adreses, kas nekad netiek bloķētas. Ierakstiet šeit sava biroja statisko IP adresi, ja Jums tāda ir. Neierakstiet šeit lielus diapazonus "drošības pēc".backend = systemd: lasīt journal, nevis teksta failu (nepieciešams Debian 12, ieteicams visur). Šim nolūkam jābūt instalētai pakotneipython3-systemd; parasti tā jau ir instalēta kā atkarība.
Pārlādēšana un pārbaude:
anna@web1:~$ sudo fail2ban-client -t # pārbaudīt konfigurāciju
OK: configuration test is successful
anna@web1:~$ sudo systemctl reload fail2ban
anna@web1:~$ sudo fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshdStatusa nolasīšana, bloķēšana un atbrīvošana
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" ir adreses, kas jau ir veikušas mēģinājumus, bet vēl nav pārsniegušas slieksni. "Currently banned" ir adreses, kas pašlaik ir bloķētas.
Ja esat nobloķējis pats sevi (piemēram, dažas reizes mēģinot ar nepareizu atslēgu vai lietotājvārdu), piesakieties no cita tīkla vai caur konsoli un atbrīvojiet savu adresi:
anna@web1:~$ sudo fail2ban-client set sshd unbanip 198.51.100.20Paša fail2ban žurnāls atrodas /var/log/fail2ban.log un parāda, kad kura adrese tika bloķēta un atbrīvota:
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.77Atkārtotāji: recidive
Daži roboti pēc katras bloķēšanas vienkārši atgriežas. Pret tiem ir divi līdzekļi. bantime.increment (skatiet iepriekš) katru reizi padara bloķēšanu ilgāku. Turklāt ir jail recidive: tas lasa paša fail2ban žurnālu un adresi, kas vienas dienas laikā bieži bloķēta, nobloķē uz nedēļu visos portos. Ieslēgšana Jūsu .local failā:
[recidive]
enabled = trueKo fail2ban dara un ko nedara
fail2ban ir noderīgs, taču tā nav slēdzene durvīs. Slēdzene ir pieteikšanās ar atslēgu, kad paroles ir izslēgtas (nodarbība 2.2). Tāpēc ziniet arī, ko fail2ban nespēj:
- Izkliedēts uzbrukums no tūkstošiem adrešu, katrai ar vienu vai diviem mēģinājumiem, nekad nepārsniedz
maxretry. - Vāja parole paliek vāja. fail2ban palēnina minēšanu, nekas vairāk.
- Tikai tas, kas ir žurnālā: pakalpojumu, kas nereģistrē neveiksmīgus mēģinājumus, vai žurnālu, ko fail2ban nelasa, tas neredz.
- Docker: bloķēšana parastajā ugunsmūra ķēdē neattiecas uz publicētiem konteineru portiem (nodarbība 9.3). Pakalpojumiem konteineros ir vajadzīgs atsevišķs iestatījums (darbība ķēdē
DOCKER-USER).
Ko fail2ban dara labi: uztur žurnālu mierīgu, samazina robotu radīto slodzi un aizsargā pakalpojumus, kuros Jūs (vēl) izmantojat paroles, piemēram, tīmekļa pastu vai pārvaldības paneli. Šādiem pakalpojumiem ir filtri nginx, Postfix, Dovecot un daudziem citiem.
AlmaLinux un Rocky Linux sistēmā
Tur fail2ban nāk no EPEL: dnf install epel-release un pēc tam dnf install fail2ban. Pakotne fail2ban instalē arī sasaisti ar firewalld. SSH pakalpojums saucas sshd. Pašu jail ieslēdziet .local failā; atšķirībā no Debian tas netiek ieslēgts automātiski.
Kopsavilkums
- Roboti visu dienu mēģina pieteikties; ar atslēgām un izslēgtu pieteikšanos ar paroli tie netiek iekšā, bet fail2ban turklāt tos notur pa gabalu.
- Jail ir filtrs + darbība + sliekšņi (
maxretry,findtime,bantime); pēc noklusējuma 5 mēģinājumi 10 minūtēs, 10 minūšu bloķēšana. - Savi iestatījumi failā
jail.localvaijail.d/*.local, nekadjail.conf; izmantojietbackend = systemd(nepieciešams Debian 12). fail2ban-client status sshdparāda bloķētās adreses,set sshd unbanipatbrīvo; recidive unbantime.incrementtiek galā ar atkārtotājiem.- fail2ban neaptur izkliedētus uzbrukumus vai vājas paroles un pats no sevis neredz Docker portus.
Tests
Uzdevums
Uzdevums Z5.3: Ielaušanās žurnāla lasīšana. Piemēra failā ssh-journal-1.txt ir SSH servera ar fail2ban journal fragments, kā arī fail2ban-client status sshd izvade. Atbildiet: kura adrese izmēģināja visvairāk lietotājvārdu, kurai adresei izdevās pieteikties ar atslēgu un kā kuram lietotājam, kura adrese ir bloķēta un cikos, un vai šī adrese ar noklusējuma iestatījumiem (maxretry = 5, findtime = 10m) arī būtu bloķēta? Programma salīdzina ar fiksēto atbilžu atslēgu. Ja Jums ir savs serveris ar fail2ban, apskatiet tur arī fail2ban-client status sshd.
Vairāk lasīt
- Jūsu VPS aizsardzība: pirmās piecas minūtes
- Vai mana piekļuve ir bloķēta? Jūsu IP adrese un mūsu ugunsmūris
- fail2ban, noklusējuma konfigurācija
jail.conf: https://github.com/fail2ban/fail2ban/blob/master/config/jail.conf - Rokasgrāmata
jail.conf(5): https://manpages.debian.org/trixie/fail2ban/jail.conf.5.en.html
