Postfix nach gültigen Emailadressen auf einem Exchangeserver fragen lassen

Häufig wird zwischen Internet und dem internen Mailserver ein Linux mit Postfix eingesetzt, um unerwünschte Viren und SPAM nicht in das Firmennetzwerk gelangen zu lassen.

Postfix Mailproxy

Oft wird dabei eingestellt, dass alle Emails für die interne Domäne angenommen und an den internen Emailserver weiter geleitet werden, da Postfix die gültigen Emailadressen des internen Emailservers nicht kennt. Daraus ergeben sich jedoch zwei Probleme:

  1. Es werden auch Viren und SPAM für ungültige Emailadressen angenommen und untersucht, was unnötige Resourcen verbraucht.
  2. Es werden unnötige Unzustellbarkeitsbenachrichtigungen erzeugt, welche die Warteschlange im Mailserver verstopfen. Hinzu kommt, dass diese bei Viren und SPAM oft an falsche Emailadressen gehen. Dadurch werden zum Teil mehrere Zustellversuche unternommen, wodurch die Warteschlange wiederum noch mehr verstopft.

Um diese Probleme zu umgehen muss Postfix in der Lage sein, Emails an ungültige Emailadressen gar nicht erst anzunehmen. Dazu muss es jedoch die Möglichkeit haben, die Gültigkeit einer Emailadresse zu erfragen. Da Exchange ab der Version 2000 die dazu nötigen Informationen im Active Directory speichert, kann dies mit einer LDAP-Anfrage an einen Windows Domänen Controller geschehen. Ab Postfix 2.1 kann dies mit wenigen Zeilen Konfiguration und der Option relay_recipient_maps eingestellt werden. In der Firewall sollten vorher allerdings LDAP-Anfragen von Postfix an mindestens einen internen Windows Domänen Controller erlaubt werden. Dazu müssen Verbindungen des Postfix auf den TCP-Port 389 des Windows Domänen Controllers erlaubt werden.

Mit der Option relay_recipient_maps kann Postfix dazu gebracht werden nur Emails für gültige Emailadressen der eigenen Domäne weiterzuleiten. Bei unbekannten Emailadressen verweigert Postfix die Annahme einer Email mit der Meldung: Recipient address rejected: User unknown in relay recipient table. Diese existierenden Emailadressen können dabei auch über LDAP abgefragt werden, wenn Postfix mit LDAP-Unterstützung installiert ist (bei Debian muss dazu das Paket postfix-ldap installiert sein). Dazu muss man lediglich die folgende Zeile in die Datei /etc/postfix/main.cf einfügen.


relay_recipient_maps = ldap:/etc/postfix/ldap_relay_recipient_maps.cf

Danach muss die Datei /etc/postfix/ldap_relay_recipient_maps.cf mit den Einstellungen für die LDAP-Abfrage angelegt werden. Für die Abfrage der Emailadressen von den Windows Domän Controllern ad-01 und ad-02 der Domäne example.com als Benutzer postfix sollte sie wie folgt aussehen.


server_host = ad-01.example.com
              ad-02.example.com
search_base = dc=example, dc=com
version = 3

bind_dn = CN=postfix,CN=Users,DC=example,DC=com
bind_pw = password

query_filter = (proxyAddresses=smtp:%s)
result_attribute = mail

Die Voraussetzung ist natürlich, dass es einen Benutzer postfix unterhalb Users in der Domäne example.com gibt. Dieser muss jedoch keine Administrationsrechte haben. Es reicht ein normaler Benutzer.

Ob die Konfiguration in der Datei ldap_relay_recipient_maps.cf funktioniert, kann man als root mit dem folgendem Befehl testen.

/usr/sbin/postmap -q "postmaster@example.com" ldap:/etc/postfix/ldap_relay_recipient_maps.cf

Sofern es die Emailadresse postmaster@example.com gibt, sollte diese als Ausgabe erscheinen. Wenn es keine Ausgabe gibt, existiert diese nicht.

Weiter Infos zu dem Thema sind unter den folgenden Links zu finden:

  • Postfix Configuration Parameters, The Postfix Home Page
  • Exchange Server und 3rd Party Antispam Software, Technet Blog von Daniel Melanchthon, Technical Evangelist für Security & Messaging bei Microsoft Deutschland