Postfix: Smarthost-Einstellungen für lokale Benutzer
Jeder, der einen eigenen Heimserver an einem Internet-Anschluss mit dynamischer IP-Adresse betreibt, musste wahrscheinlich bereits schmerzlich feststellen, dass viele Mailserver so konfiguriert sind, dass sie E-Mails von dynamischen Adressen ablehnen. Außerdem verbieten es viele der großen Provider, ihre Systeme ohne Authentifizierung als Mail-Relays zu verwenden. Der Mailserver Postfix kann dies umgehen, indem er angewiesen wird, einen anderen Mailserver als “Smarthost” zu verwenden. Postfix sendet dann über den Smarthost, an dem er sich vorher per Benutzername und Passwort angemeldet hat. Die lokale E-Mailadresse wird vorher in eine zum Smarthost passende “öffentliche” E-Mailadresse umgewandelt. Auf Mehrbenutzersystemen haben die verschiedenen Benutzer aber in der Regel verschiedene öffentliche E-Mailadressen bei unterschiedlichen Smarthost-Anbietern. Die Verwendung eines einzelnen Smarthosts ist in diesem Fall also nicht anwendbar. Postfix kann jedoch in Abhängigkeit des lokalen Benutzers unterschiedliche Mailserver als Smarthost ansprechen. Zur Konfiguration sind aber leider Administratorrechte notwendig. Mit dem hier vorgestellten einfachen Skript kann jeder Benutzer seine Smarthost-Einstellungen in seinem Heimatverzeichnis selber vornehmen, ohne dass ein Administrator von Hand eingreifen muss.
Hinweis
Die hier vorgestellte (Behelfs-) Lösung erfordert es, dass Ihre lokalen Benutzer E-Mailadresse sowie Benutzername und Passwort für das eigene E-Mail-Konto hinterlegen. Somit muss klar sein, dass diese Umsetzung nur in vertrauenswürdigen Umgebungen (Familien- oder Heimserver sowie in kleineren Büros) ernsthaft in Frage kommt.
Postfix mit senderabhängigem Smarthost
Die Grundlegende Konfiguration von Postfix mit Smarthost ist ausführlich im Wiki auf ubuntuusers.de beschrieben. Da diese Beschreibung sehr einfach und ausführlich gehalten ist, werde ich hierauf nicht weiter eingehen. Diese Anleitung gilt für Postfix unter allen Linux-Distributionen. Größere Probleme sollte die Einrichtung eines Smarthosts nicht bereiten, bei einzelnen Anbietern kann es aber nötig sein, die Parameter von “smtp_sasl_security_options” anzupassen (GMX erlaubt z.B. kein “noanonymous”). Diese Ausgangskonfiguration können Sie nun erweitern, indem Sie der Anleitung zur erweiterten Konfiguration im ubuntuusers-Wiki folgen.
Damit haben Sie Postfix so konfiguriert, dass für jeden lokalen Benutzer ein eigener Smarthost mit eigener öffentlicher E-Mailadresse und individuellen Logindaten verwendet werden. Von Ihrem Heimserver können nun also E-Mails nach außen gesendet werden. Wenn nun aber einer Ihrer Benutzer seine E-Mailadresse gewechselt hat, oder wenn Sie einen neuen Benutzer einrichten willen, müssen sie als root die Postfix-Konfigurationsdateien anpassen. Ihre Benutzer müssen also warten, bis Sie mal wieder Zeit haben, sich darum zu kümmern.
Konfiguration für lokale Benutzer vereinfachen
Einfacher wäre es, wenn Sie es Ihren Benutzern erlauben würden, die eigenen Einstellungen in einer Datei im Heimatverzeichnis vornehmen zu können. Diese Dateien könnten Sie von einem Skript einsammeln lassen, welches bei Veränderungen die Postfix-Konfiguration neu erstellt. Das Vorgehen ist im Ansatz ähnlich zum Mail-Forwarding: Dieses kann jeder lokale Benutzer einstellen, indem er die E-Mailadresse, an die an ihn gerichtete E-Mails weitergeleitet werden sollen, in der Datei .forward in seinem Heimatverzeichnis einträgt. Seine Smarthost-Informationen soll er nun auch in einer Datei im Heimatverzeichnis angeben können. Diese Datei soll den Namen .relay tragen und folgenden Inhalt haben:
email: adresse@email.tld server: smtp.email.tld login: benutzername:passwort
Im Grunde ist der Inhalt selbsterklärend: Die öffentliche E-Mailadresse wird in die mit email: beginnende Zeile eingetragen, in einer weiteren Zeile, beginnend mit server:, wird der Smarthost angegeben und in einer mit login: beginnenden Zeile folgen Benutzername und Passwort, durch Doppelpunkt getrennt. Die Reihenfolge der Zeilen ist unbedeutend.
Postfix verwendet drei Konfigurationsdateien für die Smarthost-Authentifikation. Ich gehe (etwas abweichend von der Anleitung bei ubuntuusers) davon aus, dass die Relayhost-Maps in /etc/postfix/sender_canonical eingetragen werden, die Canonical-Maps in /etc/postfix/sender_dependent und die Passwörter in /etc/postfix/sender_password.
Neben den benutzerspezifischen Einstellungen aus den .relay-Dateien können Sie eventuell benötigte Smarthost-Angaben für Systembenutzer in den Dateien /etc/postfix/sender_canonical.system, /etc/postfix/sender_dependent.system und /etc/postfix/sender_password.system vornehmen. Diese Dateien haben das Format, wie es in ubuntuusers-Wiki beschrieben ist, nicht das der .relay-Dateien der Benutzer.
Das Skript funktioniert nun nach folgendem Schema: Zuerst werden die Dateien für die Systembenutzer (Endung .system) eingelesen. Anschließend werden die individuellen Einstellungen der lokalen Benutzer aus den .relay-Dateien geholt und der neuen Konfiguration hinzugefügt. Haben sich diese Dateien im Vergleich zu den derzeit von Postfix verwendeten Einstellungen verändert, werden die veränderten Konfigurationsdateien überschrieben und Postfix neu geladen:
Wenn Sie dieses Skript regelmäßig mit einem Cronjob aufrufen, müssen Sie sich um die Smarthost-Einstellungen ihrer Benutzer nicht mehr von Hand kümmern. Beachten Sie nur, dass Sie eigene Smarthost-Einstellungen in den Dateien mit der Endung .system vornehmen.
Das Shellskript
Das Skript sieht folgendermaßen aus:
#!/bin/sh
# alte Relay-Listen
__sender_canonical="/etc/postfix/sender_canonical"
__sender_dependent="/etc/postfix/sender_dependent"
__sender_password="/etc/postfix/sender_password"
# neue Relay-Listen
__sender_canonical_tmp=$__sender_canonical".tmp"
__sender_dependent_tmp=$__sender_dependent".tmp"
__sender_password_tmp=$__sender_password".tmp"
# systemweite Relay-Listen
__sender_canonical_system=$__sender_canonical".system"
__sender_dependent_system=$__sender_dependent".system"
__sender_password_system=$__sender_password".system"
# Systemlisten einlesen
cat $__sender_canonical_system > $__sender_canonical_tmp
cat $__sender_dependent_system > $__sender_dependent_tmp
cat $__sender_password_system > $__sender_password_tmp
# Benutzerlisten einlesen
for __userdir in /home/* ; do
if [ -d $__userdir ] ; then
__username=`echo $__userdir | sed -ne 's/\/home\/\(.\+\)/\1/p'`
__relayfile=$__userdir/.relay
if [ -e $__relayfile ] ; then
__user_email=`sed -ne 's/^email: *\(.*\)/\1/p' $__relayfile`
__user_server=`sed -ne 's/^server: *\(.*\)/\1/p' $__relayfile`
__user_login=`sed -ne 's/^login: *\(.*\)/\1/p' $__relayfile`
echo $__username" "$__user_email >> $__sender_canonical_tmp
echo $__user_email" "$__user_server >> $__sender_dependent_tmp
echo $__user_email" "$__user_login >> $__sender_password_tmp
fi;
fi;
done
# Listen vergleichen
__reload=false;
if ! diff -q $__sender_canonical_tmp $__sender_canonical > /dev/null ; then
mv $__sender_canonical_tmp $__sender_canonical
/usr/sbin/postmap $__sender_canonical
__reload=true
else
rm $__sender_canonical_tmp
fi
if ! diff -q $__sender_dependent_tmp $__sender_dependent > /dev/null ; then
mv $__sender_dependent_new $__sender_dependent
/usr/sbin/postmap $__sender_dependent
__reload=true
else
rm $__sender_dependent_tmp
fi
if ! diff -q $__sender_password_tmp $__sender_password > /dev/null ; then
mv $__sender_password_new $__sender_password
/usr/sbin/postmap $__sender_password
__reload=true
else
rm $__sender_password_tmp
fi
# Wenn verändert, Postfix-Konfiguration neu laden
if $__reload; then
/etc/init.d/postfix reload
fi


Noch kein Kommentar zu "Postfix: Smarthost-Einstellungen für lokale Benutzer"
Ich möchte einen Kommentar hinzufügen...