Der Mailserver Postfix [1] enstand in den späten neunziger Jahren als "IBM secure mailer" mit dem Ziel, eine sichere und schnelle Alternative zum damals weitverbreiteten MTA (Mail Transfer Agent vulgo Mailserver) Sendmail zu bieten. Damals kämpfte der Autor dieses Artikels an seinem Uni-Institut mit einem bizarren Sendmail-Fehler, der den Mailverkehr regelmäßig zum Erliegen brachte. Der Wechsel zu Postfix nach einem kurzen Intermezzo mit Qmail war kurz und schmerzlos. Seitdem gibt es dort keine Probleme mehr mit der Mailzustellung.
Mittlerweile ist Postfix zum Standard-MTA für Ubuntu, Suse und Mac OS X geworden. In allen anderen Distributionen existieren ebenfalls aktuelle Pakete, die sich über die Paketverwaltung schmerzlos nachinstallieren lassen. Dieser Workshop erklärt, wie Sie Postfix für die wichtigsten Situationen einrichten.
Postfix kennt vier Adressklassen, dabei fällt jede Domain (also alles hinter dem @-Zeichen) in genau eine dieser vier Klassen:
local
«
-Daemon lokal zu.virtual
«
- Daemon an virtuelle Benutzer (also Benutzer, die nicht in »/etc/passwd
«
stehen) ausgeliefertSteht eine Domain in mehr als nur einer der vier Klassen, beschwert sich Postfix in der Log-Datei:
warning: do not list domain meinedomain.tld↩ in BOTH mydestination and virtual_alias_domains
Als Postfix-Admin müssen Sie sich also im Klaren sein, in welche der vier Adressklassen eine Domain gehören soll. Üblicherweise nutzt man bei einem einfachen Mailserver lediglich Local Domains und Virtual Alias Domains: Bei den Local Domains handelt es sich um die Hauptdomain(s), für die der Server zuständig sein soll und die Postfix dann lokal zustellt. Sie stehen hinter dem Konfigurationsparameter »mydestination
«
der Konfigurationsdatei »/etc/postfix/main.conf
«
:
mydestination = meinedomain.tld
Führen Sie nach jeder Konfigurationsänderung ein »postfix reload
«
aus, damit die Änderungen wirksam werden. Ob Postfix die Einstellungen übernommen hat, zeigt die Ausgabe von »postconf -n
«
. Dieser Befehl listet alle explizit gesetzten Parameter auf, sodass Änderungen leicht erkennbar sind. Tragen Sie hier mehr als eine Domain ein:
mydestination = meinedomain.tld,↩ meineanderedomain.tld
so gilt, das Postfix die Emailadressen »user@meinedomain.tld
«
und »user@meineanderedomain.tld
«
in dasselbe lokale Postfach »user
«
zustellt. Der Eintrag einer Domain als Virtual Alias Domain erfolgt über den Konfigurationsparameter »virtual_alias_domains
«
in »main.cf
«
:
virtual_alias_domains = meineganzandere↩ domain.tld
Somit weiß Postfix, dass er für »meineganzanderedomain.tld
«
Mails annehmen soll. Welche Emailadressen dann allerdings gültig sind, und auf welche individuellen Zieladressen der Server sie umschreibt, ergibt sich aus dem Parameter »virtual_alias_maps
«
:
virtual_alias_maps = hash:/etc/↩ postfix/virtual_alias_maps
Dabei handelt es sich um ein Mapping (für einen gegebenen Schlüssel wird ein Wert gesucht), bei dem Postfix einen virtueller User (Empfänger, hier der Schlüssel) in einen lokalen Systemuser umschreibt (der Wert), siehe auch [2]. Das »hash:
«
gibt dabei an, dass es sich um eine Map im Berkeley-DB-Hash-Format handelt. Die Textdatei müssen Sie mit dem »postmap
«
-Kommando:
postmap hash:/etc/postfix/virtual_↩ alias_maps
in eine durch Postfix nutzbare Form umwandeln. Die Datei »/etc/postfix/virtual_alias_maps
«
enthält zwei Spalten, die linke ist der Schlüssel, die rechte der Wert:
user1@meineganzanderedomain.tld ↩ postfach1@meinedomain.tld user2@meineganzanderedomain.tld ↩ postfach2@meinedomain.tld
Einer E-Mailadresse in der ersten Spalte (»user1@meineganzanderedomain.tld
«
) ist eine (oder auch mehrere) E-Mailadresse aus der dazugehörigen zweiten Spalte (»postfach1@meinedomain.tld
«
) zugeordnet. Somit schreibt Postfix die Empfängeradresse von »user1@meineganzanderedomain.tld
«
zu »postfach1@meinedomain.tld
«
um. Die »virtual_alias_maps
«
wendet der Server (wie andere Maps) solange rekursiv an, bis sich keine Adresse mehr ändert. Dann bestimmt er, was mit »postfach1@meinedomain.tld
«
zu geschehen hat. In diesem Falle ist ja »meinedomain.tld
«
in »mydestination
«
aufgelistet, sodass Postfix entsprechende Mails durch »local
«
lokal ausliefert.
Sobald Postfixs »local
«
-Prozess die Mail zur Zustellung erhält, kann es die Mail in Mailboxen schreiben (es beherrscht nativ die Formate »mbox
«
oder »Maildir
«
). Ebenso erlaubt es die Auslieferung an externe Programme. Vor der Zustellung konsultiert »local
«
die »alias_maps
«
, um gegebenenfalls lokale Useraccounts auf andere Accounts, E-Mailadressen oder Programme zuzuordnen.
Standardmäßig erfolgt aber die Auslieferung in die Mailbox des Benutzers im Mbox-Format unter »$mail_spool_directory/$USER
«
– genau da wo zum Beispiel UW-IMAP die Mailbox erwartet. Wünscht man eine Zustellung im Maildir-Format in »$HOME/Maildir
«
, um beispielsweise die Mailbox dann mittels Courier-IMAP-Usern bereitstellen zu können, bietet sich die folgende Konfigurationsoption an:
home_mailbox = Maildir/
Die Benutzung von »alias_maps
«
bewirkt die folgenden Option:
alias_maps = hash:/etc/aliases
Danach prüfen Sie mit »postconf -n
«
, ob die Einstellung korrekt übernommen wurde:
$ postconf -n alias_maps alias_maps = hash:/etc/aliases
Die Datei »/etc/aliases
«
hat das Format »Name: Wert1,Wert2, ...
«
Der Schlüsel »name
«
ist dabei die Adresse ohne den Domain-Teil. Die Parameter Wert1, Wert2, … können Emailaddressen, Dateien (zum Beispiel »/tmp/file
«
) oder Pipes (wie »|/usr/bin/vacation
«
) sein. Ein Eintrag in »/etc/aliases
«
von der Form: »root: ralf
«
beispielsweise bewirkt, dass Mail an »root
«
an den User »ralf
«
zugestellt wird. Nach Änderungen in der Textdatei müssen sie sie mit »postalias hash:/etc/aliases
«
in eine durch Postfix nutzbare Form wandeln.
Neben der Verwendung von »alias_maps
«
ist es den Usern auch möglich, ».forward
«
-Dateien in ihrem Home-Verzeichnis zu nutzen. Die Syntax entspricht der rechten Seite von »$alias_maps
«
(also nur »Wert1,Wert2, ...
«
). Ein typisches Beispiel ist die Einbindung von »vacation
«
, das den Sender über die Abwesenheit des Empfänger benachrichtigen soll. Die Datei ».forward
«
beinhaltet einem solchen Fall:
|/usr/bin/vacation -a user1@meineganz↩ anderedomain.tld -m message.txt postfach1
Bei »postfach1
«
handelt es sich um den User, an den Postfix die Mail von »user1@meineganzanderedomain.tld
«
zustellt. Das Programm »vacation
«
wird durch die Option »-a
«
instruiert, auf Mails an die Adresse »user1@meineganzanderedomain.tld
«
mit der Mail in »message.txt
«
zu antworten.