Postfix/Architektur

Aus Foxwiki

Architektur

Einführung

  • Dieses Dokument gibt einen Überblick über die Postfix-Architektur, und bietet Verweise auf Beschreibungen aller Postfix-Befehle oder Serverprogramm.
  • Der Text gibt den allgemeinen Kontext an, in dem jeder Befehl oder jedes Serverprogramm wird verwendet und liefert Zeiger darauf Dokumente mit konkreten Anwendungsbeispielen und Hintergrundinformationen.
Modulare Postfix Architektur

Daemon

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.
Lookup tables

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.
queues

Orangene Kästen:

  • Die orangenen 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).
Eingänge/Ausgänge

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.

Postfix Architektur

Wie Postfix Mail empfängt

Postfix:Architektur:Empfang

Wie Postfix E-Mails zustellt

Postfix:Architektur:Zustellung

Postfix hinter den Kulissen

  • Die vorherigen Abschnitte gaben einen Überblick darüber, wie Postfix-Server verarbeitet das Senden und Empfangen von E-Mails.
  • Diese Serverprozesse verlassen sich auf andere Serverprozesse, die Dinge hinter den Kulissen tun.
  • Der Text Im Folgenden wird versucht, jeden Dienst in seinem eigenen Kontext zu visualisieren.
  • Wie Davor sind Namen gefolgt von einer Zahl Postfix-Befehle oder Server Programme, während nicht nummerierte Namen innerhalb schattierter Bereiche darstellen Postfix-Warteschlangen.
  • Der residente Master(8) -Server ist der Supervisor, der behält ein Auge auf das Wohlergehen des Mailsystems Postfix.
  • Es ist typisch beim Systemstart mit dem Befehl "postfix start" gestartet und läuft weiter, bis das System ausfällt.
  • Der Master(8) -Server ist verantwortlich für das Starten von Postfix-Serverprozessen zum Empfangen und E-Mail-Zustellung und für den Neustart von Servern, die vorzeitig beendet werden wegen irgendwelchen problemen.
  • Der Master(8) -Server ist ebenfalls verantwortlich zum Durchsetzen der Serverprozess-Zählerlimits, wie in der angegeben master.cf Konfigurationsdatei
  • Das Bild unten gibt die Programmhierarchie beim Start von Postfix.
  • Nur ein Teil der Post Verarbeitung von Daemon-Prozessen werden angezeigt.
postfix(1)
| |
Postfix-Skript(1)
/
/
| |


\
\
postsuper(1) Meister(8) Postlog(1)
/
/
| |


\
\
smtpd(8) qmgr (8) lokal(8)
  • Der anvil(8) -Server implementiert die Client-Verbindung und Anforderungsrate Begrenzung für alle smtpd(8) -Server. Das TUNING_README Dokument bietet Anleitungen zum Umgang mit fehlerhaften SMTP-Clients. Das anvil(8) ist in Postfix Version 2.2 und höher verfügbar.
Netzwerk -> smtpd(8) <-> Amboss(8)
  • Die bounce(8) , defer(8) und trace(8) werden jeweils verwaltet ihre eigenen Warteschlangen-Verzeichnisbäume mit Protokolldateien pro Nachricht. Postfix verwendet diese Informationen beim Senden von „fehlgeschlagen“, „verzögert“ oder „erfolgreich“ Benachrichtigungen über den Zustellstatus an den Absender.
    Der Trace(8) -Dienst implementiert auch die Unterstützung für Postfix "Mail senden -bv" und "sendmail -v" Befehle, die Berichte darüber erzeugen, wie Postfix liefert Mail und ist mit Postfix Version 2.1 verfügbar und später. Siehe DEBUG_README zum Beispiel.
aufräumen(8) -> qmgr (8) Postfix Warteschlange -> Lieferung Agenten
^ | | in | in
(Nicht-) Lieferung Notiz <- prall(8) aufschieben(8) Spur(8) <- Warteschlange Ich würde, Empfänger, Status
^ | | in
Pro- Botschaft logfiles
  • Die flush(8) -Server führen Protokolle pro Ziel und Implementieren Sie sowohl ETRN als auch "sendmail -qRdestination", wie beschrieben im ETRN_README . Dies verschiebt ausgewählte Warteschlangendateien aus die Warteschlange zurück zur eingehenden Warteschlange und fordert deren Lieferung. Der flush(8) -Dienst ist mit der Postfix-Version verfügbar 1.0 und höher.
