Перейти к содержимому
Калькуляторы

Оповещение администратора о входе в Mikrotik

Оповещение администратора о входе в Mikrotik

я использую для этого скрипт

 

# BEGIN SETUP
# имя скрипта в scheduler
:local scheduleName "on_login"
# мыло на которое отправлять отчет
:local emailAddress "r.karchava@gmail.com"
# записи в логе по маске, которые попадают в отчет
:local startBuf [:toarray [/log find message~"logged in" || message~"login failure"]]
# слова-исключения. Сюда добавляем наши "легитимные" IP, или, например, сервисы по которым не хотим отслеживать подключения.
:local removeThese {"api";"192.168.88.27"}
# smtp сервер
:local smtpserv [:resolve "smtp.yandex.ru"];
# мыло с которого будет все отправляться
:local email "karchavagio@yandex.ru";
# пароль к мылу
:local pass PASSWORD;
# END SETUP
# проверяем существует ли запись в планировщике, если нет - выдаем ошибку в лог
:if ([:len [/system scheduler find name="$scheduleName"]] = 0) do={
 /log warning "[LOGMON] ERROR: Schedule does not exist. Create schedule and edit script to match name"
}
# определяем последнее время запуска скрипта
:local lastTime [/system scheduler get [find name="$scheduleName"] comment]
# for checking time of each log entry
:local currentTime
# log message
:local message

# вводим переменную output
:local output
:local keepOutput false
# if lastTime is empty, set keepOutput to true
:if ([:len $lastTime] = 0) do={
 :set keepOutput true
}

:local counter 0
# loop through all log entries that have been found
:foreach i in=$startBuf do={

# loop through all removeThese array items
 :local keepLog true
 :foreach j in=$removeThese do={
#   if this log entry contains any of them, it will be ignored
   :if ([/log get $i message] ~ "$j") do={
     :set keepLog false
   }
 }
 :if ($keepLog = true) do={

  :set message [/log get $i message]
#   LOG DATE
#   depending on log date/time, the format may be different. 3 known formats
#   format of jan/01/2002 00:00:00 which shows up at unknown date/time. Using as default
   :set currentTime [ /log get $i time ]
#   format of 00:00:00 which shows up on current day's logs
  :if ([:len $currentTime] = 8 ) do={
    :set currentTime ([:pick [/system clock get date] 0 11]." ".$currentTime)
   } else={
#     format of jan/01 00:00:00 which shows up on previous day's logs
    :if ([:len $currentTime] = 15 ) do={
       :set currentTime ([:pick $currentTime 0 6]."/".[:pick [/system clock get date] 7 11]." ".[:pick $currentTime 7 15])
     }
  }

#   if keepOutput is true, add this log entry to output
  :if ($keepOutput = true) do={
    :set output ($output.$currentTime." ".$message."\r\n")
  }
#   if currentTime = lastTime, set keepOutput so any further logs found will be added to output
#   reset output in the case we have multiple identical date/time entries in a row as the last matching logs
#   otherwise, it would stop at the first found matching log, thus all following logs would be output
   :if ($currentTime = $lastTime) do={
    :set keepOutput true
    :set output ""
  }
 }
#   if this is last log entry
 :if ($counter = ([:len $startBuf]-1)) do={
#   If keepOutput is still false after loop, this means lastTime has a value, but a matching currentTime was never found.
#   This can happen if 1) The router was rebooted and matching logs stored in memory were wiped, or 2) An item is added
#   to the removeThese array that then ignores the last log that determined the lastTime variable.
#   This resets the comment to nothing. The next run will be like the first time, and you will get all matching logs
  :if ($keepOutput = false) do={
#     if previous log was found, this will be our new lastTime entry     
    :if ([:len $message] > 0) do={
       :set output ($output.$currentTime." ".$message."\r\n")
     }
   }
 }
 :set counter ($counter + 1)
}
# If we have output, save new date/time, and send email
if ([:len $output] > 0) do={
 /system scheduler set [find name="$scheduleName"] comment=$currentTime
 /tool e-mail send server=$smtpserv port=587 user=$email password=$pass start-tls=yes to="$emailAddress" from=$email subject="MikroTik alert $currentTime" body="$output"
 /log info "[LOGMON] New logs found, send email"
}

 

выдаёт ошибку

system,e-mail,error Error sending e-mail <MikroTik alert jan/10/2017 13:56:41>: AUTH failed

 

я пытался отправить через мои маил сервер и вот log

 

< unknown[188.166.XX.YY]: RCPT TO:<roma@ttff.com>
extract_addr: input: <roma@ttff.com>
smtpd_check_addr: addr=roma@ttff.com
ctable_locate: move existing entry key roma@ttff.com
extract_addr: in: <roma@ttff.com>, result: roma@ttff.com
NOQUEUE: reject: RCPT from unknown[188.166.XX.YY]: 504 5.5.2 <host>: Helo command rejected: need fully-qualified hostname; from=<admin@host> to=<roma@ttff.com> proto=ESMTP helo=<host>

Изменено пользователем roma_good

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще микротик может отправлять лог о событиях на стороннее устройство, и вход администратора там тоже фигурирует. Это проще чем городить скрипты по 1000 строк, которые еще и не работают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

там один девайс, и для одного девайса настраивать syslog?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Зачем syslog?

Просто на e-mail приходит сообщение типа :

 

system,error,critical <device>: login failure for user <xxxx> from 192.168.17.150 via winbox

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В меню System->Logging на вкладке Action создаете новое правило, выбираете в списке email.

Далее там же на вкладке Rules создаете новое правило, в качестве типа назначения выбираете только что созданное правило отправки на почту, и туда пойдут все логи в виде большого количества писем, то есть спама. Что бы все события лога не отправлялись, нужно ввести уточнения. Для теста запись с почтой лучше переделать просто на отправку локальных уведомлений, после полной отладки только подставлять почту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 10.01.2017 в 15:10, roma_good сказал:

# слова-исключения. Сюда добавляем наши "легитимные" IP, или, например, сервисы по которым не хотим отслеживать подключения. :local removeThese {"api";"192.168.88.27"}

у меня все равно приходят уведомления

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@roma_good 

Где такие настройки Яндекс почты взяли ? 

Должно быть "port=465 start-tls=tls-only".

 

Изменено пользователем McSea

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.