Обнаружение неизвестного DHCP сервера и уведомление в Telegram

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

Настройка обнаружения в сети неизвестного DHCP сервера и отправка уведомления в Telegram или на электронную почту. Отправляется имя DHCP интерфейса на котором обнаружен сервер, IP и MAC адреса неавторизованного устройства. Иногда происходит ситуация, когда сотрудник подключает к локальной сети предприятия личный роутер, с включенным DHCP сервером, что может вызвать проблемы получения новых IP адресов устройств в локальной сети. Причем проблемы могут обнаруживаться не сразу, а когда истекает аренда IP адресов. Для быстрого уведомления о появлении неавторизованного DHCP сервера в локальной сети используйте настройку Alerts в настройках DHCP сервера.

Создать предупреждение

Начальные данные:

  • Interface: bridge1-lan — название интерфейса DHCP сервера;
  • Valid Servers: 64:D1:54:52:6C:36 — MAC адрес интерфейса DHCP сервера (bridge1-lan);
  • Alert Timeout: 10 минут — интервал проверки неавторизованного DHCP сервера и отправка уведомления.

Настраиваем предупреждение:

[IP] -> [DHCP Server] -> [Alerts] -> [+] -> [Interface: bridge1-lan] -> [Valid Servers: 64:D1:54:52:6C:36] -> [Alert Timeout: 00:10:00]

Я рекомендую в окне Alert вызывать скрипт проверки, а не размещать текст скрипта. Если скрипты размещаются в одном месте [System] -> [Scripts] это улучшает удобство управления устройством, чем размещение скриптов в определенных настройках устройства. Код вызова скрипта:

/system script run DiscoverUnknownDHCPServer

Создаем скрипт:

[System] -> [Scripts] -> [+] -> [Name: DiscoverUnknownDHCPServer] -> [Policy: read, write, polisy, test]

Код скрипта:

# Find DHCP Alert 
:local CurrentTime [/system clock get time];
:local MsgID [/log find where message ~"dhcp alert" time =$CurrentTime];
:local MsgText [/log get number=$MsgID message];

# Send Telegram Message
:local DeviceName [/system identity get name];
:local MessageText "\F0\9F\94\B4 $DeviceName: UNKNOWN DHCP SERVER FOUND!  Info: $CurrentTime $MsgText";
:local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;

Для отправки на почту код скрипта:

# Find DHCP Alert 
:local CurrentTime [/system clock get time];
:local MsgID [/log find where message ~"dhcp alert" time =$CurrentTime];
:local MsgText [/log get number=$MsgID message];

# Send Email
:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];

:local SendTo "[email protected]";
:local Subject "\F0\9F\94\B4 CRITICAL: $DeviceName [$Date $Time] UNKNOWN DHCP SERVER FOUND!";
:local MessageText "$MsgText";
:local FileName "";

:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;

Скрипт в одну строку

Отправка уведомления о неизвестном DHCP сервере в Телеграм:

/tool fetch url="https://api.telegram.org/bot<BotToken>/sendMessage\?chat_id=<GroupID>&text=Unknown DHCP server on interface: $interface (IP: $address, MAC:$"mac-address")" keep-result=no;

Отправка уведомления о неизвестном DHCP сервере на электронную почту:


/tool e-mail send [email protected] server=[:resolve "smtp.mail.com"] port=465 start-tls=tls-only user="[email protected]" password="Pa$$woRD"  from="[email protected]" subject="$[/system identity get name] UNKNOWN DHCP SERVER FOUND!" body="Unknown DHCP server on interface: $interface (IP: $address, MAC:$"mac-address")"

Скрипт «Отправка сообщения в Telegram»

В скрипте используется html разметка, какие варианты разметки использует Telegram можно прочитать — здесь. Скрипт принимает на вход переменную MessageText, содержащую текст сообщения. MessageText не может быть пустым. Если скрипт выполнен без ошибок в лог MikroTik записывается информация о отправке сообщения и текст. Так как скрипт будет выполняться из другого скрипта, установка разрешений на выполнение скрипта не требуется.

[System] -> [Scripts] -> [+] -> [Name: MyTGBotSendMessage] -> [Don't Require Permissions]

Код скрипта:

:local BotToken "987654321:AAFJIVTAWodBwzGX2CLne6-PK4RFNSy-8OY";
:local ChatID "987654321";
:local ParseMode "html";
:local DisableWebPagePreview True;
:local SendText $MessageText;

:local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";

/tool fetch http-method=get url=$tgUrl output=none;

:log info "Send Telegram Message: $MessageText";

Вызов скрипта «Отправка сообщения в Telegram» из другого скрипта

[System] -> [Scripts] -> [+] -> [Name: SendMessageToTelegram]

Для отправки сообщения вы должны передать параметр MessageText в скрипт MyTGBotSendMessage. Код скрипта:

:local DeviceName [/system identity get name];

:local MessageText "\F0\9F\9F\A2 <b>$DeviceName:</b> <i>italic</i>  <code>inline fixed-width code</code> plain text <a href=\"https://mhelp.pro/\">More Scripts</a>";

:local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];

$SendTelegramMessage MessageText=$MessageText;

Если при вызове скрипта вы получаете syntax error или ошибку failure: closing connection: <400 Bad Request> проблема может быть в использовании в тексте сообщения служебных символов MikroTik, для проверки попробуйте отправить обычный текст без специальных символов или символов разметки, на английском языке.

Источник

Освоить MikroTik вы можете с помощью онлайн-курса «Настройка оборудования MikroTik». В курсе изучаются все темы из официальной программы MTCNA. Автор – официальный тренер MikroTik. Материал подходит и тем, кто уже давно работает с оборудованием MikroTik, и тем, кто еще не держал его в руках. В состав входят 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.

Добавить комментарий