# Postfix (Mail Transfer Agent)

Postfix ist ein Mail Transfer Agent (MTA) für Unix und Unix-Derivate. Die Software sollte zum Entwicklungszeitpunkt eine kompatible Alternative zu Sendmail sein. Dabei achteten die Programmierer insbesondere auf Sicherheitsaspekte. Der Quellcode von Postfix steht unter der IBM Public License zur Verfügung und ist damit freie Software.

## Geschichte

Postfix wurde 1998 von Wietse Zweitze Venema entwickelt und zunächst unter dem Namen VMailer veröffentlicht. Im Rahmen einer markenrechtlichen Prüfung fand man heraus, dass dieser Name einer anderen Marke sehr ähnlich ist und vergab den Namen „IBM Secure Mailer + Postfix“. Wietse Venema äußerte sich zur Namenssuche wie folgt:
    We spent several months giving names to the program. The IBM name policy killed every name we thought up, and so we decided to change tactics. The program now has TWO names: IBM Secure Mailer + Postfix.
Das Designziel war ein schnelles, sicheres und leicht zu administrierendes System.

## Eigenschaften

Postfix ist ein schnelles und im Verhältnis zu Sendmail oder qmail einfach zu konfigurierendes System.
Besonderer Wert wurde bei Postfix auf eine einfache Administration (da es im Wesentlichen nur zwei Konfigurationsdateien gibt) und einen sicheren Mailserver gelegt. Es ist kompatibel mit Sendmail, arbeitet also mit Programmen zusammen, die Sendmail statt Postfix als Mailserver erwarten würden. Weiterhin ist es modular aufgebaut und führt seinen Code, soweit möglich, ohne root-Rechte aus. Konfigurationsänderungen sind zur Laufzeit möglich und werden ohne kompletten Neustart übernommen, also ohne Dienstunterbrechung, mittels postfix reload und SIGHUP.
Dieser modulare Aufbau zeigt sich in der unten dargestellten Grafik. In dieser finden sich vier Elementtypen:

### Gelbe Ellipsen

    Sie stehen für je einen Daemon, welchem genau eine Aufgabe zugeordnet wurde. Aus dieser Modularität heraus erklärt sich die große Sicherheit und Stabilität, die Postfix auszeichnet.

### Blaue Kästen

    Die blauen Kästen stehen für sogenannte Lookup tables (postfix maps). Sie enthalten in zwei Spalten Informationen, die zur Weiterverarbeitung von E-Mails herangezogen werden können. Dies kann eine Zugriffsliste (engl. access) sein, die darüber bestimmt, ob die E-Mail angenommen wird oder nicht, zum Umschreiben des Adressaten bzw. Senders oder auch der weitere Weg (engl. transport), den eine E-Mail nehmen soll.

### Orange Kästen

    Die orangen Kästen stehen zum einen für sogenannte Warteschlangen (engl. queues), bei der E-Mails physisch auf dem Datenträger (zumeist Festplatte oder einem NFS Laufwerk) abgelegt werden, oder aber für Endzustellung, zum Beispiel eine Mailbox eines Benutzers (Beispiel: /var/mail/benutzername).

### Weiße Wolken

    Sie stehen für den möglichen Eintritt oder auch das Verlassen des Postfix Systems. Als Beispiel auf der linken Seiten den SMTPD Daemon, welcher für die Annahme von E-Mails über den TCP Port 25 zuständig ist (soweit nicht anders konfiguriert). Auf der rechten Seite dagegen gibt es den SMTP Daemon, der für das Weitergeben von E-Mails an andere SMTP zuständig ist.
Alle Daemonen (gelbe Ellipsen) werden vom Postfix Master Prozess bei Bedarf gestartet und auch überwacht.
Mit der Version 3.0 wurde SMTPUTF8, also die Unterstützung von internationalisierten Domain-Namen und von UTF-8-Namen in Mailboxen und -Headern und dynamisch gelinkte Bibliotheken und Datenbank-Plug-ins, hinzugefügt.
In der Praxis ist die Kombination von Postfix und Dovecot eine bewährte Lösung für Mailserver. Postfix speichert eingehende E-Mails standardmäßig im Verzeichnis /var/mail/benutzername, wobei die Zustellung ausschließlich an existierende Benutzerkonten erfolgt. Dovecot ergänzt Postfix wesentlich, indem es nicht nur die E-Mail-Zustellung an individuelle Konten sicherstellt, sondern auch eine essenzielle Benutzerauthentifizierung über SASL anbietet. Zudem ermöglicht Dovecot den E-Mail-Zugriff via IMAP oder POP3. Diese Funktionen machen Dovecot für den Betrieb moderner Mailserver praktisch unverzichtbar.

## Alternativen

* Exim
* qmail