MikroTik Script: Notificación de inicio de sesión del dispositivo

El script enviará una notificación sobre el inicio de sesión exitoso y el final de la sesión del usuario en el dispositivo MikroTik. La notificación se envía por correo electrónico o Telegram.

Hay muchos scripts en Internet que le permiten analizar el log del dispositivo MikroTik, pero todos son enormes y difíciles de entender. Yo [Yun Sergey] escribí un guión simple para resolver este problema.

El script busca eventos de «account» en el registro del dispositivo MikroTik desde que se ejecutó por última vez. Crea un mensaje que enumera todos los eventos que han ocurrido desde el último inicio.

El script crea y usa la variable global ParseLogAccountEndArrayID, almacena el ID del último elemento de la matriz de registros con el asunto «account».

Las siguientes funciones se utilizan para enviar notificaciones:

Mensajes de muestra:

  • user USER logged in from E4:6F:13:AA:58:2D via winbox – el usuario está conectado al dispositivo usando WinBox;
  • user USER logged in via local – el usuario inició sesión en el dispositivo utilizando la dirección MAC del dispositivo;
  • user USER logged in from 192.168.1.9 via telnet – el usuario lanzó el terminal interno MikroTik.

Ejemplo de mensaje de correo electrónico:

Notificación por correo electrónico cuando el usuario inicia sesión en el dispositivo MikroTik

Ejemplo de mensaje de Telegram:

Mensaje de Telegram: notificación del inicio de sesión del usuario en el dispositivo MikroTik

Artículo en otros idiomas:
?? – MikroTik Script: Device Login Notification
?? – MikroTik Скрипт: Уведомление о входе на устройство
?? – Script MikroTik: Notification de connexion de l’appareil
?? – MikroTik-Script: Benachrichtigung über die Geräteanmeldung
?? – MikroTik-script: Melding apparaat aanmelding

Crear guión

Se requieren los siguientes permisos para ejecutar el script:

[System] -> [Scripts] -> [+] -> [Name: ParseLogAccountEvents] -> [Policy: read, write, test, policy]

Código de secuencia de comandos:

:local DeviceName [/system identity get name];
:local Time [/system clock get time];
:local Date [/system clock get date];
:local EmailMessageText;
:local TelegramMessageText;

:global ParseLogAccountEndArrayID;

:local IDsEventsAccount [/log find where  topics ~ "account"];

:local LenArrayIDs [:len $IDsEventsAccount];
:local StartArrayID [:find $IDsEventsAccount $ParseLogAccountEndArrayID];
:local EndArrayID ($IDsEventsAccount -> ($LenArrayIDs-1));

:if ($EndArrayID != $ParseLogAccountEndArrayID and [:tobool $ParseLogAccountEndArrayID] ) do={

    :for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
        :local IDMessage ($IDsEventsAccount ->$KeyArray );
        :set EmailMessageText "$EmailMessageText \n\r  $[/log get number=$IDMessage time] - $[/log get number=$IDMessage message];";
        :set TelegramMessageText "$TelegramMessageText %0D%0A  $[/log get number=$IDMessage time] - $[/log get number=$IDMessage message];";
        }

    # START SEND EMAIL
    :local SendTo "notify@mhelp.pro";
    :local Subject "\F0\9F\94\93 AUTH: $DeviceName [$Date $Time]";
    :local MessageText "$EmailMessageText";
    :local FileName "";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
    # END SEND EMAIL

    # START SEND TELEGRAM
    :local MessageText "\F0\9F\94\93 <b>$DeviceName: AUTH</b> $TelegramMessageText";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END SEND TELEGRAM
}

:set ParseLogAccountEndArrayID $EndArrayID;
# YunSergey [MHelp.pro]
MikroTik Script: Notificación de inicio de sesión del dispositivo

Agregar secuencia de comandos al programador

Se requieren los siguientes permisos para ejecutar el script: read, write, test, policy.

[System] -> [Schedule] -> [+] -> [Name: ParseLogAccountEvents] —>  [Interval: 00:05:00] -> [Policy: read, write, policy, test]

O ejecutar en la terminal:

/system scheduler add name=ParseLogAccountEvents policy=read,write,policy,test on-event="/system script run ParseLogAccountEvents" interval=5m comment="Analyze the log account and send login / logout events"
Agregue el script "notificación de inicio de sesión del usuario" al programador MikroTik

Ahora puede aumentar el control sobre sus dispositivos MikroTik, controlando los tiempos de inicio y cierre de sesión de los administradores de dispositivos. Y también configurar la ejecución de acciones cuando el usuario inicia sesión, por ejemplo, crear una copia de seguridad de la configuración o crear una copia de la configuración del dispositivo.


? En este artículo se discutió cómo crear un script: la notificación del inicio de sesión del usuario en el dispositivo MikroTik y el envío de una notificación por correo electrónico o mensaje de Telegram. Espero que ahora pueda mejorar el control sobre los dispositivos MikroTik rastreando los inicios de sesión exitosos de los administradores en el dispositivo o detectando las acciones de un intruso a tiempo. Sin embargo, si tiene algún problema al configurar el script, no dude en escribir en los comentarios. Trataré de ayudar.

Se comprueba el guión: hAP ac lite [RouterBOARD 952Ui-5ac2nD], RouterOS 6.47.8 (stable).

2 comentarios en «MikroTik Script: Notificación de inicio de sesión del dispositivo»

  1. Hola espero se encuentre bien.
    Gracisa por tan maravilloso script.

    trato de ejecutarlo en mi M.k. pero no funciona, el único valor que estoy cambiando es el llamado a la función de Telegram, que para mi caso es «SendToTelegram» y estoy comentare ando las lineas de la función enviar a correo electrónico.
    que estoy haciendo mal?

    adjunto script

    :local DeviceName [/system identity get name];
    :local Time [/system clock get time];
    :local Date [/system clock get date];
    :local EmailMessageText;
    :local TelegramMessageText;

    :global ParseLogAccountEndArrayID;

    :local IDsEventsAccount [/log find where topics ~ «account»];

    :local LenArrayIDs [:len $IDsEventsAccount];
    :local StartArrayID [:find $IDsEventsAccount $ParseLogAccountEndArrayID];
    :local EndArrayID ($IDsEventsAccount -> ($LenArrayIDs-1));

    :if ($EndArrayID != $ParseLogAccountEndArrayID and [:tobool $ParseLogAccountEndArrayID] ) do={

    :for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
    :local IDMessage ($IDsEventsAccount ->$KeyArray );
    :set EmailMessageText «$EmailMessageText \n\r $[/log get number=$IDMessage time] – $[/log get number=$IDMessage message];»;
    :set TelegramMessageText «$TelegramMessageText %0D%0A $[/log get number=$IDMessage time] – $[/log get number=$IDMessage message];»;
    }

    # START SEND EMAIL
    #:local SendTo «notify@mhelp.pro»;
    #:local Subject «\F0\9F\94\93 AUTH: $DeviceName [$Date $Time]»;
    #:local MessageText «$EmailMessageText»;
    #:local FileName «»;
    #:local SendEmail [:parse [/system script get SendEmailFunction source]];
    #$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
    # END SEND EMAIL

    # START SEND TELEGRAM
    :local MessageText «\F0\9F\94\93 $DeviceName: AUTH $TelegramMessageText»;
    :local SendTelegramMessage [:parse [/system script get SendToTelegram source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END SEND TELEGRAM
    }

    :set ParseLogAccountEndArrayID $EndArrayID;

    Responder

Deja un comentario