Страница 6 из 14
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 29 дек 2021, 13:39
denismikh
Оставил в скрипте только этапы:
Stage 2 - search for login attempts via WinBox
Stage 6 - search for an attempt to enter through PPTP
Время выполнения 30 минут.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 31 дек 2021, 02:09
drpioneer
Приветствую всех!
Переписал скрипт с учётом накопившихся замечаний:
- попытался ускорить работу скрипта на старых устройствах
- подправил логику поиска проблемных IP-адресов
- добавил поиск проблемных IP-адресов для OVPN-подключений
- убрал ненужную информацию об именах пользователей
- переделал вывод инфы о текущем состоянии скрипта в терминал
При старте скрипта будет добавлено и активировано отсутствующее правило в "Firewall->Filter Rules", производящее глушение проблемных IP-адресов. Его положение в списке правил выставляете вручную в соответствии с вашими предпочтениями.
Код: Выделить всё
# Script of blocking dangerous addresses by drPioneer.
# https://forummikrotik.ru/viewtopic.php?t=4781&start=20
# tested on ROS 6.49
# updated 2022/01/19
do {
# ----------- 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 [find src-address-list="BlockDangerAddress" disabled=yes];
}
# IP-address validation function
local DangerIPAddr do={
if ($1~"[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}") do={
if ([ip firewall address-list find list="BlockDangerAddress" address=$1;] ="") do={
ip firewall address-list add address=$1 list="BlockDangerAddress" timeout=14d;
put ">>> added in black list IP $1";
log warning ">>> Added in black list IP $1";
return true;
}
}
return false;
}
# Function that reports the absence of dangerous addresses
local NotFound do={
if (!$1) do={
put ">>> no new dangerous IP-addresses were found...";
}
}
#----------- Stage 1 - searching of failed login attempt -----------
put ("$[system clock get time;] Stage 1 - searching of failed login attempt");
local isDetected false;
foreach dangerString in=[log find topics~"system" message~"login failure for user";] do={
local stringTemp ([log get $dangerString message;]);
local dangerIP ([pick $stringTemp ([find $stringTemp "from"] +5) ([find $stringTemp "via"] -1)]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
[$NotFound $isDetected];
#----------- Stage 2 - search for login attempts from unknown networks -----------
put ("$[system clock get time;] Stage 2 - search for login attempts from unknown networks");
set $isDetected false;
foreach dangerString in=[log find topics~"warning" message~"denied winbox/dude connect from";] do={
local stringTemp ([log get $dangerString message;]);
local dangerIP ([pick $stringTemp ([find $stringTemp "from"] +5) ([len $stringTemp])]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
[$NotFound $isDetected];
#----------- Stage 3 - search for an attempt to enter through IPSec password -----------
put ("$[system clock get time;] Stage 3 - search for an attempt to enter through IPSec password");
set $isDetected false;
foreach dangerString in=[log find topics~"ipsec" 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 ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
[$NotFound $isDetected];
#----------- Stage 4 - search for an attempt to enter through IPSec proposal -----------
put ("$[system clock get time;] Stage 4 - search for an attempt to enter through IPSec proposal");
set $isDetected false;
foreach dangerString in=[log find topics~"ipsec" message~"failed to get valid proposal";] do={
local stringTemp ([log get $dangerString message;]);
local dangerIP ([pick $stringTemp 0 ([find $stringTemp "failed" ] -1)]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
[$NotFound $isDetected];
#----------- Stage 5 - search for an attempt to enter through L2TP -----------
put ("$[system clock get time;] Stage 5 - search for an attempt to enter through L2TP");
set $isDetected false;
foreach dangerString in=[log find topics~"l2tp" message~"authentication failed";] do={
local stringTemp ([log get $dangerString message]);
local dangerIP ([pick $stringTemp ([find $stringTemp "<"] +1) ([find $stringTemp ">"]) ]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
[$NotFound $isDetected];
#----------- Stage 6 - search for an attempt to enter through PPTP -----------
put ("$[system clock get time;] Stage 6 - search for an attempt to enter through PPTP");
set $isDetected false;
foreach dangerStr1 in=[log find topics~"pptp" 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) do={
local stringTemp ([log get $dangerStr2 message;]);
local dangerIP ([pick $stringTemp ([find $stringTemp "from"] +5) ([len $stringTemp])]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
}
}
[$NotFound $isDetected];
#----------- Stage 7 - search for an attempt to enter through OVPN -----------
put ("$[system clock get time;] Stage 7 - search for an attempt to enter through OVPN");
set $isDetected false;
foreach dangerStr1 in=[log find topics~"ovpn" topics~"error" message~"unknown msg" or message~"msg too short";] do={
foreach dangerStr2 in=[log find topics~"ovpn" 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) do={
local stringTemp ([log get $dangerStr2 message;]);
local dangerIP ([pick $stringTemp ([find $stringTemp "from"] +5) ([len $stringTemp])]);
if ([$DangerIPAddr $dangerIP]) do={ set $isDetected true; }
}
}
}
[$NotFound $isDetected];
put ("$[system clock get time;] End of search");
} on-error={
put ("Script of blocking dangerous IP addresses worked with errors.");
log warning ("Script of blocking dangerous IP addresses worked with errors.");
}
Прошу заинтересованных погонять этот вариант скрипта и отписаться о замеченных проблемах и недостатках.
Заранее спасибо.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 04 янв 2022, 12:54
hacklog
Стоит 1 раз ввести неправильный пароль, и ">>> Added in black list IP 74.119.192.60." Это правильная работа скрипта? Боюсь когда-то себя из-за опечатки забанить... )
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 04 янв 2022, 13:58
drpioneer
hacklog писал(а): ↑04 янв 2022, 12:54
Стоит 1 раз ввести неправильный пароль, и ">>> Added in black list IP 74.119.192.60." Это правильная работа скрипта? Боюсь когда-то себя из-за опечатки забанить... )
Добрый день.
Это правильная работа скрипта.
Одно из возможных решений
предложено здесь.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 31 янв 2022, 10:48
chipap
drpioneer писал(а): ↑31 дек 2021, 02:09
Приветствую всех!
Переписал скрипт с учётом накопившихся замечаний:
- попытался ускорить работу скрипта на старых устройствах
- подправил логику поиска проблемных IP-адресов
- добавил поиск проблемных IP-адресов для OVPN-подключений
- убрал ненужную информацию об именах пользователей
- переделал вывод инфы о текущем состоянии скрипта в терминал
Добрый день! Спасибо Вам за спасительный скрипт!
Очень выручал! Сейчас заметил, что после обновления на 6.49.2 (RB750) он перестал работать(
В логах после запуска скрипта ничего нет.
Могу помочь вам чем либо в отладке / понимании проблемы?
Спасибо!
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 31 янв 2022, 13:11
drpioneer
chipap писал(а): ↑31 янв 2022, 10:48
...
Очень выручал! Сейчас заметил, что после обновления на 6.49.2 (RB750) он перестал работать(
В логах после запуска скрипта ничего нет.
Могу помочь вам чем либо в отладке / понимании проблемы?
...
Добрый день.
Предлагаю начать с проверки установленной версии Firmware RouterBoard.
Если она НЕ равна версии RouterOS (6.49.2), тогда её стОит обновить.
Если версия Firmware RouterBoard = 6.49.2, тогда запустите скрипт в терминале:
( где
danger - это имя скрипта )
Продемонстрируйте результат работы скрипта в терминале.
Должно быть что-то похожее на это:
Код: Выделить всё
13:03:42 Stage 1 - searching of failed login attempt
>>> no new dangerous IP-addresses were found...
13:03:42 Stage 2 - search for login attempts from unknown networks
>>> no new dangerous IP-addresses were found...
13:03:42 Stage 3 - search for an attempt to enter through IPSec password
>>> no new dangerous IP-addresses were found...
13:03:43 Stage 4 - search for an attempt to enter through IPSec proposal
>>> no new dangerous IP-addresses were found...
13:03:43 Stage 5 - search for an attempt to enter through L2TP
>>> no new dangerous IP-addresses were found...
13:03:44 Stage 6 - search for an attempt to enter through PPTP
>>> no new dangerous IP-addresses were found...
13:03:44 Stage 7 - search for an attempt to enter through OVPN
>>> no new dangerous IP-addresses were found...
13:03:45 End of search
И приложите строки LOGа с атаками на роутер, на которые скрипт должен был отреагировать.
Заранее спасибо.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 11 фев 2022, 11:15
MMAXSIM
Добрый день!
А не могли-бы вы добавить блокировку таких ip. Нужные мне я добавлю в белый список.
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 11 фев 2022, 13:06
DamonNebylica
Скрипт очень порадовал. Наконец недоброжелатели "блочатся". Работает прекрасно, на 3011 не имеет значения даже отличается ли firmware от hardware. Время выполнения менее 10 секунд, проц загружается всего на 50%. Потестил уже на двух подобных железках. На 951-ые и 952-ые хочу попозже тоже попробовать, сегодня уже нет времени. Спасибо тебе человечище!
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 15 фев 2022, 10:38
Bsm
Отличный скриптик, работал на ура до обновления до 7.1.2 , после обновления начал ошибку выдавать "Script of blocking dangerous IP addresses worked with errors."
Re: Скрипт блокировки ip-адресов, с которых пытаются подобрать пользователей роутера
Добавлено: 16 фев 2022, 02:42
andrey-d
Отличный скрипт!