eingehend ^ aufgeschoben
^ |
smtpd(8) sendmail(1) nach(1) - Ziel spülen -> bündig(8) <- Aufgeschoben Ziel, Warteschlange Ich würde - Lieferung Agenten, qmgr (8)
^ | | in
Pro Ziel- nation Protokolle
  • Die Proxymap(8) -Server bieten Read-Only und Read-Write Tabellensuche Dienst für Postfix-Prozesse. Dies überwindet Chroot-Einschränkungen, reduziert die Anzahl der offenen Nachschlagetabellen, indem eine geöffnete gemeinsam genutzt wird Tabelle zwischen mehreren Prozessen und implementiert Single-Updater Tische.
  • Der scache(8) -Server verwaltet den Verbindungs-Cache für der Postfix smtp(8) -Client. Wenn Verbindungscaching aktiviert ist für ausgewählten Zielen, trennt der SMTP(8) -Client die Verbindung nicht unmittelbar nach einer Mail-Transaktion, sondern gibt die Verbindung zu der Verbindungs-Cache-Server, der die Verbindung offen hält für a begrenzte Zeit. Der smtp(8) -Client fährt mit einigen fort andere E-Mail-Zustellungsanforderung. Inzwischen kann das jeder smtp(8) -Prozess Fragen Sie den scache(8) -Server nach dieser zwischengespeicherten Verbindung und verwenden Sie sie für die Postzustellung. Als Sicherheitsmaßnahme begrenzt Postfix die Anzahl wie oft eine Verbindung wiederverwendet werden kann.
    Beim Zustellen von E-Mails an ein Ziel mit mehreren E-Mail-Servern Verbindungs-Caching kann helfen, einen nicht antwortenden Server zu überspringen, und damit die Lieferung drastisch beschleunigen. Zwischenspeichern von SMTP-Verbindungen ist in Postfix-Version 2.2 und höher verfügbar. Mehr Informationen zu dieser Funktion finden Sie im CONNECTION_CACHE_README .
/-- SMTP(8) --> Internet
qmgr (8) | | | | v
  \-- SMTP(8)  
  ^ |
schach(8)

Ein Postfix smtp(8) -Client kann eine TLS-verschlüsselte Verbindung wiederverwenden (mit " smtp_tls_connection_reuse = yes"). Dies kann stark reduzieren den Overhead des Verbindungsaufbaus und verbessert die Nachrichtenübermittlung Preise. Nachdem ein Postfix smtp(8) -Client eine Verbindung zu einem entfernten SMTP herstellt server und sendet Klartext-EHLO- und STARTTLS-Befehle, die smtp(8) Client fügt wie gezeigt einen tlsproxy(8) -Prozess in die Verbindung ein unter.

Nachdem die E-Mail-Transaktion abgeschlossen ist, wird der Postfix- smtp(8) -Client gibt die smtp(8) -to -tlsproxy(8) -Verbindung zum scache(8) Server, der die Verbindung für eine begrenzte Anzahl offen hält Zeit. Der smtp(8) -Client fährt mit einer anderen Mail-Zustellung fort Anfrage. Inzwischen kann jeder Postfix smtp(8) -Client den scache(8) Server für diese zwischengespeicherte Verbindung und verwenden Sie sie für die E-Mail-Zustellung erneut.

/-- SMTP(8) --> tlsproxy(8) --> Internet
qmgr (8) | | | | v
  \-- SMTP(8)  
  ^ |
schach(8)
Ausgabe <- mailq (1) Post- Warteschlange(1) <- showq(8) <- Postfix Warteschlange
  • Die spawn(8) -Server führen auf Anfrage Nicht-Postfix-Befehle aus, mit dem Client, der über Socket oder FIFO mit dem Befehl verbunden ist Standard-Eingabe-, Ausgabe- und Fehlerströme. Sie finden Beispiele für seine Verwendung im SMTPD_POLICY_README .
  • Der tlsmgr(8) -Server wird ausgeführt, wenn TLS (Transport Layer Sicherheit, früher bekannt als SSL) ist in Postfix smtp(8) aktiviert Client oder smtpd(8) -Server. Dieser Prozess hat zwei Aufgaben:
    • Pflegen Sie den Pseudo-Zufallszahlengenerator (PRNG). wird verwendet, um die TLS-Engines im Postfix smtp(8) -Client oder smtpd(8) Serverprozesse. Der Zustand dieses PRNG wird periodisch gespeichert eine Datei und wird gelesen, wenn tlsmgr(8) startet.
    • Pflegen Sie den optionalen Postfix smtp(8) -Client oder smtpd(8) Server-Caches mit TLS-Sitzungsschlüsseln. Gespeicherte Schlüssel können sich verbessern Leistung durch Reduzierung der Berechnungsmenge zu Beginn von eine TLS-Sitzung.

