Debian – Push Benachrichtigung bei SSH Anmeldungen

18. Juli 2016

Auch wenn ich meine Server und mein PI hinter Firewalls, CDN und mehr versteckt habe, gibt es Möglichkeiten SSH zu erreichen. Wer möchte das denn nicht? Auch wenn man den Port verlegt, so das Root nicht mehr zugänglich ist und man einen neuen Benutzer erreicht, es gibt keine 100%ige Sicherheit.Bei korrekter Einrichtung von Fail2Ban wird […]

Debian – Push Benachrichtigung bei SSH Anmeldungen
Auch wenn ich meine Server und mein PI hinter Firewalls, CDN und mehr versteckt habe, gibt es Möglichkeiten SSH zu erreichen. Wer möchte das denn nicht? Auch wenn man den Port verlegt, so das Root nicht mehr zugänglich ist und man einen neuen Benutzer erreicht, es gibt keine 100%ige Sicherheit.Bei korrekter Einrichtung von Fail2Ban wird auch schon vorher Alarm geschlagen. Daher kann man sich für den Notfall oder auch bei Benutzung von mehreren Leuten, sich Benachrichtigungen zukommen lassen. Natürlich wäre das möglich per Email wie beim Tempcheck, doch man möchte das ja möglichst sofort. In diesem Beispiel gehe ich nun mit Pushbullet vor, das ich vor einigen Jahren bei entdeckte und seit dem ein treuer Begleiter ist. (Auch wenn ich aktive externe Tools nicht gut heiße.) Wichtig ist das man erst einmal Pushbullet besitzt, egal ob Windows, Chrome oder mobile Variante. Anforderungen installieren: sudo apt-get install gawk curl API erstellen Unter den Account Einstellungen klicken wir auf Create Access Token. Dieser sieht dann ungefähr so aus. b.vacH42DRLvGZ33hBauFLcen3wzvV5ige Wichtig, den Api Key dürft ihr nicht einfach leichtsinnig teilen (gerade im Quellcode auf Github etc.), das steht auch noch einmal explizit dort. ID ermitteln Wichtig ist natürlich, das man Pushbullet an dem jeweiligen Gerät installiert und anmeldet, damit eine ID erzeugt werden kann. Ich persönlich bevorzuge den Browser, da die Windows App bei mir sonst nur gefühlt 100x Meldungen die Minute bringen würde. Jedes Gerät was man direkt mit Pushbullet versehen kann, bekommt eine solche ID. Mit curl ermitteln wir die ID des jeweiligen Gerätes. curl -u APIKEY: https://api.pushbullet.com/api/devices Die ganze Ausgabe sieht dann ungefähr so aus: curl -u b.vacH42DRLvGZ33hBauFLcen3wzvV5ige: https://api.pushbullet.com/api/devices {"devices":[{"id":1787473222222336,"iden":"ujBRRnV15234ftzTLrMxtk","extras":{"manufacturer":"samsung","model":"SM-LMAF","android_version":"","sdk_version":"","app_version":"256"}},{"id":9875042654342592,"iden":"ujBRRnV152GsjAfkAu7BVk","extras":{"manufacturer":"Google","model":"Chrome","android_version":"","sdk_version":"","app_version":"318"}},{"id":0,"iden":"ujBRRnV14687zWIEasdOK","extras":{"manufacturer":"apple","model":"Iphone 7","android_version":"","sdk_version":"","app_version":"153"}},{"id":0,"iden":"ujBR4f352GdjAiVsKnEfa","extras":{"manufacturer":"Mozilla","model":"SM-T800","android_version":"","sdk_version":"","app_version":"42"}},{"id":0,"iden":"ujBR156452Gdjz9U2kKfej","extras":{"manufacturer":"samsung","model":"SM-T400","android_version":"","sdk_version":"","app_version":"134"}}],"shared_devices":[]} Möchten wir nun also die ID des Iphones, müssen wir den iden der manufactur apple nehmen. In unserem Fall wäre das: ujBRRnV14687zWIEasdOK Script erstellen: Jetzt legen wir noch ein Script an, das die Kontrollaufgaben übernimmt. Step 4 Nun legen wir ein kleines Script an, dass später die Logs analysieren wird und ggf. die Nachricht, die über Pushbullet an das Smartphone gesendet wird, erzeugt. Dabei müssen wir in die beiden Variablen APIKEY und IDEN die in Step 1 und Step 2 erhaltenen Keys eintragen. Bei DISABLEDNOTIFICATIONIP kann man, falls gewünscht, noch eine IP-Adresse bzw. einen IP-Adressraum eintragen, für den bei einem SSH Login keine Push Notification erzeugt werden soll. Dies ist praktisch, wenn man z.B. nur benachrichtigt werden möchte, wenn sich jemand von außerhalb des eigenen Netzwerkes anmeldet. Wenn die internen IP-Adressen 192.168.178.xx lautet, muss man 192.168.178 in die Variable eintragen. Wenn alle Logins berücksichtigt werden sollen, muss in der Variable z.B. NONEIP stehen. In dem Editor nano speichert man mittels STRG + X, Y und Enter. sudo nano /usr/local/bin/pushbullet-ssh #!/bin/sh APIKEY="b.vacH42DRLvGZ33hBauFLcen3wzvV5ige" # Your Api Key IDEN="ujBRRnV14687zWIEasdOK" # Device ID DISABLEDNOTIFICATIONIP="NONEIP" # If you did't want get Notifications from Internal Network ## Example # DISABLEDNOTIFICATIONIP="192.168.178" TITLE="Servername SSH Login " # Device ID tail -F /var/log/auth.log | gawk -v APIKEY=$APIKEY -v IDEN=$IDEN -v DISABLEDNOTIFICATIONIP=$DISABLEDNOTIFICATIONIP '{ if(NR>10 && $0 ~ /sshd/ && $0 ~ /Accepted/ && $0 !~ /'"$DISABLEDNOTIFICATIONIP"'/) { cmd=sprintf("curl https://api.pushbullet.com/api/pushes -u " APIKEY ": -d device_iden=" IDEN " -d type=note -d title=\"$TITLE\" -d body=\"User %s has logged in from %s\" -X POST", $9, $11); system(cmd) } }' Berechtigungen erweitern: Damit der Cronjob auch klappt, müssen die Ausführungs und Lese Rechte gegeben werden. sudo chmod u+x /usr/local/bin/pushbullet-ssh Cronjob anlegen: Jetzt müssen wir das Script in eine Crontab legen, damit es beim Start des Raspberry Pis aufgerufen wird. Dazu fügen wir folgende Zeile am Ende der Crontab Datei in eine neue Zeile ein. crontab -e @reboot sudo pushbullet-ssh Neustarten und nun das Script "geniesen". sudo reboot Wichtig dabei ist, das es ein wenig Ressourcen frisst und das es noch weitere effektivere Möglichkeiten gibt. Doch für das einfache reicht das hier und lässt sich dementsprechend auch auf andere Scripte anwenden. Übrigens, das originale Script habe ich auf einem Forum für Raspis gefunden auf der Suche logstash Benachrichtigungen, leider finde ich den Link nicht mehr.

Kommentare

Kommentare werden geladen...

Weitere Beiträge