Select Page

Postfix – Fine tuning für bessere Performance

by | Oct 4, 2017 | Web Services

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.

Fabian Rothlauf
Fabian Rothlauf
Manager MyEngineer

Fabian kehrte nach seinem fünfjährigen Ausflug nach Weimar zurück in seine Geburtsstadt Nürnberg und hat im September 2016 bei NETWAYS als Systems Engineer im Hosting Support angefangen. Der Mopsliebhaber, der schon seit seinem 16. Lebensjahr ein Faible für Adminaufgaben hat, liebt außerdem Grillen, Metal und Computerspiele. An seinem Beruf reizt ihn vor allem die Abwechslung, gute Weiterentwicklungsmöglichketen und dass es selten mal einen Stillstand gibt. Nachdem er die Berufsschulzeit bereits mit Eric und Georg genießen durfte, freut er sich bei NETWAYS nun auf weitere nette Kolleg:innen, interessante Aufgaben und neue Blickwinkel.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

More posts on the topic Web Services

CfgMgmtCamp 2024: Unser Rückblick

Vergangene Woche fuhr ein Teil unseres Teams bei NWS bis nach Ghent in Belgien, um am ConfigManagementCamp 2024 teilzunehmen. Hierbei handelt es sich um eine kostenlose Konferenz, direkt im Anschluss an die FOSDEM, was Jahr für Jahr für ein großes Publikum aus Fans...

Effektive Zugriffskontrolle für GitLab Pages

Grundlagen von GitLab Pages GitLab Pages sind eine facettenreiche Funktion, die es ermöglicht, statische Webseiten direkt aus einem GitLab-Repository heraus zu hosten. Diese Funktionalität eröffnet eine breite Palette von Anwendungsmöglichkeiten, von der Erstellung...

Why We’re Excited About DevOps Camp 2023!

This year, our NETWAYS Web Services Team is highly motivated to participate in DevOps Camp in Nuremberg! After a short break since stackconf in Berlin, we are back at a conference. We are delighted to be able to support DevOps Camp once again. In this article, we...