ستكون المقالة أكثر إثارة للاهتمام للمتخصصين الذين يستخدمون أسطولًا صغيرًا من الأجهزة (لا يستخدمون خادمًا منفصلاً ، لنظام مراقبة أو تسجيل) ، والمستخدمين المنزليين ، وأولئك الذين بدأوا في كتابة البرامج النصية للجهاز لأول مرة وأولئك الذين ليس لديهم الوقت / الرغبة في اكتشاف ذلك.
لقد طُلب مني كتابة السيناريو الخاص بي من خلال الرغبة في تبسيط البرامج النصية الوحشية التي يمكن العثور عليها لهذا الطلب على الإنترنت ، وتنفيذ هذا الإجراء البسيط ( مثال على برنامج نصي من MikroTik Wiki) ، بالإضافة إلى توضيح سبب جعل مهندسي MikroTik طريقة تحليل بسيطة مستحيلة إذا لم تكن مقيمًا في لندن. :)
تحلل المقالة مثالاً على إشعار حول تسجيل دخول المستخدم وتسجيل الخروج من جهاز MikroTik ، ولكنها تعرض أيضًا أمثلة:
تنظيم الوقت في سجل الجهاز ؛
تحليل سجل الجهاز ، والبحث عن الأحداث حسب المعايير ؛
إرسال إشعارات البريد الإلكتروني ؛
إرسال رسالة Telegram.
خلفية. لماذا يتم تحليل البرامج النصية لتسجيل MikroTik "وحشية"؟
نعني بالوحشية قدرًا كبيرًا من منطق البرنامج النصي وبناء النموذج:
:set tmpstring ([:pick [:tostr $tmpstring] 0 $findindex] . [:pick [:tostr $tmpstring] ($findindex + [:len [:tostr $ruleop]]) [:len [:tostr $tmpstring]]])
"" , .
MIkroTik, . :)
: " "account", (UTC+06)?
/log find where time > $LastRunTime topics ~ "account"
, 23:59:59 . 12 , 00:00:00 . ?
MikroTik : , , , , "" . , /, , .
? , MikroTik 00:00:00 UTC±0:00. , .. (UTC+06), 6 , . 06:00:00 .
(UTC±0:00), , .
( ), .
, , MikroTik id , (.id , , 0).
ParseLogAccountEndArrayID - .id ;
IDsEventsAccount .id , "account" - (: , ). 1000 , ;
LenArrayIDs - , StartArrayID - ( ID ), EndArrayID - 1( 0).
.id (IDsEventsAccount) .id (ParseLogAccountEndArrayID) (.. "account") (ParseLogAccountEndArrayID) - ( / ) ;
"account", (IDsEventsAccount) , " +1" ( ) " -1" (.. 0);
.id (IDMessage) ;
email, MikroTik;
Telegram , %0D%0A ;
ParseLogAccountEndArrayID ID "account" (EndArrayID).
email;
Telegram;
: read, write, test, policy.
[System] -> [Scripts] -> [+] -> [Name: ParseLogAccountEvents] -> [Policy: read, write, test, policy]
: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={
:local StartArray [:find $IDsEventsAccount $ParseLogAccountLastRunID];
: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];";
}
:set ParseLogAccountEndArrayID $EndArrayID;
# START SEND EMAIL
:local SendFrom "ToMail@mail.ru";
:local PasswordMail "yourpassword";
:local SmtpServer [:resolve "smtp.mail.ru"];
:local UserName "FromMail@mail.ru";
:local SmtpPort 465;
:local UseTLS "tls-only";
:local SendTo "ToMail@mail.ru";
:local Subject "\F0\9F\94\93 AUTH: $DeviceName [$Date $Time]";
:local MessageText $EmailMessageText;
/tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort start-tls=$UseTLS user=$SendFrom password=$PasswordMail from=$SendFrom subject=$Subject body=$MessageText;
# END SEND EMAIL
# START SEND TELEGRAM MESSAGE
:local BotToken "YourBotID";
:local ChatID "YourChatID";
:local ParseMode "html";
:local DisableWebPagePreview True;
:local SendText "\F0\9F\94\93 <b>$DeviceName: AUTH</b> $TelegramMessageText";
:local tgUrl "https://api.telegram.org/bot$BotToken/sendMessage?chat_id=$ChatID&text=$SendText&parse_mode=$ParseMode&disable_web_page_preview=$DisableWebPagePreview";
/tool fetch http-method=get url=$tgUrl keep-result=no;
# END SEND TELEGRAM MESSAGE
}
: read, write, test, policy.
[System] -> [Schedule] -> [+] -> [Name: ParseLogAccountEvents] —> [Interval: 00:05:00] -> [Policy: read, write, policy, test]
:
/system scheduler add name=ParseLogAccountEvents policy=read,write,policy,test on-event="/system script run ParseLogAccountEvents" interval=5m
, MikroTik , .
, Logging:
[System] -> [Logging] -> [Rules] -> [+] -> [Topics]
:
[/log find where message ~ "log"]
, / , ( Firewall , MikroTik Safe Mode) .
, , .
, Telegram , , . : " Email" " Telegram", , MikroTik.
: hAP ac lite, RouterOS 6.47.8 (stable).
ملحوظة: هذه هي أول مقال لي عن حبري ، يمكنك الحكم بصرامة ولكن بنزاهة. لن تقدم المقالة أي شيء جديد للمتخصصين الذين يستخدمون أنظمة المراقبة أو خوادم السجلات المنفصلة. لكن بالنسبة للمبتدئين والمستخدمين المنزليين والمسؤولين الذين لديهم أسطول صغير من أجهزة الشبكة - آمل أن يكون ذلك مفيدًا.