Лучший VPS сервер, который мне удалось найти: https://justhost.ru

  • Больше 30 стран локаций
  • Возможность 50 раз сменить страну и ip адрес вашего сервера
  • Все тарифы подходят для VPN и Proxy
  • Установка Mikrotik routerOS и linux из коробки
  • Оплата Российскими картами
  • Стоимость от 79 рублей в месяц за промо тариф

Назначение скрипта

Скрипт анализирует системный лог 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

Логика работы скрипта

Скрипт выполняет следующие действия:

  1. Просматривает лог системы
  2. Ищет последние записи о входе или ошибке авторизации
  3. Сравнивает событие с предыдущим обработанным
  4. Формирует текст уведомления
  5. Отправляет сообщение в 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