Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
tgrba
Сообщения: 4
Зарегистрирован: 21 ноя 2021, 19:13

drpioneer писал(а): 16 янв 2021, 00:58 Приветствую.

Подправил скрипт ....
Приветствую, скрипт отлично отрабатывает, но у меня есть сообщения в логе как на картинке. Как забанить IP из лога?
Изображение


Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

tgrba писал(а): 21 ноя 2021, 19:19 Приветствую, скрипт отлично отрабатывает, но у меня есть сообщения в логе как на картинке. Как забанить IP из лога?
Изображение
Приветствую.

Таких сообщений у себя в журнале я не встречал, поэтому для понимания, как обрабатывать такие события, приходится вопросы задавать вам:
- что означает <15> во второй строке?
- что нужно сделать, чтобы гарантированно получить такое же сообщение у себя?
- можете еще накидать похожие примеры из своего лога?

Заранее спасибо.


Ca6ko
Сообщения: 1484
Зарегистрирован: 23 ноя 2018, 11:08
Откуда: Харкiв

дел


1-е Правило WiFi - Везде где только можно откажитесь от WiFi!
2-е Правило WiFi -Устройство, которое пользователь не носит с собой постоянно, должно подключаться кабелем!!

Микротики есть разные: черные, белые, красные. Но все равно хочется над чем нибудь заморочится.
tgrba
Сообщения: 4
Зарегистрирован: 21 ноя 2021, 19:13

drpioneer писал(а): 21 ноя 2021, 23:32
tgrba писал(а): 21 ноя 2021, 19:19 Приветствую, скрипт отлично отрабатывает, но у меня есть сообщения в логе как на картинке. Как забанить IP из лога?
Изображение
Приветствую.

Таких сообщений у себя в журнале я не встречал, поэтому для понимания, как обрабатывать такие события, приходится вопросы задавать вам:
- что означает <15> во второй строке?
- что нужно сделать, чтобы гарантированно получить такое же сообщение у себя?
- можете еще накидать похожие примеры из своего лога?

Заранее спасибо.
Приветствую, мне удается воспроизвести данное сообщение если я пробую подключиться к микротик с компьютера через LTE используя неправильный логин через PPTP. Если хотите напишите мне в ПМ ваш IP, я попробую подключиться
Изображение


Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

tgrba писал(а): 22 ноя 2021, 12:13 Приветствую, мне удается воспроизвести данное сообщение если я пробую подключиться к микротик с компьютера через LTE используя неправильный логин через
Добрый день.

Мне удалось спровоцировать подобные события на своём оборудовании. Спасибо.
Вроде определился, как блокировать такие события.
Прилагаю обновленный скрипт:

Код: Выделить всё




# Script for blocking dangerous addresses that tried to connect to the router by drPioneer
# https://forummikrotik.ru/viewtopic.php?p=82374#p82374
# tested on ROS 6.49
# updated 2021/11/23

