35.2Postfix (MTA)
Dieser Abschnitt beschreibt die Installation und Konfiguration des MTAs Postfix unter Ubuntu. Postfix zählt momentan zu den populärsten MTAs und ist sehr gut dokumentiert – sowohl auf http://postfix.org als auch in unzähligen Artikeln und einigen Büchern.
Dennoch ist die Wahl von Postfix keineswegs selbstverständlich: Während es für manche Aufgaben nur ein weit verbreitetes Programm gibt, stellt die Open-Source-Welt gleich mehrere ausgezeichnete MTAs zur Auswahl. Ob Postfix oder Exim, Qmail oder Sendmail – alle genannten Programme sind weitverbreitet und erfüllen ihren Zweck. Wenn Sie mit Administratoren sprechen, wird vermutlich jeder den MTA empfehlen, den er selbst einsetzt und gut kennt. Einen fast zehn Jahre alten, aber dafür neutralen und gut fundierten Vergleich verschiedener MTAs finden Sie hier:
http://shearer.org/MTA_Comparison
Bevor Sie mir auf den nächsten Seiten durch diverse Konfigurationsdetails folgen, sollten einige Voraussetzungen erfüllt sein:
-
Sie brauchen einen von Ihrem Server unabhängigen E-Mail-Account – beispielsweise bei GMX, Google oder Yahoo –, um Ihr neues E-Mail-System zu testen.
-
Die DNS-Konfiguration Ihrer Domain muss korrekt sein.
-
Der Hostname Ihres Rechners sollte korrekt eingestellt sein. Die Kommandos hostname und cat /etc/hostname sollten jeweils den richtigen Namen Ihres Servers liefern (also z.B. firma-abc.de).
-
Für Ihren Root-Server sollte es einen Reverse-DNS-Eintrag geben.
-
Zu guter Letzt ist die Installation eines kleinen textbasierten E-Mail-Clients empfehlenswert, um den MTA direkt zu testen (siehe Abschnitt 6.9, »Mutt«).
Firewall
Damit der Mail-Server aus dem Internet erreichbar ist, dürfen die Ports 25 und 587 nicht durch eine Firewall blockiert werden. Genau das ist unter CentOS, Fedora, RHEL und SUSE aber der Fall. Unter SUSE öffnen Sie die Ports am schnellsten mit YaST. Bei Red-Hat-ähnlichen Distributionen stellen Sie zuerst fest, welche Firewall-Zone für die Netzwerkschnittstelle zum Internet gilt, und öffnen die Ports dann mit firewall-cmd. Das Kommando für den Ports 465 ist optional. Port 465 ist für das mittlerweile als veraltet geltende Protokoll SMTPS vorgesehen.
Hintergrundwissen und andere Strategien zur Firewall-Konfiguration sind in Kapitel 38, »Firewalls«, zusammengefasst.
Installation
Bei Debian und Ubuntu erscheint nach der Installation des postfix-Pakets ein Konfigurationsprogramm. Dort müssen Sie angeben, welche Art von Grundinstallation Sie wünschen. Auf einem Root-Server ist Internet Site die richtige Wahl: Sie wollen Postfix einsetzen, um auf dem Server E-Mails per SMTP zu versenden und zu empfangen.
Im nächsten Punkt müssen Sie den Namen des E-Mail-Servers angeben (standardmäßig einfach den Hostnamen des Rechners, also beispielsweise firma-abc.de). Dieser Name wird dazu verwendet, um E-Mail-Adressen ohne Domainnamen zu vervollständigen. Aus einer E-Mail an name wird also eine an name@firma-abc.de.
Bei den anderen Distributionen gibt es keine vordefinierten Konfigurationsvarianten. Die Standardkonfiguration sieht in der Regel so aus, dass Postfix nur E-Mails von lokalen Benutzern versenden kann. Alle weiteren Funktionen müssen Sie durch entsprechende Konfigurationseinstellungen explizit freischalten. Achten Sie insbesondere auf den Parameter inet_protocols! Er enthält oft localhost. Damit kommuniziert Postfix nur mit der lo-Schnittstelle. Die korrekte Einstellung lautet all; alternativ können Sie die gewünschten IP-Adressen oder -Adressbereiche aufzählen.
Nach dieser Minimalkonfiguration wird Postfix sofort gestartet. Das Programm erfüllt in der Grundkonfiguration die folgenden Funktionen:
-
Postfix empfängt via SMTP E-Mails an name@firma-abc.de. Sofern es auf dem Server den Login name gibt, wird die E-Mail akzeptiert und gespeichert. Das gilt für alle Accounts, die in /etc/passwd definiert sind: Sofern Apache installiert ist, ist beispielsweise auch www-data@firma-abc.de eine gültige E-Mail-Adresse. Wenn name nicht bekannt ist, wird die E-Mail zurückgewiesen (user unknown).
-
Akzeptierte E-Mails werden vom Postfix-eigenen MDA im Mbox-Format in der Datei /var/mail/name gespeichert. Die Dateien in /var/mail sind also die »Postfächer« (Mailboxes) der verschiedenen E-Mail-Benutzer des Rechners. Das Mbox-Format bedeutet vereinfacht gesagt, dass die E-Mails in einer immer größer werdenden Datei aneinandergefügt werden. Da E-Mails in der Regel in einem Textformat codiert sind, können Sie die Mbox-Datei zur Not sogar mit cat oder less ansehen. Eine Alternative zum Mbox-Format ist das Maildir-Format, in dem es für jedes Postfach ein eigenes Verzeichnis und für jede E-Mail eine eigene Datei gibt.
-
Lokale Benutzer können E-Mails versenden – sowohl intern an alle Accounts auf dem Server als auch extern an beliebige andere E-Mail-Adressen.
Als ersten Test senden Sie von einem externen Account eine E-Mail an name@firma-abc.de, wobei name ein aktiver Linux-Account auf dem Root-Server ist. Die E-Mail sollte nach kurzer Zeit in /var/mail/name auftauchen. Wenn Sie sich als name anmelden, können Sie die E-Mail mit mutt lesen. Ebenfalls mit mutt testen Sie als Nächstes das Versenden einer E-Mail an Ihre externe E-Mail-Adresse. Sollten bei den beiden Tests Probleme auftreten, ist die wahrscheinlichste Fehlerursache eine falsche bzw. fehlende DNS-Konfiguration.
Konfiguration
Die grundlegenden Postfix-Konfigurationsdateien befinden sich in /etc/postfix. Innerhalb der Konfigurationsdateien können Sie bereits eingestellte Optionen wie Variablen verwenden – also option1 = wert1 und dann option2 = $option1. Anweisungen in der Konfigurationsdatei dürfen über mehrere Zeilen reichen, wobei der Text ab der zweiten Zeile eingerückt sein muss.
In den Konfigurationsdateien wird oft auf Tabellen oder Listen verwiesen, die in der englischen Dokumentation Lookup Tables oder Mappings heißen. Dabei gilt die Syntax option=type:name. Der gebräuchlichste Dateityp ist hash. In diesem Fall wertet Postfix die Datei name.db aus, d.h., es fügt dem angegebenen Dateinamen die Endung .db hinzu. *.db-Dateien sind Tabellen in einem binären Format (Berkeley Database, kurz BDB). Zur Manipulation solcher Dateien verwenden Sie das Kommando postmap.
Tabellen im Textformat sind aus Effizienzgründen nicht vorgesehen. Eine Ausnahme ist lediglich die Textdatei /etc/aliases, deren Format kompatibel zu Sendmail ist. Aber auch in diesem Fall greift Postfix auf die dazugehörende BDB-Datei aliases.db zurück. Deswegen muss aliases.db nach jeder Änderung an aliases durch das Kommando newaliases synchronisiert werden. Was Mail-Aliase sind und wie sie konfiguriert werden, wird einige Seiten weiter in Abschnitt 35.3, »Verwaltung der Postfix-Mail-Konten«, beschrieben.
Postfix kann aber auch mit externen Datenbanken (MySQL, PostgreSQL, LDAP) kommunizieren, sofern die entsprechenden Postfix-Erweiterungspakete installiert sind. Die in der Konfigurationsdatei genannte Datei enthält nun nicht die eigentlichen Daten, sondern die Verbindungsinformationen und eine (SQL-)Abfrage. Der Einsatz externer Datenbanken bietet sich vor allem dann an, wenn Sie sehr viele, also Hunderte oder Tausende von E-Mail-Accounts verwalten müssen.
main.cf
Die wichtigste Konfigurationsdatei für Postfix ist /etc/postfix/main.cf. Das folgende Listing gibt die wichtigsten Zeilen dieser Datei in der Grundeinstellung (Typ Internet Site) wieder:
Neben den im obigen Listing enthaltenen Schlüsselwörtern gibt es unzählige weitere, die in man 5 postconf dokumentiert sind. Für alle nicht explizit eingestellten Optionen gelten Defaulteinstellungen. Wie diese aussehen, verrät das Kommando postconf -d. Im Folgenden stelle ich Ihnen einige besonders wichtige Einstellungen kurz vor. Eine Beschreibung diverser weiterer Optionen folgt im weiteren Verlauf dieses Kapitels.
-
myhostname sollte den Hostnamen des Servers enthalten. myhostname gilt als Standardeinstellung für viele andere Optionen.
-
myorigin gibt an, welcher Domain lokal versandte E-Mails zugeordnet werden sollen. Standardmäßig hat myorigin denselben Wert wie myhostname, und bei der hier vorgestellten Konfiguration sollten Sie es auch dabei belassen! Bei der mit Ubuntu bzw. Debian mitgelieferten Konfigurationsdatei wird myorigin aus der Datei /etc/mailname gelesen. Stellen Sie sicher, dass dort der richtige Name enthalten ist (für unser Beispiel also firma-abc.de), oder ändern Sie die Einstellung in der Datei main.cf in myorigin=$myhostname!
-
mydestination listet Domänen auf, für die empfangene E-Mails lokal in ein Postfach zugestellt (also gespeichert) werden sollen. Nach der Basiskonfiguration hat diese Zeile bei mir auch localhost.de enthalten; diesen Eintrag habe ich wieder entfernt.
Vorsicht: Auch wenn Postfix für mehrere Domänen zuständig ist, darf mydestination nur Einträge für die Hauptdomäne enthalten. Virtuelle Domänen geben Sie mit der Option virtual_alias_domains an.
-
mynetworks gibt an, von welchen Adressen Postfix E-Mails ohne Authentifizierung via SMTP entgegennimmt. Die hier angegebenen Adressen bzw. Adressbereiche bezeichnen also die Rechner, denen Postfix »vertraut« (Trusted SMTP Clients).
Bei der hier präsentierten Konfiguration (also für einen eigenständigen E-Mail-Server auf einem Root-Server) darf mynetworks nur localhost (oben in IP4- und IP6-Schreibweise) enthalten. Wenn Sie mynetworks falsch (zu liberal) konfigurieren, können fremde Benutzer Ihren Mail-Server dazu verwenden, ohne Authentifizierung E-Mails zu versenden. Vorsicht, Spam-Versender lieben solche Rechner!
-
relayhost gibt an, an welchen MTA E-Mails weitergeleitet werden sollen, die nicht für die lokale Zustellung gedacht sind. Bei der hier vorgestellten Konfiguration muss relayhost leer bleiben. Wenn Postfix dagegen auf einem Rechner im LAN läuft und zu versendende E-Mails an einen externen MTA im Internet weitergeben soll, ist relayhost der entscheidende Parameter.
-
inet_interfaces steuert, an welchen Netzwerkschnittstellen Postfix auf einkommende E-Mails wartet. Mit der Defaulteinstellung all sind alle Schnittstellen aktiv. loopback_only oder die Angabe der Adressen 127.0.0.1 und ::1 bedeutet, dass nur server-interner Netzwerkverkehr verarbeitet wird. Änderungen an dieser Option erfordern einen Neustart von Postfix (system postfix restart)!
Postfix besteht aus einer Menge Einzelprogramme, von denen viele bei Bedarf jedes Mal neu gestartet und wenig später gleich wieder beendet werden. Diese Programme lesen die für sie relevanten Konfigurationsdateien jedes Mal neu ein.
Allerdings gibt es auch Postfix-Komponenten, die Konfigurationsänderungen nicht selbstständig bemerken. Postfix-Einsteiger, denen oft unklar ist, welche Änderungen Postfix selbstständig bemerkt, sollten nach Konfigurationsänderungen grundsätzlich service postfix reload ausführen. Das gilt insbesondere für Änderungen an master.cf und main.cf. Postfix-Profis werden reload dagegen wegen des damit verbundenen Geschwindigkeitsverlusts möglichst vermeiden, besonders bei großen aktiven Systemen.
Anstatt main.cf mit einem Editor zu ändern und anschließend ein reload-Kommando auszuführen, können Sie die Änderung auch mit postconf -e option=wert durchführen. Das Kommando postconf benachrichtigt dann auch gleich Postfix über die Änderung.
Postfix unterstützt zwar IPv6, standardmäßig ist aber nur IPv4 aktiv. Wenn Sie IPv6 nutzen möchten, sind in der Regel zwei Änderungen in main.cf erforderlich:
Diese Änderungen werden erst nach einem Neustart von Postfix wirksam. Weitere Informationen zu den IPv6-Funktionen von Postfix können Sie hier nachlesen:
http://www.postfix.org/IPV6_README.html
Verschlüsselung (TLS/STARTTLS)
Postfix unterstützt das Protokoll Transport Layer Security (TLS) und das Verfahren STARTTLS zum Aufbau einer verschlüsselten Verbindung zwischen sich und dem Mail-Client, der eine E-Mail versenden möchte. Das setzt aber voraus, dass main.cf richtig konfiguriert ist und dass Sie für Ihren Rechner ein geeignetes Zertifikat haben. Grundlagenwissen zu »richtigen« und zu selbst erzeugten Zertifikaten können Sie in Abschnitt 33.4, »Verschlüsselte Verbindungen (HTTPS)« nachlesen. Weitere Informationen zur TLS-Unterstützung von Postfix finden Sie hier:
http://www.postfix.org/TLS_README.html
smtpd_tls_security_level = may bewirkt, dass Postfix STARTTLS anbietet und die Kommunikation nach Möglichkeit TLS-verschlüsselt durchführt. Bei einer falschen Konfiguration des Mail-Clients bzw. für alte Mail-Clients ist allerdings weiterhin eine Authentifizierung im Klartext möglich. Wenn Sie die Verschlüsselung erzwingen möchten, geben Sie anstelle von may die Zeichenkette encrypt an.
Zertifikatsfragen
Sofern es sich bei Ihrem Zertifikat nicht um ein Wildcard-Zertifikat handelt, das für alle Subdomains *.firma-abc.de gilt, stellt sich die Frage: Für welchen Domainnamen soll das von Postfix genutzte Zertifikat eigentlich gelten? Für firma-abc.de oder für mail.firma123.de (laut MX-Eintrag)? Laut
http://serverfault.com/questions/389413
ist ausschließlich der Client (z.B. Thunderbird) für die Verifizierung verantwortlich. Der Client wiederum vergleicht den Domainnamen des Zertifikats mit dem Hostnamen, den Sie bei der Client-Konfiguration des Mailkontos angeben. Der MX-Eintrag ist hierfür nicht relevant.
Standardmäßig stellt Thunderbird für die SMTP-Konfiguration dem Hostnamen smtp voran. Daraus ergibt sich beispielsweise smtp.firma-abc.de. Dann müsste auch das Zertifikat auf diesen Namen lauten. Wenn Sie das konsequent weiterführen, brauchen Sie für jedes Mail-Protokoll ein eigenes Zertifikat (pop.firma-abc.de, imap.firma-abc.de etc.). Derart viele Zertifikate können sich aber nur große Firmen bzw. E-Mail-Provider wie Google oder GMX leisten.
Für kleine Firmen oder private Server-Betreiber, bei denen Mail- und Webserver auf einem Rechner laufen, sieht die beste Lösung so aus: Sie verwenden sowohl für den Web- als auch für den Mail-Server ein Zertifikat für firma-abc.de (oder wie auch immer Ihr Hostname lautet). Bei der Konfiguration des E-Mail-Programms achten Sie darauf, dass Sie für SMTP, IMAP, POP etc. immer einfach firma-abc.de verwenden, nie xxx.firma-abc.de. Das erfordert ein wenig Mühe bzw. Schulungsarbeit bei der Mail-Client-Konfiguration, ist davon abgesehen aber eine sichere und saubere Lösung.
Unter Debian und Ubuntu wird bei der Postfix-Installation standardmäßig ein sogenanntes Snakeoil-Zertifikat samt Schlüssel eingerichtet, also ein selbst signiertes, für zehn Jahre gültiges Zertifikat. Die Parameter smtpd_tls_cert_file und -key_file in main.cf geben die Orte der Zertifikats- und Schlüsseldateien an:
Der Mail-Client wird bei der Konfiguration natürlich melden, dass das Zertifikat nicht vertrauenswürdig sei. Wenn Sie das Zertifikat dann dennoch akzeptieren, werden die Mails sicher verschlüsselt vom Mail-Programm zu Postfix übertragen, und Sie haben Ihr Ziel erreicht.
Alternativ können Sie mit den folgenden Kommandos selbst ein eigenes, für zehn Jahre gültiges Zertifikat erzeugen. Entscheidend ist, dass Sie bei der Ausführung von openssl als Common Name den Hostnamen Ihres Servers angeben, also z.B. firma-abc.de. Vergessen Sie chmod 600 für die Key-Datei nicht!
Anschließend verändern Sie main.cf wie folgt:
Änderungen an der TLS-Konfiguration werden erst mit einem Neustart von Postfix wirksam:
Beim Einrichten eines neuen Mail-Kontos in Ihrem Mail-Client wählen Sie die SMTP-Verschlüsselungsmethode STARTTLS aus (siehe auch Abbildung 35.3). Falls Sie ein selbst signiertes Zertifikat verwenden, müssen Sie dieses beim ersten Verbindungsaufbau durch den Mail-Client akzeptieren.
Postfix als lokaler E-Mail-Server
Einige Programme versenden Statusberichte oder Fehlermeldungen per E-Mail an root. Dazu zählen z.B. Logwatch, das RAID-System und SMART. Wenn auf dem Rechner – wie auf den vorangegangenen Seiten beschrieben – ein vollwertiger E-Mail-Server läuft, kümmert sich dieser um den Versand derartiger Benachrichtigungs-Mails. Sie sollten allerdings in /etc/aliases eine Zeile einfügen, die die an root gerichteten E-Mails an Ihren lokalen E-Mail-Account umleitet:
Vergessen Sie nicht, dass Sie nach Änderungen an der aliases-Datei das Kommando newaliases ausführen müssen!
Der Empfang von lokalen E-Mails ist freilich auch dann wünschenswert, wenn auf dem Rechner kein vollwertiger E-Mail-Server installiert ist. Für solche Fälle sehen die Installations-Scripts von Postfix für Debian und Ubuntu die Konfigurationsvariante Nur lokal vor, die Sie unmittelbar nach der Installation auswählen. Wenn Sie die Postfix-Grundkonfiguration zu einem späteren Zeitpunkt nochmals wiederholen möchten, führen Sie unter Debian/Ubuntu dpkg-reconfigure postfix aus.
Die Konfigurationsvariante Nur lokal bewirkt, dass nur innerhalb des Servers E-Mails verarbeitet werden. Programme können also E-Mails an root oder an andere Benutzer versenden. Diese werden in den Postfächern /var/spool/mail/benutzername gespeichert und können z.B. mit Mutt gelesen werden (siehe Abschnitt 6.9, »Mutt«).
Postfix akzeptiert in dieser Konfiguration weder E-Mails von anderen Rechnern noch versendet es E-Mails an andere Rechner. Die resultierende Datei /etc/postfix/main.cf sieht wie folgt aus. Entscheidend ist die Zeile inet_interfaces = loopback-only, die den E-Mail-Empfang über reale Netzwerkschnittstellen von vornherein ausschließt.
Die Installation eines lokalen Postfix-Servers ist also trivial, ein Problem bleibt aber ungelöst: Wie kommen die lokalen E-Mails aus /var/spool/mail/username zum Administrator? Dieser muss sich ja in der Regel um mehrere Rechner kümmern und wird sich nicht ständig auf allen Rechnern einloggen, nur um nachzusehen, ob auf dem Rechner interessante lokale E-Mails zu finden sind.
An dieser Stelle wird es kompliziert: Der erste Schritt besteht darin, in /etc/aliases statt eines lokalen Benutzers die gewünschte Empfängeradresse für root-E-Mails anzugeben. Nach der Änderung führen Sie das Kommando newaliases aus.
Als Nächstes müssen Sie main.cf ändern, damit Postfix E-Mails auch weiterleitet. relayhost gibt an, an welchen Server nichtlokale E-Mails weitergeleitet werden. Achten Sie darauf, den Hostnamen in eckige Klammern zu setzen!
Die smtp-Optionen geben an, dass sich Postfix beim externen Server authentifizieren soll. Die Passwortinformationen befinden sich in der Datei sasl-passwd, wobei die dazugehörende Datenbank wie üblich nach jeder Änderung durch postmap aktualisiert werden muss.
Zu guter Letzt müssen die beiden Einstellungen für default_transport und relay_transport auskommentiert werden. Dabei handelt es sich um eine Vorsichtsmaßnahme der lokalen Konfigurationsvariante, die verhindert, dass Postfix zum Relaying verwendet werden kann:
Die Datei sasl-passwd hat den folgenden Aufbau:
Viele E-Mail-Server werden den Empfang von E-Mails von Ihrem Server verweigern, weil die Absenderadresse der E-Mail nicht mit der Adresse des in sasl-passwd spezifizierten E-Mail-Accounts übereinstimmt. Um auch diese Hürde zu überwinden, die dem Schutz vor Spam dient, wird Postfix so konfiguriert, dass es die Absenderadresse root@... durch die E-Mail-Adresse Ihres Accounts ersetzt:
canonical muss nun den folgenden Eintrag enthalten. Vergessen Sie anschließend postmap /etc/postfix/canonical nicht!
Logging, Administration
Postfix protokolliert seine Tätigkeiten via Syslog. Wo die zahlreichen Meldungen landen, ist wie so oft distributionsabhängig:
-
Bei manchen Distributionen gibt es mehrere Logging-Dateien in /var/log, die z.B. die Namen mail.log, mail.info, mail.warn und mail.err haben. Das erleichtert es, zwischen mehr oder weniger wichtigen Nachrichten zu differenzieren.
-
Gebräuchlicher ist es, dass einfach alle mail-relevanten Nachrichten in /var/log/mail.log landen. Mit grep können Sie dann die Nachrichten herausfiltern, die ein bestimmtes Programm betreffen (grep postfix mail.log), die einen Fehler beschreiben (grep -i error mail.log) etc.
-
Immer mehr Distributionen mit Systemd als Init-System verwenden das Journal für Logging-Aufgaben. journalctl -u postfix liefert dann alle Postfix-Meldungen, journalctl -u dovecot die von Dovecot etc.
Wenn Sie wissen möchten, welche E-Mails auf den Versand warten, führen Sie postqueue -p oder mailq aus. Die beiden Kommandos liefern eine Liste aller E-Mails, die – aus welchen Gründen auch immer – bisher nicht versandt werden konnten.