Postfix: Timeout after DATA / lost connection

Wenn ausgehende E-Mails nicht versendet werden, im Logfile Fehlermeldungen wie „Timeout after DATA“ zu finden sind und dann auch ggf. noch zu beachten sind, daß vor allem größere Mails betroffen sind, dann ist die Diagnose schnell klar: Die Admins der Firwall sind übers Ziel hinausgeschossen.

ICMP in Firewalls darf nicht pauschal verboten werden

In fast allen diesen Fällen läßt sich die Ursache auf folgendes Problem zurückführen: Die Firewall blockt pauschal eingehende ICMP-Pakete, obwohl einige davon unverzichtbar und auch nicht böse :-) sind. Dadurch werden dann jedoch auch die sinnvollen und erwünschten (und notwendigen) ICMP-Pakate „fragmentation needed“ geblockt. Mit diesen ICMP-Paleten können Router auf dem zwischenweg dem sendenden Host mitteilen, daß er eine zu große Paketgröße (MTU) gewählt hat und kleinere Pakete senden muß. Gehen diese ICMP-Meldungen verloren, „friert“ die Verbindung aus Sicht des sendenden Servers ein: Er hat IP-Pakete ausgesandt und erhält (scheinbar) plötzlich keinerlei Antwort mehr. Daß seine IP-Pakete verloren gehen und er kleinere Pakete senden müßte, erfährt er Dank seiner Firewall nicht… Postfix rennt in einen Timeout und das ganze endet im Logfile mit:

Sep 26 14:45:30 mail postfix/smtpd[12106]: timeout after DATA from
mail.example.com[xxx.xxx.xxx.xxx]

Das Szenario im Überblick

Der sendende Server hat eine normal große MTU-Paketgröße von 1500. Auf dem Zwischenweg zum Zielsystem ist eine kleinere MTU notwendig: Beispielsweise 1.492 oder etwas noch kleineres. Das tritt typischerweise dann auf, wenn das Zielsystem über Business-SDSL, Kabelmodem o.ä. angebunden ist. Insofern tritt das hier geschilderte Phänomen typischerweise auch nur bei bestimmten Gegenstellen auf, während die Verbindungen ansonsten größtenteils normal funktionieren. Die nun zurückgesandten ICMP-Pakete „fragmentation needed“ gehen verloren — und die Verbindung friert ein.

Schnelle Abhilfe als Workaround / Test

Als schneller Hack und Workaround kann man auf dem Postfx-Mailserver die MTU-Paketgröße heruntersetzen. Nur als schneller Test, auf irgendwas absurd geringes wie beispielsweise 1.250.

ifconfig eth0 mtu 1250

Die geschilderten Probleme sollten damit schlagartig aufhören, die Meldungen im Log ausbleiben. Damit wäre dann schon der Beweis für das hier geschilderte Problem erbracht („q.e.d.“ :-)). Eine derart geringe MTU ist natürlich nicht sinnvoll und wünschenswert — und löst auch nicht wirklich das Problem, zumal auch andere Dienste wie Webserver ganz analog die gleichen Probleme haben, nur fällt es dort dem Betreiber selten auf. Zur wirklichen Lösung müssen also die Firewall-Admins ran und müssen prüfen, welche eingehenden ICMP-Regeln sie gesetzt haben.

ICMP erlauben!

Folgende ICMP-Pakete sollten auf Firewalls durchaus erlaubt sein:

  • ICMP Unreachable
  • ICMP Unreachable, Fragmentation Needed
  • ICMP Time Exceeded in Transit

Je nachdem, auf welcher Seite die Verbindung einfriert, ist in unserem Postfix die Meldung „Timeout after DATA“ mal vom smtpd (eingehende E-Mails, Verbindung fror ein — haben wir ausgehende ICMPs geblockt?) oder vom smtp (ausgehende Mails — haben wir eingehende ICMPs geblockt?) zu finden.

Dieser Beitrag wurde unter Blog, Howtos, Mailserver abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.