Emails automatisch mit ssmtp versenden

Unter Linux lassen sich viele Sachen automatisieren um Zeit zu sparen und nicht jeden Schritt etliche Male manuell durchführen zu müssen. Bei gewissen Themen ist es jedoch hilfreich eine Information zu erhalten. Dies kann z.B. sein, wenn eine Anmeldung auf einem „sensiblen“ System stattfindet oder sich Fehler auf einer überwachten Festplatte abzeichnen. Eine gute Möglichkeit ist hier der automatisierte Versand von Emails. Dazu wird ein MTA (Mail Transfer Agent) benötigt, welcher die Aufgabe im Hintergrund erledigt. MTAs gibt es unter Linux relativ viele, die alle Ihre Aufgabe erfüllen. Ich habe mich für den Einsatz von „ssmtp“ entschieden, da es ein sehr leichtgewichtiger MTA ist, der nicht viel Konfiguration benötigt um zu funktionieren. Für den Einsatz eines MTAs empfiehlt sich im Optimalfall ein dediziertes Postfach, welches nur hierfür verwendet wird. Sollte das System einmal kompromittiert werden und die Postfachinformationen gehen verloren, dürfte der Schaden geringer sein, als wenn es das private Postfach gewesen wäre.

Installation unter Debian:

sudo apt-get install ssmtp

Installation unter Arch:

sudo pacman -S ssmtp

Die Konfiguration wird in der Datei „/etc/ssmtp/ssmtp.conf“ vorgenommen.

sudo nano /etc/ssmtp/ssmtp.conf

Im Folgenden werden die benötigten Beispielkonfigurationen gezeigt. Die Parameter „root, mailhub, hostname, AuthUser und AuthPass“ müssen natürlich an die eigenen Gegebenheiten angepasst werden.

#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
root=alerts@yourdomain.com
mailhub=smtp.yourdomain.com:587
hostname=localhost
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=mailuser
AuthPass=password
FromLineOverride=yes

Optional lassen sich noch Alias Konfigurationen für Benutzeraccounts festlegen.

sudo nano /etc/ssmtp/revaliases
root:alerts@yourdomain.com:smtp.yourdomain.com:587
username:alerts@yourdomain.com:smtp.yourdomain.com:587

Die Konfiguration ist hiermit auch schon abgeschlossen. Der Erfolg der Einstellungen lässt sich direkt über ein Terminal testen.

echo Nur ein Test | mail -s "ssmtp Test Email" yourname@yourdomain.com

Um die MTA Konfiguration abzusichern, lässt sich eine eigene Applikationsgruppe anlegen. Danach haben ausschließlich Gruppenmitglieder Zugriff auf die Konfigurationsdateien.

sudo groupadd ssmtp
sudo chown :ssmtp /etc/ssmtp/ssmtp.conf
sudo chown :ssmtp /usr/bin/ssmtp
sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chmod g+s /usr/bin/ssmtp

Nach der Konfiguration und Absicherung von ssmtp wird anhand eines Beispiels der Praxiseinsatz demonstriert. Für das Beispiel wird eine Email verschickt, sobald eine erfolgreiche Anmeldung über ssh stattfindet. Dazu muss ein kleines Shell Skript erzeugt werden, welches bei einer SSH Anmeldung ausgeführt wird.

sudo nano /usr/local/bin/ssh_sendmail.sh

Das Skript prüft, ob es sich um eine öffnende SSH Sitzung handelt und fügt noch Informationen wie Benutzernamen, IP und Datum in die Email ein.

#!/bin/sh
mail="alerts@yourdomain.com"
if [ "$PAM_TYPE" != "open_session" ]
then
  exit 0
else
  echo "User $PAM_USER logged in on $HOSTNAME from $PAM_RHOST on `date`" | mail -s "$HOSTNAME ssh login" $mail
fi
exit 0

Für die Ausführung des Skripts wird PAM (Pluggable Authentication Modules) verwendet.

sudo nano /etc/pam.d/sshd

Hier wird die folgende Zeile eingefügt.

session  optional  pam_exec.so /usr/local/bin/ssh_sendmail.sh

ssmtp mta ssh mail pam

Wird jetzt eine neue SSH Session auf dem Zielsystem ausgeführt wird automatisch eine Email mit den wichtigsten Informationen versendet. Weitere Beispiele wird es in zukünftigen Blogeinträgen geben. Für welche Einsatzfälle nutzt Ihr MTAs?