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 |
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
1 Comment