sSMTP für Einsteiger – A Complete Guide

Ubuntu Logo

Im Netz finden sich jede Menge Anleitungen, wie man SMTP installiert und konfiguriert. Die meisten dieser Artikel sind aber für Anfänger zu rudimentär und daher habe ich eine sehr ausführliche Beschreibung mit ein paar weitergehenden Tricks verfasst, in der ich versuche Zusammenhänge auch für Einsteiger verständlich zu erklären.

Um sich LOG-Files zusenden zu lassen oder über bestimmte Ereignisse auf einem Server per E-Mail informiert zu werden, ist SMTP ein probates Werkzeug. Ein eigener Mailserver ist dafür nicht unbedingt notwendig, da man auch über ein bestehendes Konto bei einem E-Mail-Provider versenden kann.

Operating system: Ubuntu

Installation

Zuerst aktualisiert man die Paketquellen mit

1
sudo apt-get update

und installiert das Paket.

1
sudo apt-get install ssmtp

Konfiguration

Im Verzeichnis /etc/ssmtp/ befinden sich jetzt zwei Konfigurationsdateien, die angepasst werden müssen. Die Datei ssmtp.conf enthält die Informationen, wie und über welchen Mailserver gesendet werden soll.

1
sudo nano /etc/ssmtp/ssmtp.conf

Folgende Angaben werden dort eingetragen:

1
2
3
4
5
6
7
8
9
# /etc/ssmtp.conf
root=<reportuser>@<domain>
mailhub=<mailserver.des.providers>:587
hostname=localhost
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=<mailuser>
AuthPass=<password>
FromLineOverride=Yes
  • <reportuser>@<domain> ist die Adresse des E-Mail-Kontos beim Provider, über den versendet wird
  • <mailserver.des.providers> ist der smtp-Server des Providers, bei gmail wäre das z.B. smtp.gmail.com.
  • Der Port im Parameter mailhub hängt vom Provider ab, ist aber in der Regel 587.
  • hostname ist der Name des Systems, auf dem sSMTP läuft. Daher kann hier auch tatsächlich localhost eingetragen werden.

Die Konfigurationsdatei revaliases im Verzeichnis /etc/ssmtp/ muss ebenfalls geändert werden-

1
sudo nano /etc/ssmtp/revaliases

Folgende Angaben werden dort eingetragen:

1
2
root:<reportuser>@<domain>:<mailserver.des.providers>:587
<username>:<reportuser>@<domain>:<mailserver.des.providers>:587

Hier wird festgelegt, dass der User root über den Account beim Provider versendet. In der zweiten und evtl. weiteren Zeilen werden alle User eingetragen, die über den Account beim Provider versenden dürfen. Dies ist auch deswegen notwendig, weil Provider in der Regel keinen Versand mit anderen als der angemeldeten E-Mail-Adresse zulassen.
Gibt es also auf dem System einen User johndoe, der wie root über einen Account alarm@gmail.com versenden darf, muss die Datei so aussehen:

1
2
root:alarm@gmail.com:smtp.gmail.com:587
johndoe::alarm@gmail.com:smtp.gmail.com:587

Die Konfiguration kann jetzt mit

1
ssmtp -v <empfänger>@<domain>

getestet werden. Geben Sie jetzt ein paar Worte ein und drücken Sie dann STRG + D zum Absenden der Mail.

Sollten Sie als normaler Systemuser den Fehler

530 5.7.0 Must issue a STARTTLS command first.

bekommen, prüfen Sie, ob dieser User Leserechte auf die beiden Konfigurationsdateien /etc/ssmtp/revaliases und /etc/ssmtp/ssmtp.conf hat und gewähren Sie diese ggfls. mit

1
2
sudo chmod -R 744 /etc/ssmtp/ssmtp.conf
sudo chmod -R 744 /etc/ssmtp/revaliases

Achtung

Diese Methode macht die Zugangsdaten zum E-Mail-Konto für alle User des Systems zugänglich! Hat der Test fehlerfrei funktioniert, gewähren Sie nur bestimmten Usern Leserechte auf die Konfiguration, indem Sie eine neue Gruppe erstellen und die Konfigurationsdatei nur für diese neue Gruppe lesbar machen.

