Сразу отмечу, что fail2ban нельзя использовать как полноценный инструмент защиты доступа к управлению маршрутизатором. Доступ к службам управления по‑умолчанию должен быть закрыт фаерволом из всех сетей за исключением management. И, возможно, с адресов из локального «белого списка». Fail2ban, применяется к management‑интерфейсу на случай, когда злоумышленник уже получил доступ в подсеть управления. Либо в подсети управления оказался вирус, троян, нелояльный пользователь. Также бывали случаи, когда трафик управления мог пропускаться из‑за ошибки в правилах фаервола. Итак, fail2ban, это скорее последний уровень защиты управления маршрутизатором. Для начала создаем скрипт, который будет выполнять работу по поиску и извлечению адреса из тела сообщения системы «$message». Помещаем скрипт в системную библиотеку скриптов /system scripts на маршрутизаторе и присваиваем скрипту название «loginfail2ban». Читать далее
Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели11K
Туториал
Сразу отмечу, что fail2ban нельзя использовать как полноценный инструмент защиты доступа к управлению маршрутизатором. Доступ к службам управления по‑умолчанию должен быть закрыт фаерволом из всех сетей за исключением management. И, возможно, с адресов из локального «белого списка». Fail2ban, применяется к management‑интерфейсу на случай, когда злоумышленник уже получил доступ в подсеть управления. Либо в подсети управления оказался вирус, троян, нелояльный пользователь. Также бывали случаи, когда трафик управления мог пропускаться из‑за ошибки в правилах фаервола. Итак, fail2ban, это скорее последний уровень защиты управления маршрутизатором.
Для начала создаем скрипт, который будет выполнять работу по поиску и извлечению адреса из тела сообщения системы «$message». Помещаем скрипт в системную библиотеку скриптов /system scripts на маршрутизаторе и присваиваем скрипту название «loginfail2ban».
:local ListName "BlackList1"
:local BanTime 1d
:local LogMess "fail2ban added address "
:local at [:find $message " from "]
:local r1 [:pick $message ($at + 6) [:find $message " via " $at]]
:if (([:typeof [:toip $r1]])="ip") do={
:do {/ip firewall address-list add list=$ListName address=([:toip $r1]) timeout=$BanTime;
:log warning ($LogMess.[tostr $r1] ." to list ".$ListName);
exit } \
on-error={
:log warning ("address IPv4 already exist in ".$ListName);
exit}
}
:if (([:typeof [:toip6 $r1]])="ip6") do={
:do {/ipv6 firewall address-list add list=$ListName address=([:toip6 $r1]) timeout=$BanTime;
:log warning ($LogMess.[tostr $r1]." to list ".$ListName);
exit } \
on-error={
:log warning ("address IPv6 already exist in ".$ListName);
exit}
}
:log warning "Fail2ban - no address found to block bruteforce"Переменная «ListName» содержит имя для address‑list фаервола. Переменная «BanTime» указывает время на которое будет добавлена динамическая запись в адрес‑листе.
После этого нужно включить механизм активации скрипта при неудачном логине. Делается это в контексте /system logging
/system logging action add name=fail2ban target=script script=loginfail2ban
/system logging add action=fail2ban regex=“^login failure” topics=system,error,critical Первое действие описывает новый action=script вызывающий ранее созданный скрипт с именем «loginfail2ban», хранящийся в библиотеке скриптов.
Второе действие создает непосредственный триггер, который срабатывает только при возникновении сообщения с сочетанием топиков «system+error+critical» и при наличии в начале сообщения подстроки «login failure».
Особенности эксплуатации:
Скрипт умеет обрабатывать адреса и протоколов IPv6 и IPv4.
Скрипт пропускает MAC‑адреса, так как протоколы MAC‑Winbox и MAC‑Telnet не блокируются привычным IP/IPv6 фаерволом.
Скрипт срабатывает при любом неправильном вводе пароля. По этому есть шанс попасть в бан при первом же неправильном вводе пароля. Об этом вам предстоит позаботиться заранее самостоятельно.
В фаерволе ip и ipv6 должны существовать правила, блокирующие доступ с src‑address‑list=BlackList1 (название списка приведено для примера и его можно менять)
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Как строить сканирование активов в MaxPatrol VM. Ч.3 — Linux-активы | 0 | 12.1 | 12-10-2026 |
| 2 | Консоль починки сети по аудиокабелю: когда SSH уже бесполезен | 0 | 8.26 | 01-10-2026 |
| 3 | Bank — сложная машина от aclabs.pro со взломом пин-кода, пивотингом и побегом из контейнера | 0 | 11.48 | 23-09-2026 |
| 4 | Как мы создавали решение для автоматизации управления доступами | 0 | 8.9 | 06-10-2026 |
| 5 | Почему нельзя запретить сотрудникам иностранные нейросети: вопросы о безопасности ИИ для бизнеса | 0 | 7.52 | 12-10-2026 |
| 6 | Карты говорят, что сеть будет работать: как контролировать изменения с помощью цифрового двойника | 0 | 7.37 | 09-10-2026 |
| 7 | Доверить сервер ИИ-агенту и не пожалеть: как спать спокойно без SSH | 0 | 12.58 | 26-09-2026 |
| 8 | Windows Incident Response: системный подход. Часть 1 | 0 | 7.78 | 24-09-2026 |
| 9 | Атаки с подменой адреса: Никто не проверяет 42 символа | 0 | 10.06 | 25-09-2026 |