E-Mail fehlerhafter Nameserver ablehnen

Abstract

Falsche oder fehlerhafte Angaben zu Nameservern halten den E-Mail-Transport auf. Mit Postfix können wir den Empfang einfach ablehnen.

Wir setzen unbound ein, weil wir für DNSSEC einen lokalen Resolver benötigen und weil unbound einfach gut ist. Umso erstaunter waren wir alle, als uns logcheck diese Woche mit regelmäßigen Meldungen über unbound-Fehler beim Auflösen von Nameservern beglückte:

System Events
=-=-=-=-=-=-=
Mar 31 04:31:21 mail unbound: [1482:0] error: outgoing tcp: connect: Invalid argument
Mar 31 04:31:21 mail unbound: [1482:0] debug: failed address fe80:: port 53
Mar 31 04:31:21 mail unbound: [1482:0] error: serviced_tcp_initiate: failed to send \
    tcp query

Um es kurz zu machen: Der Schuldige war nicht unbound, sondern eine Senderdomain deren Nameserver unter fe80:: erreichbar sein sollte. Unter einer lokalen IPv6-Adresse? Nachvollziehbar, dass unbound den Nameserver nicht erreichen konnte.

Unabhängig davon ob es sich bei der fehlerhaften Nameserver-Angabe um ein Versehen oder einen exotischen abuse-Versuch handelt, wollen wir keine E-Mail von Senderdomains haben, deren DNS broken ist. Einmal angenommen, hängen sie nur ewig in der Queue rum und verursachen Probleme...

Deshalb haben wir in der Datei invalid_ns Filterregeln geschrieben, die die Annahme von Nachrichten ablehnen, wenn der Nameserver der Senderdomain auf einen für unseren Server nicht erreichbaren Adressraum verweist:

Adresse         Aktion
[fe80::]/10     550 No transport for Sender with unreachable NS
127.0.0.0/8     550 No transport for Sender with unreachable NS

Die Tabelle mit den Filterregeln haben wir Postfix in den smtpd_recipient_restrictions übergeben:

smtpd_recipient_restrictions =
    ..
    check_sender_ns_access cidr:$config_directory/invalid_ns
    ..

Und damit unbound nicht mehr erfolglos versuchen muss, fehlerhafte Nameserver zu erreichen, haben wir ihn mit do-not-query-address angewiesen, fe80:: schlichtweg zu ignorieren:

server:
    # The following line will configure unbound to perform cryptographic
    # DNSSEC validation using the root trust anchor.
    auto-trust-anchor-file: "/var/lib/unbound/root.key"
    interface: 127.0.0.1
    do-not-query-address: fe80::/10
Patrick Koetter, 02. April 2014

   Postfix    DNS    Unbound