Wie man die DNS-Lookups unterbindet

Sendmail ist von Natur aus extrem neugierig. Daran ist eigentlich nichts auszusetzen, es sei denn, der nächste erreichbare Domain-Name-Server liegt hinter einer Wählleitung und die Einwahl kostet jedesmal wenigstens sechs Pfennig.

Im Wesentlichen hat Sendmail drei Gründe, den DNS zu bemühen:

  1. Host Name Canonification - Wenn Sendmail einen Rechnernamen vorgesetzt bekommt, versucht er in der Regel, dessen kanonischen Namen heraus zu finden. Das ist sinnvoll, weil ja normalerweise nur kanonische Namen in Mailertabellen und vergleichbarem stehen.
  2. MX-Record Lookup - Wenn Sendmail entscheidet, wohin eine Mail gehen soll, und er hat keine ausdrückliche Anweisung, etwa aus einer Mailertable, so fragt er den DNS nach dem MX-Record des Ziel-Hosts. So erfährt er die nächste Station, an die die Mail geschickt werden sollte.
  3. Interface Probing - Sendmail sollte jeden Namen des eigenen Rechners kennen. Um dem Admin dabei zu helfen, ermittelt Sendmail die IP-Adressen aller vorhandenen Netzwerkinterfaces und versucht über ein Reverse-Lookup den zugehörigen Namen zu erfahren.

Der letzte Punkt ist mit Abstand der nervigste. Jedesmal, wenn Sendmail startet, kontaktiert es den DNS. Das heißt, jedesmal, wenn eine Mail eingeliefert wird (per UUCP oder von einem lokalen Programm), wählt sich entwerder der Rechner ins Netz ein oder Sendmail wartet auf ein Timeout. Die Krönung dieses Leidens sind die Startup-Skripte der (nicht mehr existenten) DLD (Deutsche Linux Distribution): Sendmail wird gestartet, kontaktiert den DNS, was aber nicht geht, weil das ISDN-Subsystem noch nicht initialisiert ist. Sendmail kommt aber nicht mehr dazu, vom Timeout zu erfahren, weil das Skript vorher die Geduld verliert und Sendmail wieder beendet.

Es gibt es generelle und eine spezielle Lösung des Problems. Zunächst die generelle: Man beschaffe sich einen Nameserver. Bind ist eine Möglichkeit dafür. Dann muss man allerdings auch noch Bind administrieren. Es gibt auch Nameserver, die nur Caching anbieten. Gute Erfahrungen habe ich mit PDNSD, dem Persistent Name Service Caching Daemon, gemacht.

Die spezielle Lösung ist, Sendmail seine Neugier auszutreiben. Die Maßnahmen in der gleichen Reihenfolge wie oben:

  1. Canonification läßt sich abschalten. Dazu gehören in das Configfile mit den M4-Makros die Statements
    define(`confDONT_EXPAND_CNAMES',`True')
    FEATURE(nocanonify)
    
  2. MX-Lookup schaltet man implizit ab, indem man Sendmail immer eine Information über die Mailroute gibt. Das heißt, man trägt alles, was man weiß, in die Mailertable ein und verwendet für den Rest einen Smarthost. Dann geht alles, was Sendmail nicht routen kann, an dieselbe Adresse. Typischerweise ist das der Mailserver des Internetproviders - dafür ist er ja da. In der Config sieht das so aus:
    define(`SMART_HOST',`smtp:studserv.uni-leipzig.de')
    FEATURE(mailertable,`hash -o /etc/mailertable')
    
  3. Interface-Probing kann man auch abschalten. Das Problem ist hier wohl eher, dass man das erstmal wissen muss. Eine Zeile im Makrofile spart endlos Nerven:
    define(`confDONT_PROBE_INTERFACES',`True')
    


© 05/2001 Marvin