Към съдържанието

Настройки за бисквитки

Изберете кои видове бисквитки разрешавате. Можете да промените избора си по всяко време чрез „Настройки за бисквитки“ в долната част на всяка страница. Декларация за поверителност

Необходими

Винаги включени

Нужни са за вход, за запазване на количката и на Вашите избори. Те са винаги включени.

Кои бисквитки?
  • weboke_sessie, weboke_klant, weboke_remember: Вашата сесия и оставането в акаунта
  • weboke_basket: Вашата количка
  • wkBtwIncl: показване на цените с или без ДДС
  • wok_cookies: Вашият избор за бисквитките, 12 месеца

Измерват коя реклама води до посещение или поръчка, за да не плащаме за реклами без резултат.

Кои бисквитки?
  • Google Ads чрез Google Tag Manager (_gcl_au, _gcl_aw), до 90 дни
  • OpenAI Ads, реклами в ChatGPT
  • wok_aff: кой партньор Ви е препратил към нас (партньорска програма), 60 дни

4,6

Държава и език

Всяка държава има собствен сайт, с цените и ДДС на тази държава.

Преглед

fail2ban срещу опити за отгатване на пароли

Модул 5: Защита на мрежата · Време за четене: 10 минути

Цел на урока: След този урок ще можете да настроите fail2ban за SSH, да четете статуса и лога му, да отблокирате отново даден адрес и да обясните какво fail2ban защитава и какво не.

Основни понятия: brute force, jail, филтър, действие (banaction), maxretry, findtime, bantime, bantime.increment, ignoreip, backend systemd, jail.conf, jail.local и jail.d, fail2ban-client, recidive

Хората, които натискат дръжката на всяка врата в интернет

Погледнете лога на SSH един ден след инсталацията и ще го видите: стотици опити за влизане с имена като root, admin, test, ubuntu и oracle, от адреси от целия свят.

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 услугата се казва ssh, в AlmaLinux и Rocky sshd. Името на процеса може да бъде sshd или sshd-session в зависимост от версията на OpenSSH.) Това е brute-force атака: ботове, които просто изпробват всички разпространени имена и пароли. Когато влизате с ключове и влизането с парола е изключено (урок 2.2), те никога няма да влязат, колкото и пъти да опитват. Но те пълнят Вашия лог, отнемат известна изчислителна мощ, а при услуги, при които все пак е нужна парола (уебпоща, административен панел), могат да бъдат наистина опасни.

fail2ban чете логове, разпознава неуспешните опити и заключва за известно време във firewall адрес, който се проваля твърде често.

Как мисли fail2ban: jails

fail2ban работи с jails (килии). Един jail съчетава три неща:

  • филтър: регулярни изрази, които разпознават неуспешни опити в даден лог (например реда "Invalid user ... from <adres>");
  • действие: какво става при твърде много опити, обикновено правило във firewall, което блокира адреса (banaction, в Debian 13 по подразбиране чрез nftables);
  • прагове: колко неуспешни опита (maxretry) за какво време (findtime) водят до блокиране за колко време (bantime).

Стойностите по подразбиране от jail.conf са: maxretry = 5, findtime = 10m, bantime = 10m. Тоест: пет неуспешни опита в рамките на десет минути водят до блокиране за десет минути.

Инсталиране и капанът на Debian 12

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

В Debian и Ubuntu jail за SSH ([sshd]) е включен веднага след инсталирането чрез файла /etc/fail2ban/jail.d/defaults-debian.conf.

Има един известен капан. fail2ban трябва да знае къде се намира логът. Преди това беше текстовият файл /var/log/auth.log. От Debian 12 rsyslog вече не се инсталира по подразбиране и съобщенията се записват само в journal на systemd (урок 6.2). Пакетът fail2ban на Debian 12 все още търсеше /var/log/auth.log, не го намираше и не стартираше. Debian 13 реши проблема, като в defaults-debian.conf за SSH задава backend = systemd. В Debian 12 решавате проблема сами (вижте по-долу), като направите същото. Ubuntu все още има rsyslog по подразбиране, но backend = systemd работи и там.

Вашите собствени настройки: jail.local

Никога не променяйте jail.conf: този файл се заменя при актуализация. Поставете собствените си настройки в /etc/fail2ban/jail.local или във файл в /etc/fail2ban/jail.d/ с разширение .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

Какво правят редовете:

  • bantime = 1h: блокиране за един час вместо за десет минути.
  • bantime.increment = true: който се върне след блокиране, получава всеки път по-дълго блокиране.
  • ignoreip: адреси, които никога не се блокират. Въведете тук фиксирания IP адрес на Вашия офис, ако имате такъв. Не въвеждайте тук големи диапазони "за всеки случай".
  • backend = systemd: чете journal вместо текстов файл (необходимо в Debian 12, препоръчително навсякъде). За целта трябва да е инсталиран пакетът python3-systemd; обикновено той вече е инсталиран като зависимост.

Презареждане и проверка:

