Möchtest du automatisch in Mattermost benachrichtigt werden, sobald sich jemand per SSH auf deinem Server einloggt? Soll die Nachricht so aussehen wie im Bild unten?
![Benachrichtigung in Mattermost bei SSH Login 1 2024 05 01 14 59 57 Mattermost Desktop App](https://kanka.dev/wp-content/uploads/2024/05/2024-05-01-14_59_57-Mattermost-Desktop-App.png)
In diesem Artikel zeigen wir dir, wie du bei jedem SSH Login eine Benachrichtigung in Mattermost erhälst. In der Benachrichtigung steht auch, welcher Benutzer sich mit welcher IP-Adresse einloggt.
Mattermost Webhook
Sofern der Channel noch nicht existiert, in dem später die Benachrichtigungen landen sollen, erstelle diesen Channel bitte als erstes. Der Channel könnte „SSH Notifications“ lauten.
Wir brauchen zunächst eine Webhook-URL, an welche unser Script Nachrichten senden soll.
Öffne dazu zunächst Mattermost und klicke oben links auf das Kachel-Symbol (1), anschließend auf „Integrations“ (2).
Wähle dort „Incoming Webhooks“. Auf Deutsch dürfte es „Eingehende Webhooks“ lauten.
Klicke oben rechts auf den blauen Button „Add Incoming Webhook“.
Danach öffnet sich folgendes Fenster:
Fülle die Felder wie folgt aus.
- Hier kannst du deiner Webhook einen sprechenden Namen vergeben. Dieser ist nur für dich wichtig, damit du nachher weißt, warum du dieses „Incoming Webhook“ erstellt hast. Du kannst hier zum Beispiel „SSH Notifications“ schreiben.
- Die Description bzw. Beschreibung ist optional und dir überlassen.
- Wähle hier ein Channel bzw. ein Kanal aus, in dem später die Benachrichtigungen über die SSH Logins ankommen sollen. Ich habe zuvor einen Channel namens „Netcup vServer Monitoring“ erstellt.
- Für unser Script ist das nicht wichtig, aber sicherheitshalber habe ich die Checkbox hier angeklickt. Das bedeutet, dass Nachrichten, die über diese Webhook-URL ankommen nur in dem zuvor ausgewählten Channel posten können.
- Speichern.
Anschließend siehst du eine Webhook-URL:
Aus Sicherheitsgründen haben wir unsere Webhook-URL im Screenshot zensiert, sonst könnte jeder in den Channel posten. Notiere dir diese URL, da wir sie nachher in den Script einbauen werden.
SSH
Stelle sicher, dass in der Datei
/etc/ssh/sshd_config
„UsePAM yes“ steht. Siehe Screenshot:
Script
Erstelle eine Datei mit folgendem Pfad:
/var/ops/ssh_login_notification_mattermost.sh
Im Grunde kannst du die Datei auch in einem anderen Verzeichnis mit einem anderen Dateinamen erstellen, aber du musst wissen wo, da wir diese Information später noch einmal brauchen werden.
In der oben besagten Datei sollte folgender Code drin stehen:
#!/bin/bash
if [ "$PAM_TYPE" != "close_session" ]; then
# Mattermost Webhook URL; TODO
URL=""
# Benutzername des sich einloggenden Benutzers, PAM_USER verwenden
USER=$PAM_USER
# Remote-Host-Adresse des sich einloggenden Benutzers
IP=$PAM_RHOST
# Hostname des Servers
HOST=$(hostname)
# Erstellen des JSON-Inhalts für Mattermost, inklusive Benutzername und IP
CONTENT="{\"text\": \"**SSH Login Alert** \n\nUser: **$USER** \nHost: **$HOST** \nIP: **$IP**\", \"username\": \"SSH Notifications\", \"icon_emoji\": \":inbox-tray:\"}"
# Senden der Daten an Mattermost
curl -X POST -H 'Content-Type: application/json' --data "$CONTENT" "$URL" &
fi
Achtung! Jetzt musst du allerdings nur noch deine Webhook-URL in dieses Script einfügen. Die Variable heißt „URL“. Deine zuvor in Mattermost erstellte Webhook-URL sollte also dort zwischen den Anführungszeichen stehen. Beispiel:
URL="https://mattermost.example.org/hooks/owbnigwoiebgowenbgowregheor"
Speichere diese Datei und stelle sicher, dass diese ausführbar ist.
PAM
Nun müssen wir nur noch sicherstellen, dass dieser Script bei jedem SSH-Login aufgerufen wird.
Öffne dazu die Datei
/etc/pam.d/sshd
Ganz an’s Ende dieser Datei fügst du folgendes ein:
session required pam_exec.so /var/ops/ssh_login_notification_mattermost.sh
Das sieht dann wie folgt aus:
Speichere diese Datei.
Im Grunde war’s das. Teste einfach mal, indem du dich nochmal per SSH einloggst. Du solltest ab sofort immer eine Benachrichtigung in Mattermost erhalten mit dem Namen des Users und seiner IP-Adresse, sobald ein SSH Login erfolgt.
0 Comments