Postfix ist von grundauf schon recht schnell. E-Mails werden in einer Queue abgelegt und dort entsprechend der Reihe nach abgearbeitet, dennoch gibt es auch hier und dort gewisse Optimierungen, um zum Beispiel beim Versand von Newslettern etwas schneller zu sein. Wir möchten hierbei aber auch darauf hinweisen, dass manche dieser Einstellungen dazu führen, dass Mechanismen von Postfix außer Kraft gesetzt werden, die dafür da sind den Server vor Überlastung zu bewahren. Daher sollte man schon wissen was genau man macht und nicht alles kopieren, ohne sich Gedanken gemacht zu haben, was es bewirkt.
Fangen wir an, bei der Annahme neuer E-Mails. Standardmäßig akzeptiert Postfix je Prozess neue Mails, bevor diese intern weiter verarbeitet werden. Um diese Zahl zu erhöhen, kann man einfach die Anzahl der Prozesse erhöhen – per Default sind 100 gesetzt. Dies passiert mit folgendem Parameter:
default_process_limit = 150
Dieser Erhöht wohlgemerkt jegliche Prozesse von Postfix, möchte man diese genauer steuern, kann man diese in der master.cf ebenfalls anpassen. Man sollte jedoch immer die Auslastung des Systems im Auge behalten, beispielweise mit Icinga oder um direkte Vergleiche zu sehen mit Graphite, da man unter Umständen den Server überlastet. Daher sollte dieses Limit Schrittweise erhöht werden.
Danach schauen wir uns die Annahme des Postfix etwas genauer an. Hier gibt es zwei Anlaufstellen, die man sich etwas genauer ansehen sollte. Zum einen kommt hier tar pitting zum Einsatz, dem ein oder anderem sicher ein Begriff. Im Grunde wird dabei die Kommunikation zwischen Server und einem unerwünschten Client künstlich verlangsamt. Dies führt dazu, dass der fehlerhafte Client, oder ein Spammer nicht einfach so den Server überlasten kann. Dennoch bleibt der Postfix Prozess dadurch blockiert. Da wir annehmen, dass wir dem Client vertrauen – zum Beispiel, da die Mails auch nur in einem internen Netzwerk angenommen werden, deaktivieren wir dieses Feature:
smtpd_error_sleep_time = 0
Zum anderen wird die Annahme neuer Mails ebenfalls begrenzt, wenn ein Client zuviele Connections öffnet. Dies ist durchaus gut im Normalfall, in unserem speziellen Fall wollen wir jedoch auch diesen Wert deaktivieren, da alle Connections angenommen werden sollen. Zum anderen deaktivieren wir auch das Throttling neuer Verbindungen des clients.
smtpd_client_connection_count_limit = 0
smtpd_client_connection_rate_limit = 0
Damit nehmen wir nun alles an, egal wieviel kommt, damit alle Prozesse ausgelastet werden und verzögern auch keine neuen Verbindungen.
Kommen wir zum Versand an die selbe Domain. Vor allem bei Newslettern ist es oftmals der Fall, dass gleich mehrere tausend Empfänger die selbe Domain betreffen, wie Beispielsweise gmail.com. Während Postfix nun mit mehreren hundert Prozessen laufen kann, ist es jedoch nicht anzuraten den Mailserver der Empfänger mit mehreren hundert Verbindungen zu penetrieren. Dafür sind die folgenden Einstellungen wichtig:
initial_destination_concurrency = 5
default_destination_concurrency_limit = 20
Dabei handelt es sich um die Defaultwerte, man kann hier mit default_destination_concurrency_limit etwas “spielen”, damit Beispielsweise mehr Mails in einem Schwung an eine Domain verschickt werden, kann man diesen Wert erhöhen. Oftmals wird auch davon gesprochen die Queue einfach öfter abzuarbeiten, als per Default gesetzt ist. Mechanismen wie Greylisting verhindern jedoch, dass diese Einstellung einen großen Effekt erzielt, da die Mail vom empfangenden Mailserver widerum abgelehnt werden würde.
Anschließend kann man die aktiven Einstellungen per postconf überprüfen. Möchte man noch einige Sekunden mehr gewinnen, kann man sich auch noch Gedanken machen, ob ein Caching Nameserver dies ermöglichen kann, damit Anfragen optimiert werden können.

0 Comments