Einrichten eines Mailservers mit Postfix

aus Tuxfutter, der freien Wissensdatenbank

Inhaltsverzeichnis

Warnung

Bevor es an die eigentliche Anleitung geht, zunächst eine wichtige Warnung:

Auch wenn die Konfiguration relativ simpel erscheint, so kann bei nicht sachgerechter Ausführung der Einsatz eines eigenen Mailservers sehr schnell ein Schuss ins eigene Knie werden:

Nicht vernünftig eingerichtete Mailserver offenbaren sich meistens als sog. offenes Relay. Das bedeutet, dass jeder den Mailserver zum Versand von E-Mail verwenden kann. SPAMmer nutzen normalerweise offene Relays zum Versand ihres Werbemülls. Da offene Relays relativ schnell aufgespürt und auch beim Provider gemeldet werden, kann der Internetzugang dadurch gesperrt werden. Der Administrator des Servers wird dann Probleme haben, dem Provider sein Fehlverhalten zu erklären.

Verschiedene Webseiten bieten Tests auf offene Relays an.


Standardkonfiguration

Nach der Installation von Postfix (z.B. mit apt-get, YaST, rpm oder portage) geht es an die Konfiguration des Servers.

Zentrale Konfigurationsdatei ist /etc/postfix/main.cf. In dieser Datei steht alles Wesentliche, was postfix wissen muss.

Die Einträge command_directory, daemon_directory und program_directory sind eigentlich immer korrekt eingestellt. Rumfummeln sollte man an diesen Optionen auf keinen Fall!

smtpd_banner

In dieser Zeichenkette steht, wie sich Postfix bei dem anfragenden Programm meldet. Normalerweise ist auch hier alles soweit korrekt eingestellt, man kann aber auf Wunsch die Angaben ändern. In den meisten Fällen wird hier die Postfix Version angezeigt. Somit sollten alle etwas paranoid eingestellten Administratoren diesen Banner anpassen.

Beispiel:

smtpd_banner = $myhostname ESMTP Exchange Server 2003 (Microsoft Windows 2003)

Dies sieht bei einem "telnet localhost 25" dann so aus:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 athene.dnsalias.org ESMTP Exchange Server 2003 (Microsoft Windows 2003)
quit
221 Bye
Connection closed by foreign host.

myhostname

Die Postfixvariable myhostname beinhaltet den vollen Rechnernamen und kann in der main.cf explizit gesetzt werden. Die Variable sollte auf jeden Fall gesetzt werden, wenn der Rechner über mehrere Namen ansprechbar ist.

Also:

myhostname = mail.mustermann-gmbh.de

weist Postfix an, sich unter den Namen "mail.mustermann-gmbh.de" zu erkennen zu geben.

mydestination

Ein Rechner kann unter mehreren Namen im Netz vorhanden sein. Postfix muss wissen, für welche Namen er zuständig ist. Eine Möglichkeit ist die Verwendung virtueller Domains, man kann aber auch die variable mydestination verwenden.

In der Regel steht hier nur "localhost" und (z.B.) "mail.mustermann-gmbh.de" eingetragen.


Der Eintrag "localhost" ist wichtig, da Cronjobs Mails versenden. Diese wären bei Fehlen von "localhost" dann nicht mehr zustellbar.

mynetworks

Dieser Eintrag ist sehr wichtig!

Hier wird definiert, welche Rechner eines Netzwerks Postfix für den Mailversand verwenden dürfen.

Ein typischer Eintrag für ein privates Klasse-C Netz sieht so aus:

mynetworks = 127.0.0.0/8, 192.168.1.0/24

Das heisst, nur das Netzwerk 127.0.0.0 (in der Regel ist hier nur "localhost" enthalten), sowie das Netzwerk 192.168.1.0 darf diesen Server verwenden.

Man könnte auch 0/0 schreiben, dies bedeutet aber, dass jeder Computer im Internet diesen Server verwenden darf!

relayhost

Mails werden von einem Mailserver zum nächsten transportiert. Normalerweise wird per DNS der, bzw. die für eine Domain zuständige(n) Mailserver ermittelt (das ist der berühmte MX; Mail-Exchanger) und an diesen direkt die Post ausgeliefert. Hat man keinen DNS (Intranet), sollte man die Option "disable_dns_lookups" auf "yes" setzen. Dann wird der relayhost über /etc/hosts aufgelöst.

Manche Netzwerkstrukturen verlangen aber den Mailtransport über eine festgelegte Route, bevor eine Mail an einen MX ausgeliefert wird.

So transportieren also z.B. mehrere interne Mailserver die Mails an einen zentralen Mailserver (dieser ist dann das erwähnte Relay), der dann wiederum die Mails an die Empfängerdomains (bzw. deren MXe) verteilt.