:do {
    :local outMsg "Dangerous addresses detected:";
    :local lenMsg [:len $outMsg];

    # ----------- Stage 1 - search for a device login attempt ----------- 
    foreach routerUser in=[ /user find disabled=no; ] do={
        do {
            foreach dangerString in=[ /log find message~"login failure for user"; ] do={
                do { 
                    :local stringTemp ([ /log get $dangerString message ]);
                    :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1 )]);
                    :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via"  ] - 1 )]);
                    :local dangerVia  ([ :pick $stringTemp ([ :find $stringTemp "via"  ])     ([ :find $stringTemp "via"  ] + 20)]);
                    if ($routerUser != $dangerUser) do={
                        if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                            /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                            :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")");
                        } 
                    }
                } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Login failure for user' in log."); } 
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found active router user."); }
    }

    # ----------- Stage 2 - search for login attempts via WinBox  ----------- 
    foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (not allowed WinBox user IP-address)");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Denied winbox/dude connect from' in log."); }
    }

    # ----------- Stage 3 - search for an attempt to enter through IPSec password ----------- 
    foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP   ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong IPSec password)");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Parsing packet failed, possible cause: wrong password' in log."); }
    }

    # ----------- Stage 4 - search for an attempt to enter through IPSec proposal ----------- 
    foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP   ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)");
            } 
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Failed to get valid proposal' in log."); }
    }

    # ----------- Stage 5 - search for an attempt to enter through L2TP ----------- 
    foreach dangerString in=[ /log find topics~"l2tp" message~"user" message~"authentication failed"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
            :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "<"    ] + 1) ([ :find $stringTemp ">" ]) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of L2TP 'User' & 'Authentication failed' in log."); }
    }    

    # ----------- Stage 6 - search for an attempt to enter through PPTP  ----------- 
    foreach dangerStr1 in=[ /log find topics~"pptp" message~"user" message~"authentication failed"; ] do={
        do {
            foreach dangerStr2 in=[ /log find topics~"pptp" message~"TCP connection established from"; ] do={
                do {
                    :local stringId1 ("0x".[:pick $dangerStr1 ([:find $dangerStr1 "*"] + 1) [:len $dangerStr1]]);
                    :local stringId2 ("0x".[:pick $dangerStr2 ([:find $dangerStr2 "*"] + 1) [:len $dangerStr2]]);
                    if (($stringId1 - $stringId2) = 1) do={
                        :local stringTemp ([ /log get $dangerStr1 message ]);
                        :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
                        :local stringTemp ([ /log get $dangerStr2 message ]);
                        :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
                        if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                            /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                            :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong PPTP user '".$dangerUser."')");
                        }
                    }
                } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
    }

    # ----------- Output searching results ----------- 
    if ([:len $outMsg] > $lenMsg) do={
        :put $outMsg;
        :log warning $outMsg;
    }
}



Пробуйте и отпишите о результате.
Заранее благодарю.


tgrba
Сообщения: 4
Зарегистрирован: 21 ноя 2021, 19:13

Приветствую, затестил норм работает, респект!!!


NdeB
Сообщения: 2
Зарегистрирован: 29 ноя 2021, 13:56

drpioneer писал(а): 22 май 2020, 22:54
Теперь в черный список отправляются все граждане, пытающиеся:
[*] залогиниться на роутер с несуществующим именем роутера (строка в логе: 'login failure for user XXXXXXX'),
[*] 3 и более раз подобрать пароль IPSec (строка в логе: 'parsing packet failed, possible cause: wrong password'),
[*] подключиться по IPSec c несовпадающим proposal (2 строки в логе: 'failed to get valid proposal' и 'failed to pre-process').
[*] 3 и более раз подобрать пароль L2TP (строка в логе: 'user XXXXXXX authentication failed'),
[/list]


Доброго времени суток, давно и часто пользуюсь вашим скриптом, огромное вам за это спасибо! Возникла проблема, надо сделать дать пользователям шансы на 3 попытки для # ----------- Stage 6 - search for an attempt to enter through PPTP ----------- . Пытался сам мозгов не хватило. Можете помочь?
 
:do {
:local outMsg "Dangerous addresses detected:";
:local lenMsg [:len $outMsg];

# ----------- Stage 6 - search for an attempt to enter through PPTP -----------
foreach dangerStr1 in=[ /log find topics~"pptp" message~"user" message~"authentication failed"; ] do={
do {
foreach dangerStr2 in=[ /log find topics~"pptp" message~"TCP connection established from"; ] do={
do {
:local stringId1 ("0x".[:pick $dangerStr1 ([:find $dangerStr1 "*"] + 1) [:len $dangerStr1]]);
:local stringId2 ("0x".[:pick $dangerStr2 ([:find $dangerStr2 "*"] + 1) [:len $dangerStr2]]);
if (($stringId1 - $stringId2) = 1) do={
:local stringTemp ([ /log get $dangerStr1 message ]);
:local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
:local stringTemp ([ /log get $dangerStr2 message ]);
:local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
/ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
:set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong PPTP user '".$dangerUser."')");
}
}
} on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
}
} on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
}

# ----------- Output searching results -----------
if ([:len $outMsg] > $lenMsg) do={
:put $outMsg;
:log warning $outMsg;
}
}


Аватара пользователя
drpioneer
Сообщения: 142
Зарегистрирован: 30 май 2013, 10:20

