MIKROTIK INVIO ALERT SU TELEGRAM – LOG FILTER
MIKROTIK SCRIPT TELEGRAM INVIO NOTIFICHE
In questa semplice guida vediamo come possiamo facilmente attivare degli alert che riceveremo su Telegram in base alle nostre esigenze con un semplice script Mikrotik.
N.B. Questo script è funzionante anche sulle versioni over 7.10 in quanto son presenti gli adattamenti in linea con lo standard ISO Data e Ora.
Ho importato parte di questo script dal Repository ufficiale gitHub di Druvis Timma di Mikrotik, è ho eseguito alcune modifiche per utilizzare fino a tre ChatID, escludere alcune voci dei log, creazione Schedule automatico, aggiunta nome cliente o azienda, Intestazione Dispostivo e altro.
Componenti Neccessari:
- Un Router Mikrotik qualsiasi (es. Mikrotik hAP ac2)
- Una connessione internet.
- Un bot Telegram.
Livello difficoltà: Medio-basso
Obbiettivo 1 : Crea un bot Telegram
Per quanto riguarda la creazione di un bot telegram fai riferimento a questa guida:
Obbiettivo 2: Configurare lo script sul router Mikrotik
- Vai in New Terminal e incolla questo script:
/system script
add dont-require-permissions=yes name=LogFilter3.0 owner=abbio90 policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\r\
\n\r\
\n\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n# LOG FILTER TO TELEGRAM BY foisfabio.it\r\
\n\r\
\n# \r\
\n\r\
\n# Script: Log Filter to Telegram\r\
\n\r\
\n# Version: 4.0\r\
\n\r\
\n# RouterOS v.7.15.1\r\
\n\r\
\n# Created: 05/02/2023\r\
\n\r\
\n# Updated: 25/06/2024\r\
\n\r\
\n# Author: Druvis Timma\r\
\n\r\
\n# Editor: Fois Fabio\r\
\n\r\
\n# Website: https://foisfabio.it\r\
\n\r\
\n# Email: consulenza@foisfabio.it\r\
\n\r\
\n#\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui il botID\r\
\n\r\
\n:local tgBot \"123456789:abcdefghilmnopqrstuvz\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui il chatID1 (es: \"123456789\")\r\
\n\r\
\n:local tgChatID1 \"123456789\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire yes o no se si vuole utilizzare il chatID2 (es. \"si\")\r\
\n\r\
\n:local useChatID2 \"no\"\r\
\n:local logChatID2 \"no\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui il chatID2 (es: \"123456789\")\r\
\n\r\
\n:local tgChatID2 \"123456789\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire yes o no se si vuole utilizzare il chatID3 (es: \"no\")\r\
\n\r\
\n:local useChatID3 \"no\"\r\
\n:local logChatID3 \"no\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui il chatID3 (es: \"123456789\")\r\
\n\r\
\n:local tgChatID3 \"123456789\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire nome azienda\r\
\n\r\
\n:local azienda \"Fabio Fois\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#PAROLE CHIAVE DA CERCARE\r\
\n\r\
\n:local search \"failure|loop|excessive|Netwatch_|pppoe-out_EOLO: connected|pppoe-out_EOLO:disconnected|INDIRIZZO REMOTO GRE|STATO PEER EDOK=|DuckDNS: Current IP|gre-tunnel2\"\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui la parole chiave DA NON CERCARE \r\
\n\r\
\n:local noSearch \"initiator can't find identity|phase1 negotiation failed|TLS Error|payload missing|no suitable proposal found|ntp change\"\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui ogni qunto tempo eseguire lo script\r\
\n\r\
\n:local myRunTime 60s\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n#inserire qui uno slogan pubblicitario\r\
\n\r\
\n:local slogan \"\\F0\\9F\\92\\BB Sistema di alert by foisfabio.it\"\r\
\n\r\
\n\r\
\n\r\
\n\r\
\n\r\
\n#----------NO MODIFY THIS SECTION----------\r\
\n\r\
\n\r\
\n\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n\r\
\n\r\
\n:local scheduleName \"LogFilter3.0\"\r\
\n\r\
\n:if ([:len [/system scheduler find name=\"\$scheduleName\"]] = 0) do={\r\
\n\r\
\n /log error \"[LogFilter3.0] Alert : lo Scheduler non esiste. Creo lo scheduler\"\r\
\n\r\
\n\r\
\n\r\
\n /system scheduler add name=\$scheduleName interval=\$myRunTime start-date=Jan/01/1970 start-time=startup on-event=\"system script run LogFilter3.0\"\r\
\n\r\
\n\r\
\n\r\
\n /log warning \"[LogFilter3.0] Alert : Scheduler creato .\"\r\
\n\r\
\n}\r\
\n\r\
\n#----------------------------------------\r\
\n\r\
\n:global anydate2isodate do={\r\
\n\r\
\n :local dtime [:tostr \$1]\r\
\n\r\
\n /system clock\r\
\n\r\
\n :local cyear [get date] ; :if (\$cyear ~ \"....-..-..\") do={:set cyear [:pick \$cyear 0 4]} else={:set cyear [:pick \$cyear 7 11]}\r\
\n\r\
\n :if (([:len \$dtime] = 10) or ([:len \$dtime] = 11)) do={:set dtime \"\$dtime 00:00:00\"}\r\
\n\r\
\n :if ([:len \$dtime] = 15) do={:set dtime \"\$[:pick \$dtime 0 6]/\$cyear \$[:pick \$dtime 7 15]\"}\r\
\n\r\
\n :if ([:len \$dtime] = 14) do={:set dtime \"\$cyear-\$[:pick \$dtime 0 5] \$[:pick \$dtime 6 14]\"}\r\
\n\r\
\n :if ([:len \$dtime] = 8) do={:set dtime \"\$[get date] \$dtime\"}\r\
\n\r\
\n :if ([:tostr \$1] = \"\") do={:set dtime (\"\$[get date] \$[get time]\")}\r\
\n\r\
\n :local vdoff [:toarray \"0,4,5,7,8,10,11,19\"]\r\
\n\r\
\n :local MM [:pick \$dtime (\$vdoff->2) (\$vdoff->3)]\r\
\n\r\
\n :if (\$dtime ~ \".../../....\") do={\r\
\n\r\
\n :set vdoff [:toarray \"7,11,1,3,4,6,12,20\"]\r\
\n\r\
\n :set MM ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGEPCTOVEC\" [:pick \$dtime (\$vdoff->2) (\$vdoff->3)] -1] / 2)\r\
\n\r\
\n :if (\$MM>12) do={:set MM (\$MM - 12)} ; :if (\$MM<10) do={:set MM \"0\$MM\"}\r\
\n\r\
\n }\r\
\n\r\
\n :return \"\$[:pick \$dtime (\$vdoff->0) (\$vdoff->1)]-\$MM-\$[:pick \$dtime (\$vdoff->4) (\$vdoff->5)] \$[:pick \$dtime (\$vdoff->6) (\$vdoff->7)]\"\r\
\n\r\
\n}\r\
\n\r\
\n\r\
\n\r\
\n:global UTF8toURLencode do={\r\
\n\r\
\n :local ascii \"\\00\\01\\02\\03\\04\\05\\06\\07\\08\\09\\0A\\0B\\0C\\0D\\0E\\0F\\\r\
\n\r\
\n \\10\\11\\12\\13\\14\\15\\16\\17\\18\\19\\1A\\1B\\1C\\1D\\1E\\1F\\\r\
\n\r\
\n \\20\\21\\22\\23\\24\\25\\26\\27\\28\\29\\2A\\2B\\2C\\2D\\2E\\2F\\\r\
\n\r\
\n \\30\\31\\32\\33\\34\\35\\36\\37\\38\\39\\3A\\3B\\3C\\3D\\3E\\3F\\\r\
\n\r\
\n \\40\\41\\42\\43\\44\\45\\46\\47\\48\\49\\4A\\4B\\4C\\4D\\4E\\4F\\\r\
\n\r\
\n \\50\\51\\52\\53\\54\\55\\56\\57\\58\\59\\5A\\5B\\5C\\5D\\5E\\5F\\\r\
\n\r\
\n \\60\\61\\62\\63\\64\\65\\66\\67\\68\\69\\6A\\6B\\6C\\6D\\6E\\6F\\\r\
\n\r\
\n \\70\\71\\72\\73\\74\\75\\76\\77\\78\\79\\7A\\7B\\7C\\7D\\7E\\7F\\\r\
\n\r\
\n \\80\\81\\82\\83\\84\\85\\86\\87\\88\\89\\8A\\8B\\8C\\8D\\8E\\8F\\\r\
\n\r\
\n \\90\\91\\92\\93\\94\\95\\96\\97\\98\\99\\9A\\9B\\9C\\9D\\9E\\9F\\\r\
\n\r\
\n \\A0\\A1\\A2\\A3\\A4\\A5\\A6\\A7\\A8\\A9\\AA\\AB\\AC\\AD\\AE\\AF\\\r\
\n\r\
\n \\B0\\B1\\B2\\B3\\B4\\B5\\B6\\B7\\B8\\B9\\BA\\BB\\BC\\BD\\BE\\BF\\\r\
\n\r\
\n \\C0\\C1\\C2\\C3\\C4\\C5\\C6\\C7\\C8\\C9\\CA\\CB\\CC\\CD\\CE\\CF\\\r\
\n\r\
\n \\D0\\D1\\D2\\D3\\D4\\D5\\D6\\D7\\D8\\D9\\DA\\DB\\DC\\DD\\DE\\DF\\\r\
\n\r\
\n \\E0\\E1\\E2\\E3\\E4\\E5\\E6\\E7\\E8\\E9\\EA\\EB\\EC\\ED\\EE\\EF\\\r\
\n\r\
\n \\F0\\F1\\F2\\F3\\F4\\F5\\F6\\F7\\F8\\F9\\FA\\FB\\FC\\FD\\FE\\FF\"\r\
\n\r\
\n :local UTF8toURLe {\"00\";\"01\";\"02\";\"03\";\"04\";\"05\";\"06\";\"07\";\"08\";\"09\";\"0A\";\"0B\";\"0C\";\"0D\";\"0E\";\"0F\";\r\
\n\r\
\n \"10\";\"11\";\"12\";\"13\";\"14\";\"15\";\"16\";\"17\";\"18\";\"19\";\"1A\";\"1B\";\"1C\";\"1D\";\"1E\";\"1F\";\r\
\n\r\
\n \"+\";\"21\";\"22\";\"23\";\"24\";\"25\";\"26\";\"27\";\"28\";\"29\";\"2A\";\"2B\";\"2C\";\"-\";\".\";\"2F\";\r\
\n\r\
\n \"0\";\"1\";\"2\";\"3\";\"4\";\"5\";\"6\";\"7\";\"8\";\"9\";\"3A\";\"3B\";\"3C\";\"3D\";\"3E\";\"3F\";\r\
\n\r\
\n \"40\";\"A\";\"B\";\"C\";\"D\";\"E\";\"F\";\"G\";\"H\";\"I\";\"J\";\"K\";\"L\";\"M\";\"N\";\"O\";\r\
\n\r\
\n \"P\";\"Q\";\"R\";\"S\";\"T\";\"U\";\"V\";\"W\";\"X\";\"Y\";\"Z\";\"5B\";\"5C\";\"5D\";\"5E\";\"_\";\r\
\n\r\
\n \"60\";\"a\";\"b\";\"c\";\"d\";\"e\";\"f\";\"g\";\"h\";\"i\";\"j\";\"k\";\"l\";\"m\";\"n\";\"o\";\r\
\n\r\
\n \"p\";\"q\";\"r\";\"s\";\"t\";\"u\";\"v\";\"w\";\"x\";\"y\";\"z\";\"7B\";\"7C\";\"7D\";\"~\";\"7F\";\r\
\n\r\
\n \"80\";\"81\";\"82\";\"83\";\"84\";\"85\";\"86\";\"87\";\"88\";\"89\";\"8A\";\"8B\";\"8C\";\"8D\";\"8E\";\"8F\";\r\
\n\r\
\n \"90\";\"91\";\"92\";\"93\";\"94\";\"95\";\"96\";\"97\";\"98\";\"99\";\"9A\";\"9B\";\"9C\";\"9D\";\"9E\";\"9F\";\r\
\n\r\
\n \"A0\";\"A1\";\"A2\";\"A3\";\"A4\";\"A5\";\"A6\";\"A7\";\"A8\";\"A9\";\"AA\";\"AB\";\"AC\";\"AD\";\"AE\";\"AF\";\r\
\n\r\
\n \"B0\";\"B1\";\"B2\";\"B3\";\"B4\";\"B5\";\"B6\";\"B7\";\"B8\";\"B9\";\"BA\";\"BB\";\"BC\";\"BD\";\"BE\";\"BF\";\r\
\n\r\
\n \"C0\";\"C1\";\"C2\";\"C3\";\"C4\";\"C5\";\"C6\";\"C7\";\"C8\";\"C9\";\"CA\";\"CB\";\"CC\";\"CD\";\"CE\";\"CF\";\r\
\n\r\
\n \"D0\";\"D1\";\"D2\";\"D3\";\"D4\";\"D5\";\"D6\";\"D7\";\"D8\";\"D9\";\"DA\";\"DB\";\"DC\";\"DD\";\"DE\";\"DF\";\r\
\n\r\
\n \"E0\";\"E1\";\"E2\";\"E3\";\"E4\";\"E5\";\"E6\";\"E7\";\"E8\";\"E9\";\"EA\";\"EB\";\"EC\";\"ED\";\"EE\";\"EF\";\r\
\n\r\
\n \"F0\";\"F1\";\"F2\";\"F3\";\"F4\";\"F5\";\"F6\";\"F7\";\"F8\";\"F9\";\"FA\";\"FB\";\"FC\";\"FD\";\"FE\";\"FF\"\r\
\n\r\
\n }\r\
\n\r\
\n :local string \$1\r\
\n\r\
\n :if (([:typeof \$string] != \"str\") or (\$string = \"\")) do={ :return \"\" }\r\
\n\r\
\n :local lenstr [:len \$string]\r\
\n\r\
\n :local constr \"\"\r\
\n\r\
\n :for pos from=0 to=(\$lenstr - 1) do={\r\
\n\r\
\n :local urle (\$UTF8toURLe->[:find \$ascii [:pick \$string \$pos (\$pos + 1)] -1])\r\
\n\r\
\n :local sym \$urle\r\
\n\r\
\n :if ([:len \$urle] = 2) do={:set sym \"%\$[:pick \$urle 0 2]\" }\r\
\n\r\
\n :set constr \"\$constr\$sym\"\r\
\n\r\
\n }\r\
\n\r\
\n :return \$constr\r\
\n\r\
\n}\r\
\n\r\
\n\r\
\n\r\
\n:global lastLog\r\
\n\r\
\n:if ([:typeof \$lastLog] != \"num\") do={:set lastLog 0}\r\
\n\r\
\n\r\
\n\r\
\n{\r\
\n\r\
\n:local tgPrefix \"Cliente: \$azienda \\r\\nDispositivo: MikroTik \$[/system resource get board-name]\\r\\nIdentita': \$[/system identity get name] \\r\\n \"\r\
\n\r\
\n:local tkwd \"critical|error|warning\"\r\
\n\r\
\n:local mkwd \"\"\r\
\n\r\
\n:local ukwd \"\"\r\
\n\r\
\n:set mkwd (\$search)\r\
\n\r\
\n:set ukwd (\$noSearch)\r\
\n\r\
\n:local id2num do={:return [:tonum \"0x\$[:pick \$1 1 [:len \$1]]\"]}\r\
\n\r\
\n:local tgmessg \"\"\r\
\n\r\
\n:local emotico \"\"\r\
\n\r\
\n:local temp \"\"\r\
\n\r\
\n\r\
\n\r\
\n/log\r\
\n\r\
\n:foreach item in=[find where (([\$id2num \$\".id\"] > \$lastLog and buffer=memory) \\\r\
\n\r\
\n and \\\r\
\n\r\
\n (([:tostr \$topics]~\"(\$tkwd)\") or (message~\"(\$mkwd)\")) and !(message~\"(\$ukwd)\"))] do={\r\
\n\r\
\n :set lastLog [\$id2num \$item]\r\
\n\r\
\n :set emotico \"\"\r\
\n\r\
\n :local temp [:tostr [get \$item topics]]\r\
\n\r\
\n :if (\$temp~\"critical\") do={:set emotico \"\\E2\\98\\A0\\20\"}\r\
\n\r\
\n :if (\$temp~\"error\") do={:set emotico \"\$emotico\\E2\\9D\\8C\\20\"}\r\
\n\r\
\n :if (\$temp~\"warning\") do={:set emotico \"\$emotico\\E2\\9A\\A0\\20\"}\r\
\n\r\
\n :set tgmessg \"\$tgmessg \$[\$anydate2isodate [get \$item time]]\\r\\n\$emotico\$[get \$item message]\\r\\n \"\r\
\n\r\
\n}\r\
\n\r\
\n\r\
\n\r\
\n:if (\$tgmessg != \"\") do={\r\
\n\r\
\n :set tgmessg [\$UTF8toURLencode (\"\$tgPrefix\\r\\n\$tgmessg\\r\\n\$slogan\")]\r\
\n\r\
\n /tool fetch url=\"https://api.telegram.org/bot\$tgBot/sendMessage\\3Fchat_id=\$tgChatID1&text=\$tgmessg\" keep-result=no\r\
\n\r\
\n :delay 3s\r\
\n\r\
\n :if (\$useChatID2=\"yes\") do={\r\
\n\r\
\n /tool fetch url=\"https://api.telegram.org/bot\$tgBot/sendMessage\\3Fchat_id=\$tgChatID2&text=\$tgmessg\" keep-result=no\r\
\n\r\
\n } else={\r\
\n\r\
\n :if (\$logChatID2=\"yes\") do={\r\
\n\r\
\n :log warning \"[LogFilter3.0] ChatID2 non utilizzato\"; \r\
\n }\r\
\n\r\
\n }\r\
\n\r\
\n :delay 3s\r\
\n\r\
\n :if (\$useChatID3=\"yes\") do={\r\
\n\r\
\n /tool fetch url=\"https://api.telegram.org/bot\$tgBot/sendMessage\\3Fchat_id=\$tgChatID3&text=\$tgmessg\" keep-result=no\r\
\n\r\
\n } else={\r\
\n\r\
\n :if (\$logChatID3=\"yes\") do={\r\
\n\r\
\n :log warning \"[LogFilter3.0] ChatID3 non utilizzato\";\r\
\n }\r\
\n }\r\
\n\r\
\n}\r\
\n\r\
\n}"
2. Ora nel terminale digitiamo:
/system script run LogFilter3.0
Perfetto, in questa maniera abbiamo creato lo script e abbiamo attivato la Schedulazione.
Vediamo ora come personalizzarlo.
Obbiettivo 3: Personalizzare lo script
- Clicchiamo nel tab /system script.
- Apriamo lo script LogFilter3.0.
Si dovrebbe presentare così.
Come potrai notare trovi le istruzioni all’interno dello script.
- Inserire il bot Telegram :local tgBot “123456789:abcdefghilmnopqrstuvz” (obbligatorio)
- Inserire il chat ID1 :local tgChatID1 “123456789” (obbligatorio)
- Inserire yes o no sulla voce :local useChatID2 “yes” (impostare no se non utilizzato)
- Inserire yes o no sulla voce :local logChatID2 “no” (opzionale)
- Inserire il chat ID2 :local tgChatID2 “4567891234” (opzionale)
- Inserire yes o no sulla voce :local useChatID3 “no” (opzionale)
- Inserire yes o no sulla voce :local logChatID3 “no” (opzionale) (N.B Se imposti su logChatID2 o logChatID3 il valore yes, nei log apparirà la voce “[LogFilter3.0] ChatIDX non utilizzato”)
- Inserire il nome Cliente :local azienda “Fabio Fois” (obbligatorio)
- Inserire parole da cercare :local search “failure|loop|excessive|Netwatch_|pppoe-out_EOLO: connected|pppoe-out_EOLO:disconnected|INDIRIZZO REMOTO GRE|STATO PEER EDOK=|DuckDNS: Current IP|gre-tunnel2” (personalizza rispettando la sintassi)
- Inserire parole da non cercare :local noSearch “initiator can’t find identity|phase1 negotiation failed|TLS Error|payload missing|no suitable proposal found|ntp change” (personalizza rispettando la sintassi)
(N.B le voci presenti nei log con topic: “critical, warning ed error” verranno inviati ad esclusione delle voci indicate nel punto 10 quelle indicate nel punto 9 vengono trasmesse al di là del topic).
Dopo aver modificato lo script in base alle tue esigenze, clicca su Apply.
Ora genera un evento che provochi l’invio dell’alert su Telegram; (es. login fallito)
Dovresti ricevere il messaggio Telegram come da immagine seguente.
Vuoi ulteriori infomazioni su questa configurazione, o vuoi fare qualche domanda per approfondire?
Scrivi nei commenti o contattami attraverso la sezione Contatti.
Non perdere le novità del mondo del Network e dell’informatica.
Ti è piaciuta questa guida MIKROTIK ALERT TELEGRAM Segui tutte le guide su RouterOS alla pagina: Guide Mikrotik.
Da oggi puoi rimanere sempre informato sui nuovi articoli iscrivendoti alla newsletter o al nostro canale telegram: Guide Mikrotik – foisfabio.it.
Puoi inviare il tuo contributo Paypal oppure commenta e condividi questo contenuto.
Hai riscontrato errori in questa guida?? segnalacelo tramite la scheda CONTATTI
Scopri hAP ax lite, il nuovo router Mikrotik con potente processore ARM.
Quanto è stato utile questo post?
Clicca su una stella per valutarla!
Voto medio 0 / 5. Conteggio dei voti: 0
Nessun voto finora! Sii il primo a valutare questo post.