Sendmail Überblick & Fehlerkorrektur

Aus aktuellem Anlass und da ich vor kurzem selbst einige Probleme mit dem Versand von E-Mails via Sendmail hatte, möchte ich an dieser Stelle kurz eine Zusammenfassung samt Lösung verschiedener Probleme von Sendmail ansprechen.

Sendmail

Sendmail bezeichnet ein Programm welches oft im Zusammenhang mit der Einrichtung eines Mailserevers auf Basis von Linux assoziiert wird, da es es hierbei um eine der Standardkomponenten eines Mailservers handelt. Sendmail ist ein Mail Transfer Agent (MTA) welcher im Zusammenspiel mit einem Mail User Agent (MUA) ausgehende E-Mails weiterleitet jedoch auf der anderen Seite auch eigehende E-Mails entgegen nimmt und für die zustellung zum jeweiligen Benutzer zwichenspeichert, bis das diese vom  Mail Delivery Agent (MDA) an  das entsprechende Benutzerkonto zustellt werden.

Die Geschichte von Sendmail reicht bis in die frühen 1980er Jahre zurück, leider zählt die Konfiguration von Sendmail heute zu einer der schwierigsten Aufgaben im Bereich der UNIX Serververwaltung, was hauptsächlich darin begründet liegt, das Sendmail viele Altlasten mit sich führt, die historisch gesehen vielleicht nachvollziehbar jedoch nicht mehr Zeitgemäß sind.

Was man zu E-Mails wissen muss

Grundsätzlich ist es hilfreich eine Idee zu haben, wie der Versand und der Empfang von E-mails funktioniert. Dies grenzt nicht nur mögliche Fehlernquellen ein, sondern versetzt einen auch in die Lage erhaltende Vehlermeldungen besser zu verstehen und zu interpretieren.

Wenn es um den Versand von E-Mails geht spricht man weitläufig über das SMTP Protokoll da dieses den Mailversand und -transport beschreibt. Generell kann man die Zustellung bzw. den Versand von E-Mails auf Basis des folgenden Ablaufes beschreiben.

  1. Ein Client schickt eine SMTP Anfrage an den Quell Mailserver. (hier email1.de)
  2. Mailserver fragt beim DNS Server nach dem Mail eXchanger Record (MX-Record). (hier dns.server.de)
  3. Der DNS Server liefert den MX-Record samt Prioritätenliste von Zielservern (ziel.com)
  4. email1.de sendet die E-Mail nacheinander an alle Mailserver ziel.com (gemäß MX-Record) bis einer die E-Mail annimmt.
  5. Der Ziel-Mailserver speichert die E-Mail bis das der Benutzer diese abruft.

Auf dieser Grundlage kann man den E-Mail Verkehr grob in 4 Teilbereiche zerlgen.

  1. SMTP Relay Server (Smarthost)
  2. Mail Transport Agent (MTA) z.B. Sendmail
  3. Mail Delivery Agent (MDA) z.B. Procmail
  4. Mail User Agent (MUA) z.B. Outlook

Im nachfolgenden konzentrieren wir uns ensprechend dem Beispiel auf den Mail Transport Agent.

Wichtiges rund um Mail mit Linux

Jedes auf UNIX/Linux basierende System hat zwei verschiedene Mail-Verzeichnisse . Zum einen ein Verzeichnis für ausgehende Mails (Warteschlange)

# Betrachten der Mail Warteschlange

nano /var/spool/mqueue
# oder
nano /var/mqueue

zum anderen ein Verzeichnis zum Speichern ankommender E-Mails für alle Benutzer.

# Anzeige Mailordner aller benutzer

ls -l /var/spool/mail

Natürlich arbeiten sowohl Mail user Agent (MUA) als auch Mail Transport Agent (MTA) mit diesen beiden Verzeichnissen. (Der vollständigkeit halber soll an dieser Stelle jedoch noch darauf hingewiesen werden das andere Konfigurationen – und damit auch andere Verzeichnise – möglich sind.)

Beispiel Versand von E-Mails:

  • Benutzer Horst (horst@meinserver.de) schickt eine E-Mail an seinen Kollgen Hans (hans@seinserver.de).
  • Die E-Mail wird vom Mail User Agent (MUA) samt allen Informationen (auch den Headerinformationen) in das Spoolverzeichnis für augehende E-Mails gelegt.
  • Der Mail Transport Agent (MTA) arbeitet diese Warteschlange in regelmäßigen Abständen ab und schickt diese E-Mail ins Internet (oder an das SMTP Relay)

Beispiel Empfang von E-Mails:

  • Benutzer Hans (hans@seinserver.de) schreibt seinem Kollegen Horst (horst@meinserver.de) eine Antwort E-Mail.
  • Die ankommende E-Mail wird vom Mail Transport Agent (MTA) angenommen und an den Mail Delivery Agent (MDA) übergeben.
  • Der Mail Delivery Agent (MDA) teilt dem Mail Transport Agent (MTA) mit wo die E-Mail gespeichert werden muss
  • Der Mail Transport Agent (MTA) speicher die Mail in /var/spool/mail/horst
  • Horst ruft die neue E-Mail mit einem Mail User Agent (MUA) ab.

Warum tut man sich sowas an?

Der große Vorteil darin den Versand und den Empfang von E-Mails auf diese Art zu regeln liegt darin, das Sie integraler Bestandteil des Betriebssystems sind. Normalerweise verwendet Linux zum Anzeigen neuer E-Mails biff oder xbiff, welche ebenfalls auf diese beiden Verzeichnisse zugreifen und damit dem Benutzer sehr anwenderfreundlich über neue E-Mails informieren. Der Clou daran ist jedoch, das auf Basis dieser Umsetzung auch Systemprogramme wie etwa cron oder at ihre Ausgaben als Mail an den Benutzer schicken können.

Zum anzeigen der aktuellen Warteschlange (insofern man nicht in das Verzeichnis schaut) existiert der Befehl mailq, der jedoch nur eine symbolische Verlinkung auf Sendmail ist.

Probleme / Fehler

Da es je nach Einsatzbereiche sehr viele Konfigurationsmöglichkeiten von Sendmail gibt, möchte ich an dieser Stelle gar nicht weiter auf die Konfiguration als solches eingehen, weswegen ich direkt beschreibe was man gegen typische oder atypische Probleme unternehmen kann, die einem an so manchem Tag in den Wahnsinn treiben.

E-Mail versand dauert extrem lange und nichts kommt an:

Einer der naheliegensten Probleme die auftreten können ist wenn man Sendmail im Zusammenahng mit einem externen SMTP Relay verwenden möchte. (D.h. der zugrunde liegende Linuxserver nicht gleichzeitig auch als Mailserver für den Postausgang fungiert.) Die entsprechene Einstellung die für die Angabe des externen SMTP Relays angegeben werden muss ist:

# "Smart" relay host (may be null)
DS192.168.0.1

Die IP des SMTP Relays (hier im Beispiel 192.168.0.1) muss vom Administrator selbst eingetragen werden. Auch wenn diese Einstellungen völlig korrekt gesetzt wurden kann es durchaus passieren, das der Mail Verdsand trotzdem nicht funktioniert. Eine genaue Ursache für dieses Problem ist mir bislang jedoch noch nicht bekannt, die Lösung jedoch schon.

# Die nächste Zeile ändern
DS192.168.0.1
# In nachfolgende Zeile
DS[192.168.0.1]

E-Mails werden versendet, aber mit flascher Mail Adresse:

Es kann durchaus vorkommen, das beim Senden einer E-Mail die falsche bzw. systemspezifische E-Mail Adresse raus geschckt wird. Auf eine solche Adresse kann dann natürlich niemand Antworten. Wenn Sie z.B. eine Statusmail an eine externe E-Mail Adresse schicken, könnte der Absender zum Beispiel folgende E-Mail Adresse haben root@meinserver.local.

Um dieses Problem zu beheben ist es wichtig  zu verstehen, das die E-Mail Adresse mit der eine E-Mail raus geschickt wird, keineswegs immer die E-Mail Adresse des eigentlichen Benutzers ist. Es ist zum Beispiel möglich einen vollständig funktionstüchtigen Mailserver aufzusetzten, bei dem jeder User nur eine E-Mail Adresse des lokalen Systems hat. Damit die Kommunikation nach extern jedoch sauber funktioniert müssen diese E-Mail Adressen maskiert werden, dies können Sie wie folgt tun.

nano /etc/mail/genericstable

root     Name@Domain.Endung

# Beispiel

horst    horst@meinserver.de

 

Mails werden intern aber nicht extern zugestellt:

Manchmal kann es vorkommen, das E-Mails nur intern aber nicht extern verschickt werden. Als ich das erste mal auf dieses Problem stieß dachte ich es würde an der Konfiguration des SMTP Relays liegen, jedoch lag der Fehler woanders. Prinzipiell versucht Sendmail zunächst einmal den Namen des eigenen Hosts aufzulösen.

Diesen Namen kann man sehr schnell mit dem Befehl “hostname” herausfinden. Sendmail generiert in diesem Zusammenhang gerne diese beiden Fehlermeldungen:

nano /var/log/mail.log

sendmail[XXXX]: unable to qualify my own domain name (Name) -- using short name
sendmail[XXXX]: My unqualified host name (Name) unknown; sleeping for retry

diese Meldung beschreibt zugleich 2 Probleme, zum einen kann der eigene Name nicht aufgelöst werden, zum anderen kann der Full Qualified Domain Name (FQDN )nicht gefunden werden. Um dieses Problem zu lösen ändern Sie die konfiguation der Host Datei, so das zu jeder IP Adresse nur noch eine Zeile existiert.

nano /etc/hosts

127.0.0.1     hostname     localhost

In einigen Fällen wird dies das Problem jedoch nicht vollständig beheben. Der Grund dafür ist zweite Fehlermeldung, das kein Full Qualified Domain Name (FQDN ) gefunden werden konnte. Dieses Problem tritt selbst dann auf, wenn Sendmail ein SMTP Relay verwendet (d.h. auch einen externen DNS Server). Ursache für die Fehlermeldung ist, das der kleinste mögliche Full Qualified Domain Name (FQDN ) aus einer Top-Level-Domain, einem Punkt und einem (root)Label bestehen muss. Der Hostname alleine erfüllt diese Kriterien nicht. Warum Sendmail die Überprüfung jedoch nicht vollständig dem Smarthost übergibt ist mir nicht bekannt, jedenfalls lässt sich das Problem wie im folgenden beschrieben lösen.

Lösen lässt sich dieses Problem mit einem psdeudo Full Qualified Domain Name (FQDN ).

nano /etc/hosts

127.0.0.1     hostname.hostname

 

 

Schlusswort:

Meine ersten Erfahrungen mit Sendmail waren mitunter sehr lehrreich, weswegen ich mich dazu entschied Sendmail und typische Probleme hier einmal kurz niederzuschreiben. Natürlich freue ich mich über Resonanz oder Verbesserungsvorschläge, die zu einer späteren Erweiterung dieses Artikels führen können.

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.