Назначение скрипта
Скрипт анализирует системный лог MikroTik и реагирует на следующие события:
- успешный вход пользователя (
logged in) - ошибка авторизации (
login failure)
При обнаружении нового события отправляется уведомление в Telegram.
Требования
- MikroTik RouterOS v7
- Созданный Telegram-бот
- Chat ID пользователя или группы
- Разрешён доступ к api.telegram.org
Настройка параметров
Перед использованием необходимо указать токен Telegram-бота и ID чата:
:local botToken "BOT_TOKEN"
:local chatId "CHAT_ID"
- BOT_TOKEN — токен, полученный у @BotFather
- CHAT_ID — ID пользователя или группы Telegram
Логика работы скрипта
Скрипт выполняет следующие действия:
- Просматривает лог системы
- Ищет последние записи о входе или ошибке авторизации
- Сравнивает событие с предыдущим обработанным
- Формирует текст уведомления
- Отправляет сообщение в Telegram
Для предотвращения дублирования сообщений используется глобальная переменная lastLoginId.
Скрипт login-watcher для MikroTik
:local botToken "BOT_TOKEN"
:local chatId "CHAT_ID"
:global lastLoginId
:local lastId
:foreach i in=[/log find where ((topics~"system" and topics~"info" and topics~"account") or (topics~"system" and topics~"error" and topics~"critical")) and (message~"logged in" or message~"login failure")] do={
:set lastId $i
}
:if ([:typeof $lastId] != "nothing") do={
:if ([:typeof $lastLoginId] != "nothing") do={
:if ($lastId != $lastLoginId) do={
:set lastLoginId $lastId
:local textmsg
:local msg [/log get $lastId message]
:local time [/log get $lastId time]
:local ident [/system identity get name]
:if ($msg ~ "logged in") do={
:set textmsg ("%F0%9F%9B%A1 MikroTik login%0ARouter: $ident%0ATime: $time%0A$msg")
} else={
:set textmsg ("%F0%9F%9A%A8 ALERT!!! Login failure%0ARouter: $ident%0ATime: $time%0A$msg")
}
/tool fetch url=("https://api.telegram.org/bot$botToken/sendMessage?chat_id=$chatId&text=$textmsg") keep-result=no
}
} else={
:set lastLoginId $lastId
}
}
Установка скрипта
Скрипт рекомендуется добавить:
- в System → Scripts с периодическим запуском по Scheduler
- или запускать вручную для тестирования
Пример запуска по расписанию:
/system scheduler
add interval=10s name=login-watcher on-event=login-watcher policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
Результат
- Мгновенные уведомления о входе в систему
- Оповещения о неудачных попытках авторизации
- Защита от повторных уведомлений
- Удобный контроль безопасности маршрутизатора
TAGS: mikrotik, routeros, security, telegram, logging, scripts