inet_interfaces

Hier kann loopback-only (Postfix 2.2 und später), all oder eine Liste von IP-Adressen angegeben werden.

Die Einstellung bestimmt, auf welchen IP-Adressen Postfix E-Mails annimmt. Soll z.B. ein Netzwerk in einem Router (auf dem auch Postfix läuft) vom Empfang / Versand von E-Mails ausgeschlossen werden, wird die IP-Adresse in dieser Option nicht angegeben.

relay_domains

Die Variable relay_domains legt fest, für welche E-Mail-Adressen Mails auch ohne Authentifizierung angenommen werden.

In der Regel sieht dieser Eintrag folgendermassen aus:

relay_domains = $mydestination

Zwar kann man auch Dateien zur Ermittlung nehmen, aber es geht im Moment um eine kleine Standardinstallation. Provider verwenden natürlich kleine Datenbanken.

Was also hat es mit dieser Variable auf sich?

Ein Postfix-Mailserver nimmt Mails an, für deren Domains er per mydestination zuständig ist. Darüber hinaus akzeptiert die Mails, die an relay_domains gerichtet sind, um diese weiterzuleiten. Dies wird z.B. für Backup-MX-Server benutzt, die bei Ausfall des zuständigen Servers als "zweite Wahl" die Mails annehmen, puffern und später an den zuständigen Server weiterleiten.

delay_warning_time

Diese Variable legt fest, wieviel Zeit vergehen muss, bevor eine Warnung an einen User verschickt wird, wenn eine E-Mail nicht zugestellt werden konnte, weil der zuständige Mailserver nicht erreichbar ist. Normal sind 4 Stunden (delay_warning_time = 4h).

Die User brauchen keine Panik zu bekommen, denn es wird weiterhin versucht, die Mail zuzustellen.

maximal_queue_lifetime

Wenn nach einiger Zeit festgestellt wird, dass eine E-Mail definitiv nicht zugestellt werden kann, weil der für den Empfang zuständige Server nicht erreichbar ist, wird die Mail aus der Warteschlange entfernt. Dies geschieht in der Regel nach 5 Tagen (maximal_queue_lifetime = 5d).

Der User, der die Mail verschicken wollte, wird vom System darauf hingewiesen, dass das System endgültig aufgibt, die gewünschte Mail zu versenden.

message_size_limit

"Schick mir doch mal dein Fotoalbum mit den Fotos deines Karibik-Urlaubs!".

So etwas liest man immer wieder.

Der Urlauber sendet nun 300 MB an Daten!

Um diese Menge zu limitieren, wird message_size_limit auf einen angenehmen Wert eingestellt. Die Angabe ist in Bytes! Für eine maximale Nachrichtengrï¿œsse von 1 MB ist der Wert also auf 1048576 Bytes und für 100 MB auf 104857600 Bytes einzustellen.

(Neu-) Start des Servers

Eines vorweg:
Ein Reboot des Rechners (z.B. per init 6, shutdown -r now oder reboot) ist natürlich nicht nötig!

Mit /etc/init.d/postfix start wird der Mailserver gestartet. Sollte es eine Fehlermeldung geben, dass postfix bereits läuft, wird /etc/init.d/postfix restart verwendet.

Mit pstree kann man nun nachsehen, ob der Dienst gestartet wurde. Ein vor sich hin wartender postfix ist an

    |-master-+-pickup
    |        `-qmgr


zu erkennen.

Test des Servers

Ist der Server gestartet und idlet dieser vor sich hin, empfiehlt es sich, mit tail -f /var/log/mail.log in einer Shell das Logfile des postfix mitlaufen zu lassen und auf einer anderen Shell (auf dem selben Rechner) eine Testmail an root zu schicken:

echo "Dies ist eine Testmail" | mail -s "Test" root@localhost

erledigt das.

Im Log taucht dann in etwa folgendes auf:

May  6 12:06:17 athene postfix/pickup[7178]: 87C8FD0CF: uid=500 from=<wiki>
May  6 12:06:17 athene postfix/cleanup[7377]: 87C8FD0CF: message-id=<20050506100617.87C8FD0CF@athene.dnsalias.org>
May  6 12:06:17 athene postfix/qmgr[3467]: 87C8FD0CF: from=<wiki@athene.dnsalias.org>, size=325, nrcpt=1 (queue active)
May  6 12:06:21 athene postfix/smtp[7379]: 87C8FD0CF: to=<root@localhost>, delay=4, status=sent (250 2.0.0 j46A6Kh02547 Message accepted for delivery)

Der wichtigste Eintrag ist "Message accepted for delivery". In diesem Fall hat also alles geklappt und im Postfach von root sollte eine sinnfreie Mail zu finden sein.

'Persönliche Werkzeuge