Mail-Server Postfix
Willemers Informatik-Ecke

Installation

Postfix ist ein Mail Transfer Agent (MTA), also ein Server, der Mails versendet und dazu einen Zugang per SMTP anbietet.

Postfix steht auf allen gängigen UNIX- und Linux-Plattformen als Open Source zur Verfügung. Jede Distribution erlaubt die Nachinstallation aus ihrem Repositiory. Unter Debian, Ubuntu und Linux Mint lautet der Befehl zur Installation so:

apt-get install postfix
Nach dem Herunterladen der Pakete aus dem Repository werden Sie aufgefordert, die Konfiguration von Postfix im Dialog zu betreiben. Wenn Sie genau wissen, was Ihr Postfix tun soll, kann Ihnen dieser Assistent etwas Arbeit abnehmen. Nach der Installation können Sie diese Art der Konfiguration mit dem Befehl dpkg-reconfigure jederzeit noch einmal ausführlich nachholen.
dpkg-reconfigure postfix

Konfiguration per Datei /etc/postfix/main.cf

Die Konfiguration kann allerdings genauso gut über die Konfigurationsdateien erfolgen. Die zentrale Datei ist /etc/postfix/main.cf. Wenn Sie diese Datei ändern, müssen Sie zur Übernahme der Konfigurationsänderungen den Befehl postfix reload aufrufen.

Im Verzeichnis /usr/share/postfix finden Sie ein paar Beispiele für die Konfigurationsdateien. Insbesondere die Datei main.cf.dist ist hier sehr hilfreich, da sie die Konfigurationsparameter mit recht ausführlichen Kommentaren enthält.

In der Konfigurationsdatei werden Parameter als Zuweisungen gesetzt. Zunächst erscheint der Name des Parameters, dann ein Gleichheitszeichen und schließlich der Inhalt. Der Inhalt kann in der nächsten Zeile fortgesetzt werden, wenn diese mindestens mit einem Leerzeichen beginnt. Daraus folgt natürlich auch, dass ein neuer Parametername immer ganz links beginnen muss.

Konfiguration

Lokale Mail

Die Variable mydestination nimmt die Domäne auf, für die die Mail lokal verteilt wird. Hier sollte in meinem Fall also nicht willemer.de stehen, da mein Bruder beispielsweise auch eine Adresse dieser Domäne hat und in diesem Fall eine Mail an ihn mein privates Hausnetz nie verlassen würde. Aus diesem Grund habe ich für das lokale Netzwerk die Domäne willemer.edu erfunden, in der Annahme, dass wohl niemand eine amerikanische Bildungsstätte nach mir benennen wird. Es wird in der Dokumentation von Postfix vorgeschlagen, für mydestination folgenden Eintrag zu wählen:
mydestination = $mydomain $myhostname localhost.$mydomain
Auf einem Mailserver für eine Domäne gibt es auch keinen Grund, diesen Eintrag zu ändern. Wenn ein anderer Rechner in meinem Netzwerk auch E-Mails versenden will, muss er seine Mails an gaston weiterleiten, weil dieser den Austausch mit dem Internet durchführt. Ein solcher Rechner würde also gar keine Mails lokal abwickeln, sondern alle Mails an den zentralen Rechner schicken. Dieser Rechner hätte also folgende Einstellung:
mydestination =
relayhost = gaston
Alle Mails würden dadurch an den Rechner gaston weitergeleitet, der seinerseits prüft, ob es sich um lokale Mails handelt oder ob sie ins Internet weitergeleitet werden müssen.

Wählverbindung mit dem Internet

relayhost

Ist der Rechner über eine Wählleitung mit dem Provider verbunden, soll Postfix die Post bei geschlossener Verbindung speichern und bei offener Verbindung an den Rechner weitergeben, den der Provider zur Verfügung gestellt hat. Den Namen dieses Rechners erfahren Sie bei Ihrem Provider. Bei T-Online heißt er beispielsweise mailto.t-online.de und bei 1&1 smtp.1und1.de. Ein solcher Rechner wird als Relay bezeichnet und in der Konfigurationsdatei main.cf unter dem Namen relayhost festgelegt.
relayhost = smtp.1und1.de

defer_transports

Damit die Mail nicht sofort verteilt wird, sondern erst bei einer Verbindung mit dem Internet, wird der Parameter defer_transports auf smtp gesetzt:
defer_transports = smtp
Da der Server direkt angegeben wird, braucht nicht per DNS der Mailserver der Domäne über den MX-Eintrag gesucht werden. Also schalten Sie das Suchen über DNS ab:
disable_dns_lookups = yes
Damit die Mail den Rechner in Richtung Internetprovider verlässt, muss das Kommando sendmail -q abgesetzt werden.

Mailverteilung

Lokale Mbox-Struktur

Nach der Grundkonfiguration verteilt der Postfix-Dämon die lokale Post. Dabei werden die Nachrichten im Mbox-Standard im Verzeichnis /var/mail abgelegt. Für jeden Benutzer gibt es dort eine Datei, die all seine Post aufnimmt. Sie können dies ausprobieren, indem Sie mit dem Befehl mail Post versenden.

