Printout Header

FAQ:


Welche Wege nimmt eine Mail durch das Modulsystem eines Postfix-Servers?


Postfix glänzt als Mail Transfer Agent System durch seinen modularen Aufbau. Dieser macht Postfix flexibel, leicht zu konfigurieren und zu warten - und außerdem fördert diese Architektur die Entwicklung von fehlerfreien, schnellen und sicherem Code. Wenn ein Postfix-Server eine Mail empfängt, dann kümmern sich spezielle Module jeweils um die verschiedenen Aspekte des Empfangs, der Verarbeitung und der Zustellung von Mails.

Klicken Sie auf die einzelnen Teile der Grafik, um zu den betreffenden Erläuterungen zu gelangen:


Postfix Mailflow MailEmpfang MailVerarbeitung MailZustellung

Die Queues, die Sie in diesem Schaubild sehen, bestehen technisch aus Unterverzeichnissen des konfigurierten Warteschlangenverzeichnisses von Postfix (main.cf-Parameter $queue_directory, default: /var/spool/postfix)



Mail-Empfang


Es gibt prinzipiell zwei verschiedene Wege einer Mail ins Postfix-System hinein: Entweder wird Mail von einem anderen Netzwerk-Teilnehmer gesendet oder die Mail wird lokal auf dem Postfix-Rechner erzeugt und „abgeschickt“.

Beim Mails,. die von anderen Netzwerk-Teilnehmern gesendet werden, ist der Fall ziemlich klar: Es wird vom betreffenden Teilnehmer eine SMTP-Verbindung auf TCP-Port 25 zum Postfix-Rechner initiiert. Dieser Port wird vom Postfix-Masterprozess (master) abgehört, der im Bedarfsfall den SMTP-Serverprozess (smptd) startet.
Postfix Mail-Empfang

Dieser hat evtl. diverse Beschränkungen und entscheidet daraufhin, ob er die Verbindung zulässt oder ablehnt. Wird die Verbindung zugelassen, so übergibt smtpd die empfangenen Mails an das Cleanup Modul.

Benutzer und Prozesse des lokalen Rechners können die Befehle sendmail oder postdrop verwenden, um eine Mail abzuschicken. Diese Mail muss als Datei in RFC 2822-konformem Format vorliegen. Postfix stellt eine eigene Version des Befehls sendmail zur Verfügung, damit andere Programme funktionieren, die von einem installierten Sendmail-Server ausgehen. Verwechseln sie nicht das Utility mit dem Namen „sendmail“ mit dem althergebrachten Mailserver-System Sendmail!

Das von Postfix installierte sendmail arbeitet nämlich mit genau denselben Optionen wie das alte herkömmliche sendmail, so dass andere Prozesse den Unterschied nicht bemerken. Wie auch immer, postdrop bzw. sendmail legen die Mail schließlich als Datei in der maildrop Warteschlange ab – dies ist auch möglich, wenn Postfix gar nicht aktiv ist: Diese Warteschlange wird automatisch beim Start von Postfix und auch danach regelmäßig abgearbeitet. Hierfür ist der Prozess pickup zuständig. Er holt die Mails aus der Maildrop-Warteschlange und übergibt Sie dem Cleanup Modul.
Der Prozess cleanup übernimmt also Mails sowohl von pickup als auch von smtpd. Für all diese Mails werden nun bestimmte Checks durchgeführt. Es wird z.B. dafür gesorgt, dass im Header der einzelnen Mail evtl. fehlende Pflicht-Attribute eingetragen werden und dass bei Bedarf die Adressierung in ein standardisiertes Format der Schreibweise „user@domain.com“ umgewandelt wird (diese Aufgabe wird dem Modul trivial-rewrite übertragen).

Auch die komplette Umadressierung von Mails kann durch cleanup erledigt werden. Darüber hinaus kann cleanup die Mails noch einigen (jedoch nicht sehr mächtigen) Filtern unterwerfen – als Schutz vor Spam.

Sowohl diverse Zugriffsregeln beim smtpd-Prozess als auch bei cleanup können dazu führen, dass Mails in aus dem normalen Mail-Fluss herausgenommen und der so genannten hold-Warteschlange platziert werden. Dort bleiben sie solange liegen, bis z.B. der Administrator nach einer Sichtung dieser Mails deren Weiterverarbeitung veranlasst.

Normalerweise jedoch legt cleanup schließlich die derart behandelte Mails als Dateien in der incoming Warteschlange ab und benachrichtigt den Queue Manager.




Mail-Verarbeitung


Der zentrale Prozess in dieser Phase des Mailflusses ist der Warteschlangen-Manager qmgr. Man könnte qmgr auch Herz des gesamten Postfix Servers bezeichnen.

Er nimmt zunächst neu „angekommene“ Mails aus der incoming Queue und übernimmt diese in die active Queue. Dort liegen alle Mails, um deren Auslieferung sich qmgr momentan bemüht. Es werden von der incoming Queue stets nur eine überschaubare Anzahl von Mails in die active Queue „vorgelassen“ – diese verhindert eine Überlastung des Warteschlangen-Managers.
Postfix Mail-Verarbeitung

In der active Warteschlange werden z.B. Mails gruppiert, die gemäß ihren Empfänger-Adressen den gleichen Weg im Mailfluss nehmen (z.B. zum gleichen Smarthost gesendet werden). Außerdem werden die Mails abermals an das Modul trivial-rewrite übergeben, damit der weitere Transport-Weg ermittelt werden kann. Der trivial-rewrite-Prozess gleicht dabei die Umschlagsempfänger der Mails gemäß einer Tabelle ab, ob evtl. ein spezieller Transportweg eingeschlagen werden muß (z.B. an einen ganz bestimmten SMTP-Server).

Außerdem kann trivial-rewrite anhand einer speziellen Tabelle den Absender der Mail von einem Postfach-Umzug unterrichten.

Somit wird entgültig festgelegt, wie und wohin die Mails zugestellt werden müssen. Diesen Auftrag übergibt qmgr dann an die entsprechenden Zustellungsmodule – die Delivery Agents.

Stellt sich heraus, dass aus temporären Gründen nicht zugestellt werden konnte (z.B. weil der kontaktierte SMTP-Server nicht erreichbar war), dann lagert qmgr die betreffenden Mails in der deferred Queue ab – noch einiger Zeit beginnt ein erneuter Versuch – die Mails kommen abermals in die active Queue. Ist eine Mail dauerhaft nicht zustellbar, dann wird Sie dem bounce-Prozess übergeben – dieser erzeugt eine Nichtzustellbarkeitsmeldung an den Absender.




Mail-Zustellung


Sind alle Umadressierungen, Checks und Filter auf eine Mail in der active Queue angewandt, dann wird diese dem zuständigen Modul zur Auslieferung übergeben. Die Aktivierung der entsprechenden Prozesse wird dabei von qmgr ausgelöst.

Der Modul smtp ist ein Simple Mail Transfer Protokoll Client und überträgt die Mail dabei per TCP/IP an andere SMTP-Server im Netzwerk. Entweder ist durch das Mail-Routing in Postfix bereits festgelegt, zu welchem Server die Mail gesendet wird (transport-Table), oder dieser wird per DNS ausfindig gemacht.
Postfix Mail-Zustellung

Dazu fragt smtp die für die Zieladresse der Mail zuständigen MX-Einträge im DNS ab. Falls dort mehrere Ziel-Server aufgeführt werden, wird diese Liste nach Priorität sortiert und die Server werden gegebenenfalls nacheinander kontaktiert.

Das Modul virtual liefert Mail in lokale Mailboxen aus, wobei UNIX-typische Mailboxen (alle Mails werden in einer einzigen Datei gespeichert) und auch Mailboxen vom QMail-Standard (jede Mail wird in einer eigenen Datei gespeichert) beliefert werden können. Im Unterschied zum local Agent kann virtual Mailboxen mit unterschiedlichen Mail-Domains beliefern, so dass er sich für Konstellationen eignet, in denen ein Postfix-System viele verschiedene Mail-Domains beherbergt.

Das Modul local wird ebenfalls zur Auslieferung von Mails in lokale Mailboxen benutzt. Es kann zwar nicht gut mit verschiedenen Mail-Domains umgehen, aber beherrscht neben „UNIX-style“ und „QMail-style“ Mailboxen auch die Zustellung an Postfächer in Sendmail-Format, bei Bedarf auch mit den dort gebräuchlichen forward-Files. Außerdem kann local die Mail zur Auslieferung an einen zusätzlichen Programmaufruf übergeben, was in der Praxis häufig genutzt wird, und zwar mit dem Pogramm procmail. Das Modul lmtp stellt Mails über das Local Mail Transfer Protocol (LMTP) an einen entsprechenden Server auf dem gleichen Rechner zu. Es handelt sich dabei um eine Übergabeschnittstelle für Mails, die dem SMTP-Protokoll sehr ähnlich ist und z.B. im Zusammenspiel mit Cyrus-Mailservern (POP3 und IMAP4) wichtig sein kann.

Das Modul pipe übergibt die Mail an einen externen Programmaufruf, der dann die Mail zu speziellem Handling übernehmen kann. Es kann sich dabei um alles mögliche handeln, z.B. ein Programm zum Viren-Check der Mail, oder einen Anti-Spam-Filter. Außerdem wurde pipe im Zusammenhang mit Übermittlung in UUCP-Mailsysteme (Unix to Unix Copy Program) benutzt, was heutzutage jedoch keine große Rolle mehr spielen dürfte.