ESPN DeportesFlick anuncia baja de Raphinha y confirma dos titularesESPNLegendary coach, Hall of Fame TE Ditka dies at age 86InquirerLRT-1 operator to upgrade PITX station for better passenger flowThe Jerusalem PostA casualty of war: Israel's breathtaking historical site remains out of reach after October 7Daily MaverickCricket: Anrich Nortje’s impressive Test cricket return hands Proteas narrow advantage over AussiesZDF heuteAktuelle Pressemitteilungen des ZDFDeadlineDanny Boyle Says ‘28 Years Later: Part III’ Is Currently On The “Back Burner”Radio TimesTop 10 Picks of the Week – Sunday 11 OctoberBBC NewsLib Dem MP quits frontbench job over Ed Davey's leadershipCBS NewsHurricane Isaias becomes Category 3 storm as it threatens northern Gulf CoastGolem.dePornhub und Youporn: Oberverwaltungsgericht lehnt Sperren gegen Pornoseiten abDW EnglishFranco-German relations: Steinmeier and Macron say their farewells and create a new momentum for Europe
The Daily Newsstand · Free, Always
Friday, October 9, 2026

Реализация fail2ban на MikroTik RouterOS

Translate

Реализация выполнена при помощи встроенных триггеров RouterOS, без использования внешних сервисов и без периодических запусков скриптов по шедулеру.

Сразу отмечу, что 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".

Особенности эксплуатации:

  1. Скрипт умеет обрабатывать адреса и протоколов IPv6 и IPv4.

  2. Скрипт пропускает MAC-адреса, т.к. протоколы MAC-Winbox и MAC-Telnet не блокируются привычным IP/IPv6 фаерволом.

  3. Скрипт срабатывает при любом неправильном вводе пароля. По этому есть шанс попасть в бан при первом же неправильном вводе пароля. Об этом вам предстоит позаботиться заранее самостоятельно.

  4. В фаерволе ip и ipv6 должны существовать правила, блокирующие доступ с src-address-list=BlackList1 (название списка приведено для примера и его можно менять)

View the original on Хабр →

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.