1
2
3
sudo groupadd ssmtp
sudo chown :ssmtp /etc/ssmtp/ssmtp.conf
sudo chmod 640 /etc/ssmtp/ssmtp.conf

Alle Systemuser, die SMTP verwenden dürfen, müssen dieser Gruppe hinzugefügt werden und müssen natürlich auch in /etc/ssmtp/revaliases stehen.

1
sudo adduser -aG ssmtp

 

Anwendungsbeispiele

Log-Dateien zusenden lassen

Script-Beispiel für eine Mail mit SMTP mit einer formatierten Variablen für das Datum im Betreff und dem Inhalt einer LOG-Datei.

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#
# Script BackUp-Log /srv/scripts/sendlog.sh
#
d=$(date +%y-%m-%d_%H:%M:%S)
{
echo TO: <empfänger>@<domain>
echo FROM: <absender>@<domain>
echo Subject: BackUp Results $d
cat /pfad/zur/logdatei.log
} | /usr/sbin/ssmtp -t

<absender>@<domain> ist der Inhaber der Mailkontos beim Provider. Um beim obigen Beispiel zu bleiben wäre das johndoe@gmail.com .
Der Pfad /usr/sbin/ssmtp kann überprüft werden, indem man in der Konsole which ssmtp eingibt. Ohne diesen Pfad kann es Probleme geben, wenn man das Script per Cronjob ausführt.

BTW: Wenn Sie unter Linux ein Problem mit dem Pipe-Zeichen | haben, dann halten Sie die ALT-Taste fest und tippen auf dem Nummernblock 124 um das Zeichen vertical-bar zu bekommen. Bei den deutschen Tastaturen sollte es mit ALT-GR + 7 funktionieren, aber wenn Sie auf Servern mit anderer locale z.B. unter Putty arbeiten, hilft dieser kleine Trick.

Das Script muss ausführbar gemacht werden!

1
chmod +x /srv/scripts/sendlog.sh 

Soll es automatisch jeden Tag um 05:00 Uhr ausgeführt werden, muss dafür noch ein Scheduler angelegt werden. Dazu editieren Sie die Konfiguration des Crontab.

1
sudo crontab -e 

Dort fügen Sie diese Zeile ein:

1
0 5 * * * /srv/scripts/sendlog.sh

Achten Sie darauf, dass Crontab eine leere Zeile am Ende der Datei verlangt!
Wenn Sie sich für mehr Informationen zu Crontab interessieren, finden Sie die Man-Pages mit

1
man 5 crontab

Useranmeldungen mitteilen

Das vorige Script lässt sich auch dazu modifizieren, um Anmeldungen auf einem Server per E-Mail mitzuteilen. Dazu wird PAM (Pluggable Authentication Module) verwendet, das unser externes Script ausführen soll. Zunächst erstellen wir wieder das Script in /srv/scripts/ als ausführbare Datei.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
#
# Script BackUp-Log /srv/scripts/sendlogin.sh
#
d=$(date +%y-%m-%d_%H:%M:%S)
if [ "$PAM_TYPE" != "open_session" ]
then exit 0
else
{
echo TO: <empfänger>@<domain>
echo FROM: <absender>@<domain>
echo Subject: Login detected $d
echo "Anmeldung von $PAM_USER von IP $PAM_RHOST auf Server $HOSTNAME mit $PAM_SERVICE ($d)"
} | /usr/sbin/ssmtp -t
fi
exit 0

Damit PAM dieses Script ausführt, muss in die Datei /etc/pam.d/sshd folgende Zeile eingefügt werden:

1
session optional pam_exec.so /srv/scripts/sendlogin.sh

…to be continued

Buy Me a Coffee at ko-fi.com

1 Comment

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Nobody is perfect
Einen Fehler gefunden?
Verbesserungsvorschläge, Lob oder Kritik?

Schreiben Sie mir mit dem -> Kontaktformular
oder per -> E-Mail.
DANKE!