Автоматическая блокировка мусорных попыток подключений по ipsec l2tp

Обсуждение ПО и его настройки
Ответить
Аватара пользователя
LeonySS
Сообщения: 5
Зарегистрирован: 28 дек 2023, 20:43

Доброго времени суток!
Прошу сильно тапками не бить, и слишком сложных слов не говорить. С микротиком общаюсь пока что на "вы".
Есть проблема, которая мне мозолит глаза и которую хотелось бы автоматизировать.
Постоянно кто-то стучится и стучится, мусоря в логи такими вот сообщениями:
failed to get valid proposal.
failed to pre-process ph1 packet (side: 1, status 1).
phase1 negotiation failed.
Сконструировал с помощью тырнетов вот такой скрипт, но понять пока не могу, почему не работает :с

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

:foreach line in= (:len[/log print as-value where buffer=memory message~"failed to get valid proposal"]>= $5) do={
   :set $targetip [:toip [:pick ($line->"message") 0 [:find ($line->"message") " "]]]
   :if ([:len [/ip firewall address-list find address="$targetip" and list="black_list"]] = 0) do=
      /ip firewall address-list add list=black_list address=$targetip timeout= 5d
      :put "$targetip added to list black_list"}
}
В общем задумка была такая:
  • В лог начинает сыпать ошибками с ключевыми словами "failed to get valid proposal"
  • Если сообщение появляется больше 5 раз то парсится ip
  • ip улетает в black_list на 5 дней
  • на black_list в raw стоит действие drop
Модель: RB2011UiAS-2HnD
текущая прошивка RouterOS: 6.49.11


:ps_ih:
Erik_U
Сообщения: 1780
Зарегистрирован: 09 июл 2014, 12:33

Для каких целей сделан ipsec l2tp?

Если для подключения удаленной площадки, то это 1 оператор связи с известной белой подсетью в интернете.
Создайте адреслист "VPN", внесите в него диапазон белых адресов оператора, и в правиле файервола, открывающего порт, поставьте дополнительное условие, что источник должен быть из этого адреслиста.

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

Автоматические скрипты целесообразны когда клиентов бесконечное количество из всех уголков мира.
Но это точно не про RB2011UiAS-2HnD.


Аватара пользователя
LeonySS
Сообщения: 5
Зарегистрирован: 28 дек 2023, 20:43

Erik_U писал(а): 29 дек 2023, 11:18 Для каких целей сделан ipsec l2tp?
Между микротиками поднят туннель (офис-производство)
так же используются vpn соединения для удалёнки

Конечно понимаю что так как вы посоветовали будет правильнее, но мне проще блочить ip по скрипту я думаю, интересна в принципе тема скриптов на микротике, а какой же может быть "вкат" без практики?)


:ps_ih:
Erik_U
Сообщения: 1780
Зарегистрирован: 09 июл 2014, 12:33

Это интересная тема для хобби.
Вам сюда. viewforum.php?f=14


Аватара пользователя
podarok66
Модератор
Сообщения: 4361
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Я понимаю, что вы что-то там конструировали, но сами посмотрите. Строка

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

:len[/log print as-value where buffer=memory message~"failed to get valid proposal"]
это КОЛИЧЕСТВО строк с подобным содержанием. Конструкция

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

(:len[/log print as-value where buffer=memory message~"failed to get valid proposal"]>= $5)
Уже как таковая не имеет смысла. $5 - это переменная с именем 5, и как она будет сравниваться с числом, если она не объявлена, не определен тип самой переменной, непонятно. Но даже если сравнение пройдет, мы можем получить два варианта True или False. А вы далее приступаете к чему? Что вы ищете и в чем?
По сути в первой части в команде foreach мы должны в какой-то переменной ( у вас это line) определить массив для дальнейшей работы. И далее после do в этом массиве методом перебора совершить с результатом какое-то действие. На такие проекты, особенно если опыта нет, надо четко представлять, что и из чего выйдет. И не стеснятся написать что-то типа сценария, по которому ваш скрипт будет выполнятся. А вы нагромоздили команд и думаете, что оно само? Оно само тупое до крайности :-) И если ему чего не ясно, оно просто ничего не делает. Что, собственно ваш случай.
Например типа такого.
1. Определить переменную с количеством нежелательных запросов :local line [:len[/log print as-value where buffer=memory message~"failed to get valid proposal"]];
2. Провести сравнение, если запросов больше какого-то порога, :if ($line > 5) do={.............
3. Собственно действие по определению адреса из лога (я парсинг не очень люблю, сами ищите варианты) :local targetip [..................................];
4. Поиск адреса на предмет присутствия в black_list :if ([/ip firewall address-list find address=$targetip list=black_list] != "") do={......
4. Занесение в адрес-лист /ip firewall address-list add list=black_list address=$targetip timeout= 5d;
}
5. Очистка лога, чтобы не считать прошлые попытки ещё раз
}

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


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
torik
Сообщения: 6
Зарегистрирован: 22 сен 2023, 12:53

LeonySS писал(а): 28 дек 2023, 21:03 Доброго времени суток!
Прошу сильно тапками не бить, и слишком сложных слов не говорить. С микротиком общаюсь пока что на "вы".
Есть проблема, которая мне мозолит глаза и которую хотелось бы автоматизировать.
Постоянно кто-то стучится и стучится, мусоря в логи такими вот сообщениями:
failed to get valid proposal.
failed to pre-process ph1 packet (side: 1, status 1).
phase1 negotiation failed.
Сконструировал с помощью тырнетов вот такой скрипт, но понять пока не могу, почему не работает :с

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

:foreach line in= (:len[/log print as-value where buffer=memory message~"failed to get valid proposal"]>= $5) do={
   :set $targetip [:toip [:pick ($line->"message") 0 [:find ($line->"message") " "]]]
   :if ([:len [/ip firewall address-list find address="$targetip" and list="black_list"]] = 0) do=
      /ip firewall address-list add list=black_list address=$targetip timeout= 5d
      :put "$targetip added to list black_list"}
}
В общем задумка была такая:
  • В лог начинает сыпать ошибками с ключевыми словами "failed to get valid proposal"
  • Если сообщение появляется больше 5 раз то парсится ip
  • ip улетает в black_list на 5 дней
  • на black_list в raw стоит действие drop
Модель: RB2011UiAS-2HnD
текущая прошивка RouterOS: 6.49.11
Скажите пожалуйста, у вас получилось сделать скрипт? У меня проблема как у вас, но не могу найти решения а в скриптах я чайник.


Ответить