Proxmox VE: E-Mail-Versand einrichten (mail relay / smart host)
Proxmox Virtual Environment (PVE)-Server sind als Hosts für virtuelle Maschinen und Container prinzipbedingt wichtige Systeme. Dennoch finden sich oft Installationen, die nicht in der Lage sind, E-Mails zu versenden und sich so bezüglich Updates, Backup-Meldungen oder Ähnlichem zu melden. Wir erklären auf dieser Seite kurz, wie man PVE konfiguriert, E-Mail-Benachrichtigungen über einen externen E-Mail-Server (Relay / Smart Host) zu versenden.
Postfix
Postfix ist ein Mail Transfer Agent (MTA) und sollte bereits auf dem System installiert sein. Falls nicht, kann dies einfach nachgeholt werden:
apt-get install postfix
systemctl enable postfix
Basiskonfiguration
Ăśber eine passende Konfiguration sorgt Postfix dafĂĽr, dass die Mails vom lokalen System angenommen und per SMTP an ein externes Mailsystem weitergeleitet werden.
Die wichtigste Konfigurationsdatei ist /etc/postfix/main.cf
. Zunächst sollte man in dieser sicherstellen, dass das Relay nur via localhost
von Proxmox oder anderen Systemdiensten und nicht von Dritten ĂĽber das Netzwerk genutzt werden kann:
myhostname = pve.example.com
mydomain = example.com
mydestination = $myhostname, localhost.$mydomain, localhost
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
pve.example.com
ist durch den FQDN1 des Systems und example.com
durch die E-Mail-Absender-Domain zu ersetzen. Per Default sollten mydestination
, mynetworks
und inet_interfaces
bereits die richtigen Werte haben.
Relay / Smart Host
Für die Authentifizierung am externen Mailserver, der für den eigentlichen Versand benutzt werden soll, wird noch ein weiteres Paket benötigt:
apt-get install libsasl2-modules
Die Relay-Einstellungen werden ebenfalls in der /etc/postfix/main.cf
festgelegt. Die Einstellung relayhost =
existiert per Default bereits in der Datei (ohne Wert) und kann angepasst werden. Alle anderen Optionen, die noch nicht in der Konfiguration existierten, wurden einfach am Ende der Datei hinzugefĂĽgt:
relayhost = [your-mailserver-on-the-internet.example.com]:587
# [...]
# enable SASL authentication?
smtp_sasl_auth_enable = yes
# disallow methods that allow anonymous authentication.
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
# where to find sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
# TLS transport encryption; may = STARTTLS; encrypt = Enforce TLS
smtp_tls_security_level = may
# where to find CA certificates (smtp_tls_CApath should have same value if existing)
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
# maximum amount of memory in bytes for storing a message header (default: 102400)
header_size_limit = 4096000
[your-mailserver-on-the-internet.example.com]:587
ist durch den eigenen Mailserver mit passendem Port zu ersetzen (im Normalfall 587
oder 25
). Wenn dieser Server einen Benutzernamen und Passwort erfordert (→ smtp_sasl_auth_enable = yes
) sind die Zugangsdaten in der Datei /etc/postfix/sasl_passwd
in folgender Form zu speichern:
your-mailserver-on-the-internet.example.com username:password
Nach jeder Änderung an der /etc/postfix/sasl_passwd
muss das zugehörige Postfix Mapping aktualisiert werden:
postmap /etc/postfix/sasl_passwd
systemctl restart postfix.service
Die Datei sollte nur fĂĽr root
lesbar sein, da Sie Zugangsdaten enthält:
chown "root:root" "/etc/postfix/sasl_passwd"
chmod 0600 "/etc/postfix/sasl_passwd"
Korrekte Absender-Adresse erzwingen
Ăśber eine einfache Konfiguration kann dafĂĽr gesorgt werden, dass die Absender-Angabe von E-Mails an das Relay auf do-not-reply@example.com
gesetzt werden (@example.com
ist im Folgenden zwingend auf die valide Absenderdomain bzw. den Wert von mydomain =
anzupassen).
In der /etc/postfix/main.cf
:
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
smtp_header_checks = regexp:/etc/postfix/header_check
Inhalt der Datei /etc/postfix/sender_canonical
:
/.+/ do-not-reply@example.com
Nach jeder Änderung an der /etc/postfix/sender_canonical
muss das zugehörige Postfix Mapping aktualisiert werden:
postmap /etc/postfix/sender_canonical
Inhalt der Datei /etc/postfix/header_check
:
/From:.*/ REPLACE From: pve.example.com (Proxmox, PVE) <do-not-reply@example.com>
Auch diese Dateien sollten nur fĂĽr root
lesbar sein:
chown "root:root" "/etc/postfix/sender_canonical"
chmod 0600 "/etc/postfix/sender_canonical"
chown "root:root" "/etc/postfix/header_check"
chmod 0600 "/etc/postfix/header_check"
root
-Alias
Mails an den root
-User des System können nun ebenfalls einfach an eine Admin-E-Mail-Adresse weitergeleitet werden. Dazu ist in der Datei /etc/aliases
eine Zeile hinzuzufĂĽgen (admin@example.net
ist auf auf eine geeignete Zieladresse anzupassen):
[...]
root: admin@example.net
Nach jeder Änderung an der /etc/aliases
muss die Postfix-Alias-Datenbank aktualisiert werden:
postalias /etc/aliases
In der /etc/postfix/main.cf
ist das passende Setting per Default bereits vorhanden, man kann dies aber nochmals kontrollieren:
alias_maps = hash:/etc/aliases
Absende- und Benutzeradressen in PVE
Wenn man die Postfix-Konfiguration wie oben beschrieben vorgenommen hat, wird die Absende-Adresse in jedem Fall durch die Einstellungen in /etc/postfix/sender_canonical
und /etc/postfix/header_check
angepasst bzw. ĂĽberschrieben. Dennoch kann man der Form halber die Absenderadresse in der Web-UI unter “Datacenter → Options → Email from address” noch auf den korrekten Wert setzen.
Zudem können unter “Datacenter → Permissions → Users” noch die E-Mail-Adressen der PVE-Benutzerkonten festgelegt werden.
Test und Debugging
systemctl restart postfix.service
systemctl status postfix.service
# send test mail to admin@example.com
echo "This is the message" | mail -s "Hello World from $(hostname)" "admin@example.com"
# log
journalctl -f -u postfix*
Diesen kann man sich einfach ĂĽber
hostname -f
ausgeben lassen. ↩︎