Umstieg auf Maildir

In der Konfigurationsdatei main.cf im Verzeichnis /etc/postfix wird die Variable home_mailbox auf den Wert Maildir gesetzt. Anschließend muss Postfix die Datei neu einlesen. Der Befehl postfix reload erreicht dies. Die Konfiguration kann auch durch den Befehl postconf geändert werden.
postconf -e "home_mailbox=Maildir/"
postfix reload
Anschließend können Sie einen POP3- oder einen IMAP-Server installieren, der dann direkt auf die Maildir-Struktur aufsetzt.

SMTP vom lokalen Netzwerk

der Zugriff von einem anderen Rechner des gleichen Netzwerks funktioniert ohne vorherige Konfiguration. Sie können dies ausprobieren, indem Sie den Befehl telnet aufrufen, als ersten Parameter den Mailserver und als zweiten Parameter die Portnummer 25 für SMTP angeben. Sie können so alle Befehle des SMTP-Protokolls über telnet eingeben.
telnet server 25
Trying 192.168.109.199...
Connected to debian.willemer.edu.
Escape character is '^]'.
220 debian.willemer.edu ESMTP Postfix (Debian/GNU)
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
Die Verbindung wird aufgebaut, und Postfix meldet sich artig. Die Eingabe des Wortes QUIT löst die Verbindung, Postfix verabschiedet sich mit dem Wort Bye.

Bediente Interfaces

Sie wollen nicht, dass Postfix alle Schnittstellen bedient? Dann sollten Sie in der Datei main.cf den Wert der Variablen inet_interfaces vom Wert all auf die IP-Adressen der Schnittstellen beschränken, die in Zukunft bedient werden sollen. Bei mehreren Adressen trennen Sie diese durch ein Leerzeichen. Die folgende Definition erlaubt den localhost und das lokale Netzwerk:
# inet_interfaces = all
inet_interfaces = 127.0.0.1 192.168.109.199

Lookup-Tabellen

In der Datei main.cf ist unter dem Stichwort maps eine Reihe von Lookup-Tabellen angegeben. Diese liegen als ASCII-Textdateien vor, müssen aber, bevor Postfix sie lesen kann, mit dem Programm postmap in je eine Datenbankdatei gewandelt werden. Ein typisches Beispiel dafür ist die Datei canonical. Sie enthält eine Tabelle, die Benutzernamen des Systems in die Namen umsetzt, die vor dem @-Zeichen stehen. Beispielsweise könnte der Benuter till ein E-Mail-Adresse till.eulenspiegel@debian.willemer.edu verwenden wollen.
# /etc/postfix/canonical
till till.eulenspiegel@debian.willemer.edu
Wenn Sie darin Änderungen vornehmen, müssen Sie die Datei mit dem Befehl postmap in eine db-Datei wandeln.
cd /etc/postfix
postmap canonical
Es entsteht eine Datei namens canonical.db. Der passende Eintrag in der Datei main.cf lautet:
# /etc/postfix/main.cf
canonical_maps = hash:/etc/postfix/canonical
Die Datei canonical bewirkt das input address rewriting. Das Gegenstück des output address rewriting wird in der Datei generic festgelegt. Für beide Dateien gibt es eine eigene Manpage.

Warteschlangen

Postfix arbeitet mit mehreren Warteschlangen, die sich unterhalb des Verzeichnisses /var/spool/postfix befinden. Die wichtigsten dieser Warteschlangen sind: Welche Nachrichten sich in welcher Warteschlange befinden, erfahren Sie über den Befehl postqueue -p. Sollen alle Mails, die beispielsweise durch eine temporäre Störung verzögert werden, wieder weitergeleitet werden, verwenden Sie den Befehl postsuper -r ALL.

Virtuelle Domänen

Postfix bietet die Möglichkeiten, virtuelle Domains zu verwalten. In der Datei main.cf verweisen einige Parameter auf die weiterführenden Konfigurationsdateien. Die folgenden Zeilen zeigen Beispiele für eine Konfiguration, die auf eine PostgreSQL-Datenbank zugreift. Statt pgsql können Sie mysql einsetzen, wenn Sie lieber eine MySQL-Datenbank verwenden wollen.
# /etc/postfix/main.cf
virtual_alias_maps = pgsql:/etc/postfix/virtual_alias
virtual_mailbox_domains = pgsql:/etc/postfix/virtual_domains
virtual_mailbox_maps = pgsql:/etc/postfix/virtual_mailboxes
virtual_mailbox_base = /var/mail/vmail

DB-Konfiguration

Die Konfigurationsdatei enthält den Benutzer, Passwort, Datenbanknamen und vor allem den SELECT-Befehl, mit dem die gewünschten Daten aus der Datenbank geholt werden. Hier als Beispiel ein Zugriff auf die Domaintabelle:
# /etc/postfix/virtual_domains
user = maildbuser
password = ganzgeheim
dbname = mail
query = SELECT domain FROM domains WHERE domain='%s'
hosts = 127.0.0.1
Natürlich muss in der Datenbank eine entsprechende Struktur angelegt worden sein.