anna@web1:~$ sudo fail2ban-client -t            # тест на конфигурацията
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

Четене на статуса, блокиране и отблокиране

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" са адресите, които вече са правили опити, но все още не са надхвърлили прага. "Currently banned" са адресите, които в момента са блокирани.

Ако сте блокирали сами себе си (например като сте опитали няколко пъти с грешен ключ или потребителско име), влезте през друга мрежа или през конзолата и отблокирайте адреса си:

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

Логът на самия fail2ban се намира в /var/log/fail2ban.log и показва кога кой адрес е бил блокиран и отблокиран:

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

Повторни нарушители: recidive

Някои ботове просто се връщат след всяко блокиране. За тях има две средства. bantime.increment (по-горе) прави блокирането всеки път по-дълго. Освен това има jail recidive: той чете лога на самия fail2ban и блокира за една седмица на всички портове адрес, който е бил блокиран често в рамките на един ден. Включва се във Вашия .local файл:

[recidive]
enabled = true

Какво fail2ban прави и какво не прави

fail2ban е полезен, но не е ключалката на вратата. Ключалката е влизането с ключ при изключени пароли (урок 2.2). Затова трябва да знаете и какво fail2ban не може:

  • Разпределена атака от хиляди адреси, всеки с един или два опита, никога не надхвърля maxretry.
  • Слабата парола си остава слаба. fail2ban забавя отгатването, нищо повече.
  • Само това, което е в лога: услуга, която не записва неуспешните опити, или лог, който fail2ban не чете, остават невидими за него.
  • Docker: блокиранията в обикновената верига на firewall не важат за публикуваните портове на контейнери (урок 9.3). За услуги в контейнери е нужна отделна настройка (действие върху веригата DOCKER-USER).

Какво fail2ban прави добре: поддържа лога спокоен, намалява натоварването от ботове и защитава услуги, при които (все още) използвате пароли, например уебпоща или административен панел. За такива услуги има филтри за nginx, Postfix, Dovecot и много други.

В AlmaLinux и Rocky Linux

Там fail2ban идва от EPEL: dnf install epel-release и след това dnf install fail2ban. Пакетът fail2ban инсталира и връзката с firewalld. SSH услугата се казва sshd. Включете самия jail в .local файл; за разлика от Debian, той не е включен автоматично.

Обобщение

  • Ботовете опитват да влязат по цял ден; при ключове и изключено влизане с парола те не влизат, а fail2ban освен това ги държи на разстояние.
  • Един jail е филтър + действие + прагове (maxretry, findtime, bantime); по подразбиране 5 опита за 10 минути, блокиране за 10 минути.
  • Собствените настройки са в jail.local или jail.d/*.local, никога в jail.conf; използвайте backend = systemd (необходимо в Debian 12).
  • fail2ban-client status sshd показва блокираните адреси, set sshd unbanip отблокира; recidive и bantime.increment се справят с повторните нарушители.
  • fail2ban не спира разпределени атаки или слаби пароли и не вижда портовете на Docker сам по себе си.

Тест (quiz)

1. Инсталирали сте fail2ban в Debian 12 и той не стартира със съобщение, че няма лог файл за jail sshd. Каква е причината?



2. Защо поставяте настройките си в jail.local, а не в jail.conf?



3. Настройките по подразбиране са maxretry = 5, findtime = 10m, bantime = 10m. Един адрес прави неуспешен опит в 14:00, 14:03, 14:05, 14:08 и 14:09. Какво се случва?



4. Вашият сървър получава всеки ден хиляди опити за влизане, разпределени между десетки хиляди адреси, всеки с по един опит. Какво прави fail2ban срещу това?



5. Блокирали сте сами себе си, като няколко пъти сте въвели грешно потребителско име. Кое е правилното решение?



Задача

Задача Z5.3: Четене на лог от проникване. В примерния файл ssh-journal-1.txt има част от journal на SSH сървър с fail2ban, както и изхода на fail2ban-client status sshd. Отговорете: кой адрес е опитал най-много потребителски имена, кой адрес е успял да влезе с ключ и като кой потребител, кой адрес е блокиран и в колко часа, и дали този адрес би бил блокиран и при настройките по подразбиране (maxretry = 5, findtime = 10m)? Програмата сравнява отговорите с фиксирания ключ. Ако имате собствен сървър с fail2ban, разгледайте и там fail2ban-client status sshd.

Задача Z5.3: Четене на лог от проникване

Файл към тази задача: ssh-journal-1.txt








Това, което въвеждате, и резултатите от проверката не се съхраняват. Браузърът Ви запомня отговорите и дали сте изпълнили задачата. Ако сте влезли, запазваме само дали задачата е била (почти) правилна в Моите курсове; и там можете да го изтриете.

Още за четене

Моля, изчакайте…

Настройте домейните си

За всеки домейн настройте сървърите за имена, връзката с хостинга и кой ще бъде собственикът.

Домейните Ви се зареждат…