fail2ban для VPN на Mikrotik

Брутфорсят VPN сервер? Зомби-клиенты бесконечно пытаются подключиться, не зная, что их учётку уже давно снесли? Я не нашёл готового решения для Mikrotik, по этому, пришлось обратиться за помощью к ChatGPT. Через несколько попыток и ручной отладки получился рабочий вариант.

Собственно, добавляем вот этот скрипт в system > scripts:

:local threshold 3;
:local interval 60;
:local currentTime [:tostr [/system clock get time]];
:local count [/log find where (message~"authentication failed") && (message~"user") && (time>=($currentTime-$interval))];
:foreach log in=$count do={
    :local logMessage [/log get $log message];
    :local srcAddr [:pick $logMessage 1 [:find $logMessage ">"]];
    :local srcUser [:pick $logMessage [:find $logMessage "user"] [:len $logMessage]];
    :local countAddr [/log find where (message~"authentication failed") && (message~$srcAddr) && (message~$srcUser)];
    :if ([:len $countAddr] >= $threshold) do={
        /ip firewall address-list add list=ban-l2tp address=$srcAddr timeout=1h;
    }
}

Скрипт будет запускаться планировщиком, искать в логах неудачные попытки авторизации и добавлять соурс адрес в назначенный список. timeout=1h можно убрать, в таком случае, адрес не исчезнет из списка автоматически.

Идём в system > scheduler и добавляем задачу:

Ну, и конечно же, добавляем в фильтр правило, которое, например, запрещает весь трафик с адресов из собранного списка.

Проверено на l2tp с Routeros 7.14