Postfix verify: lost connection an Exchange 2010 SP1

An neuen Exchange-Systemen 2010 SP1 scheitert die dynamische Empfängerüberprüfung von Postfix mit der Meldung „lost connection with … while sending RCPT TO“. Ursache ist die Tatsache, daß Exchange das Command-Pipelining sehr großzügig handhabt und die Verify-Verbindungen von Postfix vorzeitig trennt.

Im Logfile von Postfix sind die Zieladressen dann plötzlich unzustellbar:

Apr 18 01:11:33 mail postfix/smtp[29299]: CB1223A942: to=<user@example.com>,
relay=exchange.example.com[192.168.10.20]:25,
delay=0.01, delays=0/0/0/0, dsn=4.4.2, status=undeliverable
(lost connection with exchange.example.com[192.168.10.20] while sending RCPT TO)

Debuggt man das ganze, so stellt man fest: Exchange announct Command-Pipelining. Postfix nutzt das natürlich für seine Verify-Mails und sendet die komplette SMTP-Kommandoabfolge in einem Block:

postfix/smtp[29299]: > : MAIL FROM:<address-verify@example.com>
postfix/smtp[29299]: > : RCPT TO:<user@example.com>
postfix/smtp[29299]: > : RSET
postfix/smtp[29299]: > : QUIT

Exchange jedoch arbeitet diese Kommandos nicht in der Reihenfolge ab, sondern nimmt das zuletzt gesendete „QUIT“ als Anlaß dafür, bereits sofort die Verbindung wieder zu kappen, ohne sich um die zuvor gesendeten und sich um die noch in der Pipeline befindlichen Kommandos zu kümmern:

postfix/smtp[29299]: < : 221 2.0.0 Service closing transmission channel

Postfix kann darum nichts mehr verifizieren.

Abhilfe / Workaround

Am besten ist es wohl, Command Pipelining zum Exchange-Server abzuschalten. Das läßt sich leicht über einen passenden Eintrag in der main.cf oder master.cf lösen:

relay     unix  -       -       n       -       -       smtp
          -o smtp_discard_ehlo_keywords=pipelining

Wer ein sauberes Setup aufgebaut hat, sollte eh die Transport-Methode „relay“ zum Exchange nutzen, und darum folgenden Eintrag in der master.cf haben:

smtp     unix  -       -       n       -       -       smtp
          -o smtp_discard_ehlo_keywords=pipelining

Wer das nicht sauber aufgebaut hat und eingehende E-Mails genauso wie für ausgehende E-Mails nur die Transport-Methode „smtp“ nutzt, der muß natürlich den smtp-Eintrag ergänzen. Der Verlust von ausgehendem Command Pipelining ist jetzt auch kein Weltuntergang.

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