Уведомления Fail2ban в Notifly
Fail2ban автоматически банит IP, которые ломятся в SSH, веб-панель или почтовый сервер. По умолчанию он пишет только в лог. Подключим к нему Notifly — увидим живую картину атак.
Action для Notifly
Заголовок раздела «Action для Notifly»Создайте файл /etc/fail2ban/action.d/notifly.conf:
[Definition]actionstart = curl -s --max-time 10 "%(notifly_url)s/message?token=%(notifly_token)s" \ -H "Content-Type: application/json" \ -d '{"title":"🟢 Fail2ban запущен","message":"Jail <name> on <fq-hostname>","priority":3}'
actionstop = curl -s --max-time 10 "%(notifly_url)s/message?token=%(notifly_token)s" \ -H "Content-Type: application/json" \ -d '{"title":"🔴 Fail2ban остановлен","message":"Jail <name> on <fq-hostname>","priority":4}'
actionban = curl -s --max-time 10 "%(notifly_url)s/message?token=%(notifly_token)s" \ -H "Content-Type: application/json" \ -d '{"title":"🚫 Бан в jail <name>","message":"IP <ip> заблокирован на <fq-hostname>. Попыток: <failures>.","priority":5}'
actionunban = curl -s --max-time 10 "%(notifly_url)s/message?token=%(notifly_token)s" \ -H "Content-Type: application/json" \ -d '{"title":"✅ Разбан в jail <name>","message":"IP <ip> разблокирован на <fq-hostname>","priority":3}'
[Init]notifly_url = https://your-notifly.example.comnotifly_token = AGdjfk_L.dKe8qПодключение к jail
Заголовок раздела «Подключение к jail»В /etc/fail2ban/jail.local добавьте action к нужному jail:
[sshd]enabled = truemaxretry = 5bantime = 1haction = %(action_)s notiflyПерезапустите Fail2ban:
sudo systemctl restart fail2bansudo fail2ban-client status sshdСпровоцируйте бан — например, с другой машины введите неправильный пароль 5 раз:
for i in 1 2 3 4 5; do ssh -o PreferredAuthentications=password wronguser@server; doneВ Notifly придёт «🚫 Бан в jail sshd».
Сообщение о реальной угрозе
Заголовок раздела «Сообщение о реальной угрозе»Если хотите, чтобы громкое уведомление приходило только при «массовой атаке»,
поднимите priority до 9 в actionban и фильтруйте по <failures>:
actionban = curl -s --max-time 10 "%(notifly_url)s/message?token=%(notifly_token)s" \ -H "Content-Type: application/json" \ -d '{"title":"🚨 Атака на <name>","message":"IP <ip>: <failures> попыток за <bantime>s","priority":9}'Или сделайте отдельный jail с очень коротким findtime/maxretry —
он будет триггериться только на массированные брутфорсы.
- Real-time картина атак. Сразу понятно, по каким сервисам идёт огонь и из каких сетей.
- Подтверждение, что Fail2ban работает. Старт/стоп тоже приходят — если на сервере падает fail2ban, вы об этом узнаете.
- Удобно для аудитов. История уведомлений в Notifly = история банов с поиском и фильтрами.
Что улучшить дальше
Заголовок раздела «Что улучшить дальше»- Добавьте геолокацию: получайте
<ip>черезgeoiplookupв скрипте-обёртке. - Сделайте отдельный jail для «постоянных гостей» (
recidive) — на них настройтеpriority=10. - Объедините с уведомлением о SSH-входах, чтобы весь периметр был как на ладони.