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, който е спрял да улавя каквото и да било, е признак, че журналът се е преместил — а това се забелязва само ако някой гледа. Как изглежда всичко това на една страница, показва демонстрацията по-долу.