MikroTik Script: Notificación de intento de iniciar sesión fallido

Script de MikroTik útil: Reciba una notificación por correo electrónico o Telegram cuando aparezca un mensaje de error de inicio de sesión en el registro del dispositivo MikroTik («login failure for user …»). Le permite conocer los intentos de forzar una contraseña, informar la dirección IP o MAC del dispositivo que intenta iniciar sesión, así como el inicio de sesión con el intenta iniciar sesión en el dispositivo.

Ejemplo de correo electrónico: notificación de error de inicio de sesión en el dispositivo MikroTik

Contenido

  1. Descripción del script
  2. Crear guion
  3. Código de secuencia de comandos
  4. Agregar secuencia de comandos al programador

Artículo en otros idiomas:
🇺🇸 – MikroTik Script: Failed login attempt notification
🇷🇺 – MikroTik Скрипт: Уведомление о ошибке входа в систему
🇫🇷 – Script MikroTik: Notification de tentative de connexion échouée
🇩🇪 – MikroTik-Script: Benachrichtigung über Anmeldefehler
🇳🇱 – MikroTik-script: Melding van mislukte inlogpoging

Descripción del script

El script analiza el registro del dispositivo para buscar eventos de «login failure for user …«, envía un correo electrónico o un mensaje de Telegram cuando se encuentran eventos.

Analiza eventos desde la última hora de inicio (variable ParseLogLoginEndArrayID).

Las siguientes funciones se utilizan para enviar notificaciones:

El script llama a funciones con los nombres: EMailSendMessageFunction, TGBotSendMessageFunction. Si sus funciones tienen un nombre diferente, cámbielo en el script.

Ejemplo de mensaje de Telegram: notificación de error de inicio de sesión en el dispositivo MikroTik

✏️ Si detecta intentos de inicio de sesión frecuentes con su inicio de sesión actual, tal vez el inicio de sesión sea conocido por los atacantes, la mejor opción sería cambiar el inicio de sesión.

Crear guion

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

[System] -> [Scripts] -> [+] -> [Name: ParseLogLoginFailure] -> [Policy: read, write, test, policy]
MikroTik Script: Notificación de intento de iniciar sesión fallido

Código de secuencia de comandos

# Name: ParseLogLoginFailure v1.1
# Description: Device login failed notification
# Author: Yun Sergey [MHelp.pro] © 2021
# License: GPL-3.0 License
# Description, purpose and questions: https://mhelp.pro/mikrotik-script-failed-login-attempt-notification/
# More scripts Mikrotik: https://mhelp.pro/tag/mikrotik-scripts/
# Verified: RouterBOARD 952Ui-5ac2nD, RouterOS 6.48 (stable).

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

:global ParseLogLoginEndArrayID;

:local IDsEvents [/log find where topics~"critical" message~"login failure"];

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

#:log info "Script ParseLogLoginFailure: running.";

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

    #:log info "Script ParseLogLoginFailure: new events found.";

    :for KeyArray from=($StartArrayID+1) to=($LenArrayIDs-1) do={
        :local IDMessage ($IDsEvents ->$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];";
        }

    :set ParseLogLoginEndArrayID $EndArrayID;

    #:log info "Script ParseLogLoginFailure: events processed. Sending notifications.";

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

    # START SEND TELEGRAM
    :local MessageText "\E2\9B\94 <b>$DeviceName: AUTH</b> $TelegramMessageText";
    :local SendTelegramMessage [:parse [/system script get TGBotSendMessageFunction source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END SEND TELEGRAM
} else={
#:log info "Script ParseLogLoginFailure: no new messages found.";
};

#:log info "Script ParseLogLoginFailure: script completed successfully.";
:set ParseLogLoginEndArrayID $EndArrayID;

Agregar secuencia de comandos al programador

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

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

O ejecutar en la terminal:

/system scheduler add name=ParseLogLoginFailure policy=read,write,policy,test on-event="/system script run ParseLogAccountEvents" interval=5m comment="Parse device log and sending failed login events"
MHelp.pro: Agregar un script al programador de tareas MikroTik

🔗 Puede configurar las reglas de Firewall para bloquear ataques de fuerza bruta – Protección MikroTik (configuración básica de seguridad del dispositivo).

🟢 En este artículo se discutió cómo crear un script: notificación de intento de inicio de sesión fallido en el enrutador MikroTik. Espero que ahora pueda mejorar el control sobre los dispositivos MikroTik recibiendo mensajes sobre intentos fallidos de inicio de sesión, rastreando direcciones IP de dispositivos e inicios de sesión usados, 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.

El guión está verificado: RouterBOARD 952Ui-5ac2nD, RouterOS 6.48 (stable).

📒 Al copiar materiales del sitio, debe indicar el autor (Yun Sergey) y un hipervínculo a la fuente (MHelp.pro).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *