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:
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)
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.
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.
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.