Inhalt

Mailversand Mit MSMTP

Vorwort

Wer mehrere Server betreut, wird anfangen Abläufe zu automatisieren. Da erfahrungsgemäß nie alles so klappt, wie man es sich wünscht wäre ein Benachrichtigung im Fehlerfall oder nach Abschluss eines Scriptes doch ideal, oder? Dazu gibt es etliche Tools, ich bevorzuge nach wie vor E-Mails die an die Administration versendet werden.

Hierfür habe ich mich für MSMTP entschieden, die Einrichtung ist relativ simpel, es wird aktiv weiterentwickelt und funktioniert zudem (bei mir) ohne Crashes - und das seit Jahren.

Installation

MSMTP ist bereits in den Standard Paketquellen von Ubuntu Server enthalten - in meinem Falle geschieht die Installation auf einem Ubuntu 20.04 LTS Server. Die Installation erfolgt wie gewohnt über:

1
apt-get install msmtp msmtp-mta mailutils

Konfiguration

Bevor die Konfiguration gestartet wird, ist wichtig zu wissen, dass es Unterschiede gibt, welcher User Mails versenden kann. Es gibt eine Konfiguration für den root-User, sowie eine spezifische Konfiguration für alle non-root-User, die im Homeverzeichnis abgelegt wird. Die Datei für den root-User liegt unter /etc/msmtprc - für alle weiteren User ist die Konfigurationsdatei unter ~/.msmtprc zu finden.

1
nano /etc/msmtprc
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# Set a list of trusted CAs for TLS. The default is to use system settings, but
# you can select your own file.
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# Mail account
account <node>@domain.tld

# Host name of the SMTP server
host mail.domain.tld

# Envelope-from address
from <node>@domain.tld

# Authentication.
auth on

# Use your own user name for the mail account
user <node>@domain.tld

password MyVeryStr0ngPa$$w0rd

# Set a default account
account default: <node>@domain.tld

# Map local users to mail addresses (for crontab)
aliases /etc/aliases

Die originale Konfigurationsdatei habe ich eingekürzt, sodass ein normaler Einsatz weiterhin möglich ist und keine unnötigen Kommentare mehr enthalten sind. Abzuändern ist im obigen Beispiel nur die Absendeaddresse, sowie der eigene SMTP Host.

Anschließend werden noch die Rechte zum auslesen der Datei geändert, da hier Zugangsdaten in Plaintext enthalten sind: Mit chmod 600 /etc/msmtprc wird die root-Konfiguration angepasst, mit chmod 600 ~/.msmtprc könnten potentielle non-root Konfigurationen angepasst werden.

Zu guter letzt muss der Alias für den root User angepasst werden, an diese Adresse werden alle versendeten E-Mails aus fehlgeschlagenen Scripten oder Cronjobs versendet:

1
2
3
nano /etc/aliases
root: admin@mydomain.tld 
default: admin@mydomain.tld

Im letzten Konfigurationsschritt vor dem Testen, definieren wir noch das ab nun zu nutzende Mailprogramm für unseren Server: Hierfür wird die Datei nano /etc/mail.rc geöffnet und mit folgendem Inhalt versehen:

1
set sendmail="/usr/bin/msmtp -t"

Funktionstest

Jetzt kann noch getestet werden, ob die aktuelle Konfiguration korrekt ist, dazu versenden wir eine Mail aus der CLI:

1
echo "Test der Maileinstellungen" | mail -s "Test von <Node>" admin@domain.tld

Innerhalb von ca. 15min ist MSMTP fertig eingerichtet und kann entsprechend Mails versenden, sollte es beim Aktualisieren der Paketquellen (unattended upgrades) Fehler geben, oder bspw. das Backupscript auf Fehler treffen.