Proxmox VE: E-Mail-Versand einrichten (mail relay / smart host)

·4 min·foundata-Team·

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*

  1. Diesen kann man sich einfach ĂĽber hostname -f ausgeben lassen. ↩︎