Fail2ban чете журнали, брои съвпаденията с регулярен израз и добавя правило във защитната стена, когато броячът достигне тавана. Цялата полза е в настройката — след инсталацията е активен само един jail, и той е за SSH.

Къде се слагат настройките

Файлът /etc/fail2ban/jail.conf не бива да се пипа — при обновяване на пакета се презаписва. Вашите стойности отиват в /etc/fail2ban/jail.local, който трябва да съдържа само това, което променяте.

[DEFAULT]
bantime  = 24h
findtime = 1h
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.25

ignoreip е редът, който се пише пръв. Без него рано или късно ще блокирате собствения си адрес и после се влиза само през конзолата в панела на хостинга.

За bantime

Стойността по подразбиране от десет минути на практика е безсмислена: автоматичният налучквач на пароли се връща и продължава. Едно денонощие е разумен минимум. Още по-добре е постепенното увеличаване:

bantime.increment = true
bantime.factor    = 2
bantime.maxtime   = 30d

Така връщащият се получава все по-дълги блокировки, докато едно неуспешно влизане на истински потребител не се наказва тежко.

Jail-ове, които си струва да се включат

sshd вече работи. Ако сте изключили изцяло влизането с парола, jail-ът не носи голяма полза, но и не вреди.

Удостоверяването на уеб сървъра. Ако нещо е защитено с парола през сървъра:

[nginx-http-auth]
enabled = true

[apache-auth]
enabled = true

Формата за вход на вашето приложение. Тук няма готов филтър — формата за парола на сайта пише в собствения журнал на приложението, в собствен формат. Филтъра пишете сами в /etc/fail2ban/filter.d/, и точно този jail дава най-много, защото точно там се налучкват пароли.

Postfix и Dovecot, ако сървърът обслужва поща. Пощенските портове са подложени на налучкване поне колкото SSH.

recidive — jail, който чете собствения журнал на Fail2ban и дава дълги блокировки на адреси, вече блокирани няколко пъти:

[recidive]
enabled  = true
bantime  = 4w
findtime = 1d
maxretry = 3

Проверете, че наистина работи

sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Последната команда е най-важната и се използва прекалено рядко. Тя показва на колко реда от журнала филтърът реално съвпада. Нула съвпадения означава, че jail-ът работи, но не прави нищо — или пътят до журнала е грешен, или форматът не съвпада.

Това е и най-честата причина Fail2ban да изглежда работещ, без да блокира никого: на Debian 12 и Ubuntu 24.04 /var/log/auth.log вече не съществува по подразбиране. Решението е или да се инсталира rsyslog, или jail-ът да се насочи към журнала:

[sshd]
backend = systemd

Отблокиране на самия себе си

sudo fail2ban-client set sshd unbanip 203.0.113.25
sudo fail2ban-client unban --all

Това е добре да се знае предварително, а не в мига, в който стоите отвън.

Какво Fail2ban не може

Той работи с честотата от един и същ адрес. Разпределена атака — хиляда адреса по един опит — минава направо, защото никой брояч не достига тавана си. Това е принципно ограничение, а не грешка в настройката.

Не спира и уязвимост в приложението. Заявка, която използва дупка в разширение, успява от първия път и не оставя нито едно неуспешно влизане. Fail2ban премахва фоновия шум; той не заменя навременните обновявания.

Практическата стойност се вижда в числата във времето: колко адреса са блокирани сега, кой jail се задейства най-често, дали броят не се е променил рязко. Jail, който е спрял да улавя каквото и да било, е признак, че журналът се е преместил — а това се забелязва само ако някой гледа. Как изглежда всичко това на една страница, показва демонстрацията по-долу.