NdeB писал(а): 29 ноя 2021, 14:09 ...
дать пользователям шансы на 3 попытки для # ----------- Stage 6 - search for an attempt to enter through PPTP ----------- . Пытался сам мозгов не хватило. Можете помочь?
...
Добрый день.

Для себя считаю вариант с 3-мя попытками входа бесперспективным потому-что:
- у пользователя заранее должен быть преднастроен вход с правильными логином и паролем в угоду безопасности VPN.
- шансы на 3 попытки за какой период? Как этот период описать в скрипте не громоздя кучу кода и не нагружая роутер всякой фигней?

Поэтому, чисто для отвлечения и разминки мозгов, по вашей просьбе написал костыль:

Код: Выделить всё



:do {
    :local outMsg "Dangerous addresses detected:";
    :local lenMsg [:len $outMsg];

    # ----------- Stage 6 - search for an attempt to enter through PPTP -----------
    :local counter 0;
    foreach dangerStr1 in=[ /log find topics~"pptp" message~"user" message~"authentication failed"; ] do={
        do {
            foreach dangerStr2 in=[ /log find topics~"pptp" message~"TCP connection established from"; ] do={
                do {
                    :local stringId1 ("0x".[:pick $dangerStr1 ([:find $dangerStr1 "*"] + 1) [:len $dangerStr1]]);
                    :local stringId2 ("0x".[:pick $dangerStr2 ([:find $dangerStr2 "*"] + 1) [:len $dangerStr2]]);
                    if (($stringId1 - $stringId2) = 1) do={ :set counter ($counter + 1); }
                    if ($counter > 2) do={
                        :local stringTemp ([ /log get $dangerStr1 message ]);
                        :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
                        :local stringTemp ([ /log get $dangerStr2 message ]);
                        :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
                        if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={
                            /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                            :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong PPTP user '".$dangerUser."')");
                        }
                    }
                } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
    }

    # ----------- Output searching results -----------
    if ([:len $outMsg] > $lenMsg) do={
        :put $outMsg;
        :log warning $outMsg;
    }
}


Идея костыля такая: введен счетчик количества невалидных попыток входа. Если это количество превышает заданный порог (в коде указан порог = 2), тогда проблемный IP-адрес блокируется.
Обратите внимание, счетчик считает ВСЕ невалидные попытки входа, зарегистрированные в журнале, со всеми вытекающими из этого обстоятельства последствиями.


NdeB
Сообщения: 2
Зарегистрирован: 29 ноя 2021, 13:56

drpioneer писал(а): 29 ноя 2021, 15:28
Добрый день.

Для себя считаю вариант с 3-мя попытками входа бесперспективным потому-что:
- у пользователя заранее должен быть преднастроен вход с правильными логином и паролем в угоду безопасности VPN.
- шансы на 3 попытки за какой период? Как этот период описать в скрипте не громоздя кучу кода и не нагружая роутер всякой фигней?

Поэтому, чисто для отвлечения и разминки мозгов, по вашей просьбе написал костыль:
Спасибо огромное! И извините за беспокойство)


tranceinsane
Сообщения: 1
Зарегистрирован: 06 дек 2021, 09:47

drpioneer писал(а): 23 ноя 2021, 09:09
tgrba писал(а): 22 ноя 2021, 12:13 Приветствую, мне удается воспроизвести данное сообщение если я пробую подключиться к микротик с компьютера через LTE используя неправильный логин через
Добрый день.

Мне удалось спровоцировать подобные события на своём оборудовании. Спасибо.
Вроде определился, как блокировать такие события.
Прилагаю обновленный скрипт:

Код: Выделить всё




# Script for blocking dangerous addresses that tried to connect to the router by drPioneer
# https://forummikrotik.ru/viewtopic.php?p=82374#p82374
# tested on ROS 6.49
# updated 2021/11/23

