colinardo
Goto Top

Mikrotik Skript: E-Mail Benachrichtigung über neue MAC-Adressen im Netzwerk

Servus Kollegen,
hatte vor kurzem einen Kunden der folgendes Anliegen hatte: Es sollte über jede neu auftauchende MAC-Adresse für die per DHCP eine Lease auf dem Mikrotik ausgegeben wurde eine Mail verschickt werden, und das nur über ein Skript auf dem Mikrotik.
Das Script kann über den Scheduler regelmäßig nach Bedarf, z.B. alle 5 Minuten ausgeführt werden oder direkt im DHCP-Server unter Lease-Skript eingetragen werden und vergleicht die bereits jemals aufgetauchten MACs (werden in einer einfachen Textdatei gespeichert) mit der aktuellen Lease-Liste der aktiven DHCP-Server auf dem Mikrotik. Kommt eine/mehrere neue dazu wird eine Mail mit den Informationen zum Client (MAC,Name,IP-Adresse,DHCP-Servername) per Mail verschickt und die MAC zur Liste der bekannten MACs hinzugefügt.

Absender- und Empfänger E-Mail Adresse sind im Kopf des Skripts anzugeben. Voraussetzung für das Funktionieren der Benachrichtigung ist natürlich das bereits ein E-Mail-Konto unter /tool e-mail hinterlegt ist.
Welche(r) DHCP-Server berücksicht werden soll kann ebenfalls in der Variablen "dhcpserver" als Regular Expression String angegeben werden. Ein Punkt inkludiert hier also die Leases aller vorhandenen DHCP-Server.
# Dateiname zur Sicherung der MACs 
:local filename "known-macs.txt"  
# Welche DHCP Server Leases sollen überwacht werden (Achtung bitte Regular Expression String benutzen / Ein Punkt berücksichtigt alle DHCP-Server)
:local dhcpserver "."  
# Absender-Adresse
:local MAILFROM "userfrom@domain.de"  
# Empfänger-Adresse
:local MAILTO "userto@domain.de"  
# aktuelle leases der angegebenen DHCP-Server holen
:local leases [/ip dhcp-server lease print as-value where server ~ "$dhcpserver"]  
# variables
:local newmacs ""  
:local foundnew false
:local mailbody ""  
:local filedata ""  

:if ([/file find name=$filename] != "") do={  
    # Datei mit bekannten MAC-Adressen existiert, setze Variable mit Inhalt
    :set filedata [/file get $filename contents]
} else={
    # Datei mit bekannten MAC-Adressen existiert noch nicht, erstelle Datei
    /file print from=0 file=$filename
    :delay 1
}

# Prüfe jede MAC ob sie noch nicht in der Datei vorhanden ist
:foreach mac in=$leases do={
    :if ([:find $filedata ($mac->"mac-address")] < 0) do={  
            :set newmacs ($newmacs . ($mac->"mac-address") . ";" . ($mac->"host-name") . "\r\n")  
            :set mailbody ($mailbody . "MAC-ADRESSE: " . ($mac->"mac-address") . "\r\nHOSTNAME: " . ($mac->"host-name") . "\r\nSERVER: " . ($mac->"server") . "\r\nIP: " . ($mac->"address"). "\r\n=============")  
            :set foundnew true
    }
}

# wenn neue MACs vorhanden sind schreibe sie in die Datei zurück, schreibe Info ins Log und benachrichtige per Mail
:if ($foundnew = true) do={
    /file set $filename contents=($filedata . $newmacs)
    :log warning ("Neu erkannte MAC-Adressen im Netzwerk:\r\n" . $mailbody)  

    /tool e-mail send to="$MAILTO" subject="Neue MAC-Adresse(n) im Netzwerk" from="$MAILFROM" body=("Es wurde(n) neue MAC-Adresse(n) im Netzwerk registriert:\r\n" . $mailbody)  
}
Dachte das kann vielleicht der ein oder andere mal gebrauchen.

Viel Spaß
Grüße @colinardo

back-to-topUpdates
DatumÄnderung
10.05.2017 + Optimierung (Zusammenfassung bei mehreren MACs zu einer Mail, Angabe der zu berücksichtigenden DHCP-Server)

Content-Key: 326550

Url: https://administrator.de/contentid/326550

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 16.01.2017 um 15:03:34 Uhr
Goto Top
Zitat von @colinardo:

Dachte das kann vielleicht der ein oder andere mal gebrauchen.

Ich fackel das zwar meist über arpwatch ab, aber es ist gut zu wissen, daß man das mit wenig Aufwand auch auf einem Mikrotik erschlagen kann.

lks
Mitglied: colinardo
colinardo 16.01.2017 aktualisiert um 15:34:43 Uhr
Goto Top
Hi lks,
ich warte ja immer noch auf ein Event-Subscription System in RouterOS, das würde dort vieles vereinfachen und effizienter machen, so das man nicht alles über den Scheduler abfackeln muss. MetaROUTER ginge zwar auch, wäre jedoch etwas Overkill dafür.

Grüße Uwe
Mitglied: 131381
131381 16.01.2017 um 15:44:02 Uhr
Goto Top
Hey,
ich warte ja immer noch auf ein Event-Subscription System in RouterOS
Nicht nur du face-smile!

Danke dir für das Skript.

Gruß mik
Mitglied: aqui
aqui 16.01.2017 aktualisiert um 16:02:50 Uhr
Goto Top
Wenn die Grundlage die Mac Datenbank des DHCP Servers ist greift das auch bei statischen IPs ?
Der MT muss dann auch DHCP sein, richtig ? Mit einem externen DHCP würde es nicht klappen, oder ?
Aber abgesehen davon sehr pfiffige Lösung !
Mitglied: colinardo
colinardo 16.01.2017 aktualisiert um 16:05:30 Uhr
Goto Top
Hi @aqui,
Zitat von @aqui:
Wenn die Grundlage die Mac Datenbank des DHCP Servers ist greift das auch bei statischen IPs ?
Bei diesem Skript nicht, das war hier nicht die Anforderung des Kunden da bei diesem statische IPs unterbunden werden,
die statischen lassen sich aber leicht zusätzlich auch aus /ip arp auslesen wenn man das zusätzlich wollte.

Der MT muss dann auch DHCP sein, richtig. Mit einem externen DHCP würde es nicht klappen, richtig ?
Korrekt. Quelle sind die DHCP-Server leases direkt auf dem Mikrotik.

Grüße Uwe