Script MikroTik: Notification de tentative de connexion échouée

Le script MikroTik utile est de recevoir une notification par e-mail ou un message Telegram lorsqu’un échec de connexion pour un message utilisateur apparaît dans le journal de l’appareil MikroTik (« login failure for user …« ). Vous permet de découvrir les tentatives de force brute d’un mot de passe, vous indiquera l’adresse IP ou MAC de l’appareil qui tente de se connecter, ainsi que la connexion avec laquelle il essaie de se connecter à l’appareil.

Exemple d'e-mail - notification d'échec de connexion pour l'utilisateur, à l'appareil MikroTik

Contenu

  1. Description du script
  2. Créer un script
  3. Code de script
  4. Ajouter un script au planificateur

Article dans d’autres langues:
?? – MikroTik Script: Failed login attempt notification
?? – MikroTik Script: Notificación de intento de iniciar sesión fallido
?? – MikroTik Скрипт: Уведомление о ошибке входа в систему
?? – MikroTik-Script: Benachrichtigung über Anmeldefehler
?? – MikroTik-script: Melding van mislukte inlogpoging

Description du script

Le script analyse le journal de l’appareil pour rechercher les événements «login failure for user», envoie un e-mail ou un message Telegram lorsque des événements sont trouvés.

Analyse les événements depuis la dernière heure de démarrage (variable ParseLogLoginEndArrayID).

Les fonctions suivantes sont utilisées pour envoyer des notifications:

Le script appelle des fonctions avec les noms: EMailSendMessageFunction, TGBotSendMessageFunction. Si vos fonctions ont un nom différent, modifiez-le dans le script.

Exemple de message Telegram - notification d'échec de connexion pour l'utilisateur, à l'appareil MikroTik

✏️ Si vous détectez des tentatives de connexion fréquentes en utilisant votre nom d’utilisateur actuel, peut-être que le nom d’utilisateur est devenu connu des attaquants, la meilleure option serait de changer le nom d’utilisateur.

Créer un script

Les autorisations suivantes sont requises pour exécuter le script: read, write, test, policy.

[System] -> [Scripts] -> [+] -> [Name: ParseLogLoginFailure] -> [Policy: read, write, test, policy]
Script MikroTik - Notification de tentative de connexion échouée

Code de script

# 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;

Ajouter un script au planificateur

Les autorisations suivantes sont requises pour exécuter le script: read, write, test, policy.

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

Ou exécutez dans le terminal:

/system scheduler add name=ParseLogLoginFailure policy=read,write,policy,test on-event="/system script run ParseLogLoginFailure" interval=5m comment="Parse device log and sending failed login events"
MHelp.pro: Ajout d'un script au planificateur de tâches MikroTik

? Vous pouvez configurer des règles de pare-feu pour bloquer les attaques par force brute – MikroTik Protection (paramètre de sécurité de base de l’appareil).

? Comment créer un script – notification de tentative de connexion échouée dans le routeur MikroTik, a été abordé dans cet article. J’espère que vous pourrez désormais améliorer le contrôle des appareils MikroTik en recevant des messages sur les tentatives de connexion infructueuses, en suivant les adresses IP des appareils et les connexions utilisées, en détectant les actions d’un intrus à temps. Cependant, si vous rencontrez des problèmes lors de la configuration du script, n’hésitez pas à écrire dans les commentaires. J’essaierai d’aider.

Le script est vérifié: RouterBOARD 952Ui-5ac2nD, RouterOS 6.48 (stable).

Laisser un commentaire