:do {
    :local outMsg "Dangerous addresses detected:";
    :local lenMsg [:len $outMsg];

    # ----------- Stage 1 - search for a device login attempt ----------- 
    foreach routerUser in=[ /user find disabled=no; ] do={
        do {
            foreach dangerString in=[ /log find message~"login failure for user"; ] do={
                do { 
                    :local stringTemp ([ /log get $dangerString message ]);
                    :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "from" ] - 1 )]);
                    :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :find $stringTemp "via"  ] - 1 )]);
                    :local dangerVia  ([ :pick $stringTemp ([ :find $stringTemp "via"  ])     ([ :find $stringTemp "via"  ] + 20)]);
                    if ($routerUser != $dangerUser) do={
                        if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                            /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                            :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong router user '".$dangerUser."' ".$dangerVia.")");
                        } 
                    }
                } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Login failure for user' in log."); } 
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found active router user."); }
    }

    # ----------- Stage 2 - search for login attempts via WinBox  ----------- 
    foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (not allowed WinBox user IP-address)");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Denied winbox/dude connect from' in log."); }
    }

    # ----------- Stage 3 - search for an attempt to enter through IPSec password ----------- 
    foreach dangerString in=[ /log find message~"parsing packet failed, possible cause: wrong password"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP   ([ :pick $stringTemp 0 ([ :find $stringTemp "parsing" ] - 1) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong IPSec password)");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Parsing packet failed, possible cause: wrong password' in log."); }
    }

    # ----------- Stage 4 - search for an attempt to enter through IPSec proposal ----------- 
    foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerIP   ([ :pick $stringTemp 0 ([ :find $stringTemp "failed" ] - 1) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong IPSec proposal)");
            } 
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string 'Failed to get valid proposal' in log."); }
    }

    # ----------- Stage 5 - search for an attempt to enter through L2TP ----------- 
    foreach dangerString in=[ /log find topics~"l2tp" message~"user" message~"authentication failed"; ] do={
        do {
            :local stringTemp ([ /log get $dangerString message ]);
            :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
            :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "<"    ] + 1) ([ :find $stringTemp ">" ]) ]);
            if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong L2TP user '".$dangerUser."')");
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of L2TP 'User' & 'Authentication failed' in log."); }
    }    

    # ----------- Stage 6 - search for an attempt to enter through PPTP  ----------- 
    foreach dangerStr1 in=[ /log find topics~"pptp" message~"user" message~"authentication failed"; ] do={
        do {
            foreach dangerStr2 in=[ /log find topics~"pptp" message~"TCP connection established from"; ] do={
                do {
                    :local stringId1 ("0x".[:pick $dangerStr1 ([:find $dangerStr1 "*"] + 1) [:len $dangerStr1]]);
                    :local stringId2 ("0x".[:pick $dangerStr2 ([:find $dangerStr2 "*"] + 1) [:len $dangerStr2]]);
                    if (($stringId1 - $stringId2) = 1) do={
                        :local stringTemp ([ /log get $dangerStr1 message ]);
                        :local dangerUser ([ :pick $stringTemp ([ :find $stringTemp "user" ] + 5) ([ :find $stringTemp "authentication" ] - 1) ]);
                        :local stringTemp ([ /log get $dangerStr2 message ]);
                        :local dangerIP   ([ :pick $stringTemp ([ :find $stringTemp "from" ] + 5) ([ :len $stringTemp ]) ]);
                        if ([ /ip firewall address-list find list="BlockDangerAddress" address=$dangerIP ] = "" ) do={ 
                            /ip firewall address-list add address=$dangerIP list="BlockDangerAddress" timeout=14d;
                            :set outMsg ($outMsg."\r\n>>> Added in black list IP ".$dangerIP." (wrong PPTP user '".$dangerUser."')");
                        }
                    }
                } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
            }
        } on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
    }

    # ----------- Output searching results ----------- 
    if ([:len $outMsg] > $lenMsg) do={
        :put $outMsg;
        :log warning $outMsg;
    }
}



Пробуйте и отпишите о результате.
Заранее благодарю.
Привет! а у меня этот скрипт не работает. Предыдущий работает, а вот именно этот нет, просто тихо и все. В чем может быть проблема? У меня много попыток соединения, в которых нет IP адреса, а указан просто порядковый номер (<53>: user admin authentication failed). На скринах красным это неудачные попытки, без IP адресов, а синим это работа предыдущего скрипта, котрый блокирует порядковые номера, но пользы от этого нет...
Изображение

Изображение


Ответить