TLS-Unterstützung ist in Postfix Version 2.2 und höher verfügbar. Informationen zur Postfix-TLS-Implementierung finden Sie in TLS_README dokumentieren.

Netzwerk -> smtpd(8)   <---Samen--- <-Sitzung-> tlsmgr(8)   ---Samen---> <-Sitzung-> SMTP(8)   -> Netzwerk
/
/
| |


\
\
smtpd Sitzung Zwischenspeicher PRNG Zustand Datei smtp Sitzung Zwischenspeicher
  • Der verify(8) -Server überprüft, ob es sich um einen Absender oder Empfänger handelt Adresse zustellbar ist, bevor der smtpd(8) -Server sie akzeptiert. Das Der verify(8) -Server fragt einen Cache mit den Ergebnissen der Adressüberprüfung ab. Wenn kein Ergebnis gefunden wird, fügt der verify(8) -Server eine Sonde ein Nachricht in die Postfix-Queue und verarbeitet die Statusaktualisierung ab ein Zustellungsagent oder Warteschlangenmanager. Dieser Vorgang ist in der ADDRESS_VERIFICATION_README dokumentieren. Der Verify(8) -Dienst ist mit der Postfix-Version verfügbar 2.1 und höher.
  -> Sonde Botschaft -> Postfix Post Warteschlange
Netzwerk -> smtpd(8) <-> verifizieren(8)
| in
<- Sonde Status <- Postfix Lieferung Agenten -> Lokal -> Netzwerk
  ^ | in
 
  Adresse Überprüfung Zwischenspeicher
  • Der postscreen(8) -Server kann Postfix "vor" gestellt werden smtpd(8) -Prozesse. Sein Zweck ist es, Verbindungen von der zu akzeptieren Netzwerk und um zu entscheiden, mit welchen SMTP-Clients kommuniziert werden darf Postfix. Laut dem Jahresbericht 2008 von MessageLabs sind 81 % der alle E-Mails waren Spam und 90 % davon wurden von Botnets gesendet; bis 2010, diese Zahlen waren 92 % bzw. 95 %. Während Postscreen(8) hält die Zombies fern, es bleiben mehr smtpd(8) -Prozesse verfügbar für seriöse Kunden.
    postscreen(8) verwaltet eine temporäre Zulassungsliste für Clients, die seine Tests bestehen; indem zugelassenen Clients erlaubt wird, Tests zu überspringen, postscreen(8) minimiert seine Auswirkungen auf den legitimen E-Mail-Verkehr.
    Der postscreen(8) -Server ist mit Postfix 2.8 und verfügbar später. Um die Implementierung einfach zu halten, postscreen(8) -Delegates DNS Allow/Denylist-Lookups für dnsblog(8)-Serverprozesse und delegiert die TLS-Verschlüsselung/Entschlüsselung an tlsproxy(8)-Serverprozesse . Diese Delegierung ist für den Remote-SMTP-Client unsichtbar.
Zombie
\
Zombie - tlsproxy(8) - - smtpd(8)
\ /
Sonstiges --- Postscreen(8)
/ \
Sonstiges - - smtpd(8)
/
Zombie
  • Der postlogd(8) -Server bietet eine Alternative zu Syslog Protokollierung, die die Standardeinstellung bleibt. Diese Funktion ist verfügbar mit Postfix Version 3.4 oder höher und unterstützt die folgenden Modi:
    • Protokollierung in Datei, die ein Usability-Problem mit adressiert MacOS und eliminiert Informationsverluste, die durch systemd-Ratenbegrenzungen verursacht werden.
Befehle oder Dämonen  
-> postlogd(8) -> /Pfad/zur/Datei
 
  • Protokollierung auf stdout, wodurch eine Syslog-Abhängigkeit beseitigt wird wenn Postfix in einem Container läuft.
Befehle oder Dämonen   stdout geerbt von "postfix start-fg"
-> postlogd(8) ->
 

Siehe MAILLOG_README für Details und Einschränkungen.