Может не понял чего, поправьте ...
Зачем банить ip из лога тех, кто пытается подобрать пароль к vpn ? Ведь это почти бессмысленно, так как никто не делает больше одной попытки с одного IP-адреса - IP постоянно меняются ...
Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
- drpioneer
- Сообщения: 175
- Зарегистрирован: 30 май 2013, 10:20
Есть список хотелок: viewtopic.php?p=70810#p70810, согласно которому скрипт развивается.
Этой позицией покрывается последний пункт в списке хотелок.
Скрипт был немного усовершенствован:tranceinsane писал(а): ↑06 дек 2021, 09:59 ...
а у меня этот скрипт не работает. Предыдущий работает, а вот именно этот нет, просто тихо и все. В чем может быть проблема?
...
Код: Выделить всё
# Script for blocking dangerous addresses that tried to connect to the router by drPioneer
# https://forummikrotik.ru/viewtopic.php?p=82619#p82619
# tested on ROS 6.49
# updated 2021/12/08
: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) || (($stringId2 - $stringId1) = 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 'TCP connection established from' in log."); }
}
} on-error={ :set outMsg ($outMsg."\r\n>>> Script error. Not found string of PPTP 'User' & 'Authentication failed' in log."); }
}
# ----------- Checking & installing firewall-filter rule -----------
:if ([ /ip firewall filter find src-address-list="BlockDangerAddress"; ] = "") do={
/ip firewall filter add action=drop chain=input comment="Dropping dangerous adresses" src-address-list=BlockDangerAddress;
}
:if ([ /ip firewall filter find src-address-list="BlockDangerAddress" disabled=yes; ] != "") do={
/ip firewall filter enable [ /ip firewall filter find src-address-list="BlockDangerAddress" disabled=yes; ];
}
# ----------- Output searching results -----------
:if ([:len $outMsg] > $lenMsg) do={
:put $outMsg;
:log warning $outMsg;
}
}
- внедрено автодобавление отсутствующего и включение выключенного правила в "Firewall->Filter Rules", производящего глушение проблемных IP-адресов. Положение правила в списке необходимо выставлять вручную в соответствии со своими предпочтениями.
-
- Сообщения: 3
- Зарегистрирован: 20 дек 2021, 23:13
- Virtue
- Сообщения: 148
- Зарегистрирован: 07 мар 2014, 10:17
с тех же самых айпишек сегодня и меня долбили..
добавил правило:
Код: Выделить всё
/ip firewall filter
add action=accept chain=input dst-port=1723 in-interface="интерфейс, смотрящий в интернет" protocol=tcp src-address-list="лист разрешенных адресов"
add action=drop chain=input in-interface="интерфейс, смотрящий в интернет"
- drpioneer
- Сообщения: 175
- Зарегистрирован: 30 май 2013, 10:20
-
- Сообщения: 6
- Зарегистрирован: 28 дек 2021, 19:12
Добрый! Заметил что скрипт долго выполняется, загрузка CPU 100%, если лог пишется на диск в 10000 строк. Проверяли на 951Ui-2HnD с прошивкой 6.49.2, время выполнение заняло примерно 35 минут.
- drpioneer
- Сообщения: 175
- Зарегистрирован: 30 май 2013, 10:20
Добрый день.
Подтвердил подобное поведение при описанных условиях на RB751U-2HnD ROS 6.49.
Переписал скрипт на предмет ускорения его работы.
Теперь в моих условиях скрипт грузит процессор на 100% в течении 30 секунд.
Считаю такой вариант приемлемым по сравнению с тем, что было:
Код: Выделить всё
# Script of blocking dangerous addresses by drPioneer.
# https://forummikrotik.ru/viewtopic.php?t=4781&start=20
# tested on ROS 6.49
# updated 2021/12/29
:do {
:local outMsg "Detected dangerous addresses:";
:local lenMsg [:len [$outMsg]];
# ----------- Stage 1 - search for a device login attempt -----------
:foreach dangerString in=[ /log find message~"login failure for user"; ] do={
:foreach routerUser in=[ /user find disabled=no; ] 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.")");
}
}
}
}
# ----------- Stage 2 - search for login attempts via WinBox -----------
:foreach dangerString in=[ /log find message~"denied winbox/dude connect from"; ] 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)");
}
}
# ----------- 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={
: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)");
}
}
# ----------- Stage 4 - search for an attempt to enter through IPSec proposal -----------
:foreach dangerString in=[ /log find message~"failed to get valid proposal"; ] 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)");
}
}
# ----------- Stage 5 - search for an attempt to enter through L2TP -----------
:foreach dangerString in=[ /log find topics~"l2tp" message~"user" message~"authentication failed"; ] 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."')");
}
}
# ----------- Stage 6 - search for an attempt to enter through PPTP -----------
:foreach dangerStr1 in=[ /log find topics~"pptp" message~"user" message~"authentication failed"; ] do={
:foreach dangerStr2 in=[ /log find topics~"pptp" message~"TCP connection established from"; ] 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) || (($stringId2 - $stringId1) = 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."')");
}
}
}
}
# ----------- Checking & installing firewall-filter rule -----------
:if ([ /ip firewall filter find src-address-list="BlockDangerAddress"; ] = "") do={
/ip firewall filter add action=drop chain=input comment="Dropping dangerous adresses" src-address-list=BlockDangerAddress;
}
:if ([ /ip firewall filter find src-address-list="BlockDangerAddress" disabled=yes; ] != "") do={
/ip firewall filter enable [ /ip firewall filter find src-address-list="BlockDangerAddress" disabled=yes; ];
}
# ----------- Output searching results -----------
:if ([:len $outMsg] > $lenMsg) do={
:put $outMsg;
:log warning $outMsg;
}
} on-error={ :log warning ("Script of blocking dangerous IP addresses worked with errors."); }

Последний раз редактировалось drpioneer 29 дек 2021, 12:35, всего редактировалось 2 раза.
-
- Сообщения: 6
- Зарегистрирован: 28 дек 2021, 19:12
Спасибо! Заметил в скрипте теперь нет этапа #Checking & installing firewall-filter rule, его можно вернуть?drpioneer писал(а): ↑28 дек 2021, 23:34 Добрый день.
Подтвердил подобное поведение при описанных условиях на RB751U-2HnD ROS 6.49.
Переписал скрипт на предмет ускорения его работы.
Теперь в моих условиях скрипт грузит процессор на 100% в течении 30 секунд.
Считаю такой вариант приемлемым по сравнению с тем, что было:
- drpioneer
- Сообщения: 175
- Зарегистрирован: 30 май 2013, 10:20
-
- Сообщения: 6
- Зарегистрирован: 28 дек 2021, 19:12