Linux-Arbeitskreis Hamburg

Sendmail

Mail Grundlagen

Am Mailtransport sind mehrere Ebenen von Software beteiligt:

Das Zusammenspiel der einzenlnen Agenten bzw. Programme auf dem lokalen Rechner sieht dann folgendermaßen aus.

Sendmail nimmt Mails von anderen Rechnern an (SMTP-Protokoll) und übergibt sie an Procmail zur Verteilung in die lokalen Postfächer. Die lokalen Postfächer sind meist Dateien im Ordner /var/spool/mail, mit dem Namen des zugehöorigen Benutzers (hier Debacher).
Aus diesem Postfach holt der Mail-Client (MUA) die Post ab, meist mit dem Protokoll POP3.
Neu erstellte Mails übergibt der Mail-Client an an Sendmail (SMTP-Protokoll). Die Mails werden meist im Verzeichnis /var/spool/mqeue zwischengespeichert. Diese Zwischenspeicherung ist sinnvoll, weil nicht immer alle Empfänger sofort erreichbar sind, vor allem bei Wählverbindungen. Ich regelmäßigen Abständen kontrolliert Sendmail das Verzeichnis /var/spool/mqueue und versucht die dort lagernden Mails weiter zu leiten. Falls das nicht klappt erezugt Sendmail nach 4 Stunden eine erste Warnmail an den Absender und versucht es dann insgesamt 6 Tage lang, bevor die Mail verworfen wird. In der Regel klappt die Zustellung aber in dieser Zeit.

Mailversand bei Wählverbindungen

Die bisherige Beschreibung gilt eigentlich nur für Rechner, die über eine Standleitung angebunden sind. Bei Rechnern mit Wählverbindungen wird der Ablauf etwas umständlicher, da die Kommunikationspartner nicht ständig zur Verfügung stehen.

Mailabholung mit Fetchmail

In diesem Fall liegt das eigentliche Postfach beim Provider. Über eine PPP-Verbindung holt man von dort dann die Post mit Fetchmail ab und gibt sie in das lokale Mailsystem. Bei der Zustellung in ein Postfach geht ein Teil der Adressinformationen (die X-Header) verloren. Dadurch ist es nach der Abholung mit fetchmail schwierig die Nachrichten lokal zu verteilen, wenn nicht zusätzliche Adressinformationen vorliegen. Diese zusätzlichen Informationen liegen nur bei kanpp 70% der Mail vor, vor allem bei Mails aus Mailinglisten fehlen sie meist. Der Versand der Mails ins Internet hinein ist aber unproblematisch.

Der Mailaustausch per UUCP ist unproblematisch, da hier der Provider die Mails nicht in ein Postfach ablegt, sondern nur in einen zusätzlichen Spoolbereich packt. Die Mails werden hierbei nicht verändert, auch die Header-Informationen nicht. Dafür wird beim Mailempfang Sendmail nicht richtig eingebunden, UUCP scheint die Mails an Sendmail direkt zu übergeben und nicht über den Port 25. Dadurch ist hier kein Viren-Scan der eingehenden Mail mit z.B. Amavis möglich.

Sendmail-Grundlagen

Zur Konfigurationsvereinfachung dient das Programm m4, das die Konfigurationsdatei aus vorbereiteten Makros (m4-Makros) generiert. SuSE hat diesen Teil auch in sein Konfigurationprogramm integriert, so dass auch Einstellungen aus der Datei /etc/rc.config berücksichtigt werden. YaST benutzt ein spezielles m4-Makro um die sendmail.cf zu erzeugen. Dieses Makro findet sich unter /usr/share/sendmail/ostype/suse-linux.m4. Hier lassen sich geringfügige Änderungen der Konfiguration vornehmen. Aus dieser Datei und den Einstellungen in der /etc/rc.config bzw. /etc/rc.config.d/sendmail.rc.config erzeugt YaST dann die eigentliche Konfigurationsdatei.

Im Normalfall kann man sich mit der automatischen Erzeugung der sendmail.cf durch SuSEconfig begnügen. In speziellen Fällen muß man aber die automatische Erstellung deaktivieren, dazu stellt man in der rc.config SENDMAIL_TYPE=no und muß dann mittels:
m4 /etc/mail/linux.mc > /etc/sendmail.cf
die Konfigurationsdatei erzeugen. In der Regel sollte man aber die Erstellung der sendmail.cf an YaST übertragen.

Während der Laufzeit von Sendmail spielt eine Vielzahl von Tabellen eine Rolle, über die die Wege von Ein- und ausgehenden Mails beeinflußt werden können. Diese Dateien befinden sich alle im Verzeichnis /etc/mail/

Bei den meisten Tabellen tauchen zwei Dateien auf, eine lesbare Form (z.B. access) und eine komprimierte Form (access.db). Sendmail wertet nur die komprimierte Form aus, bearbeitet wird die lesbare Form. Nach jeder Änderung an einer derartigen Tabelle muss man also die komprimierte Form neu erzeugen lassen.

Die einfachste (aber etwas zeitaufwendige) Form um dies zu realisieren ist der Aufdruf von:

SuSEconfig

Für die Übertragung der Daten aus der Datei access ist die Unterstützung sogar in Sendmail eingebaut, dazu reicht der Befehl

newaliases

Die Möglichkeiten der Sendmail-Konfiguration sind enorm. Leider gibt kaum gut verständliche Literatur zu diesem Thema.

Server-Konfiguration

Folgende Dateien sind für diese Konfiguration bedeutsam (genauere Beschreibungen folgen noch)
/usr/sbin/sendmail Das Binärfile, welches die eigentliche Arbeit leistet.
/etc/sendmail.cf Die Konfigurationsdatei für Sendmail. Sie ist relativ umfangreich und schwer lesbar, daher wird sie selten direkt bearbeitet.
/etc/mail/aliases Lesbare Version der Datenbank für Mailumleitungen und Mailweiterleitungen. Wird mittels newaliases in die interne Datenbank /etc/mail/aliases.db übersetzt.
/etc/mail/access Liste mit Rechnern bzw. Adressen von denen Mail akzeptiert bzw. abgelehnt wird, mit zugehörigem Fehlercode
/etc/mail/sendmail.cw Optionale Liste der lokalen Domains, falls diese nicht alle in SENDMAIL_LOCALHOST aufgenommen werden sollen.
/etc/mail/virtusertable Zuordnung von kompletten Mail-Adressen (mit Domain-Teil) zu anderen Adressen. Im Unterschied zur aliases wird hier nicht nur der Benutzername ausgewertet, sondern auch der Domainteil.
/etc/mail/relay-domains Für diese nicht lokalen Domains wird Mail angenommen.
/etc/mail/mailertable Versandweg für bestimmte Adressen. Speziell im Zusammenhang mit relay-daomains wichtig.
/etc/mail/genericstable Hiermit können bestimmten lokalen Benutzern spezielle Absenderadressen zugeordnet werden. Gewissermaßen Gegenstück zur virtusertable.
/sbin/conf.d/SuSEconfig.sendmail Dieses Teilprogramm von SuSEconfig erstellt die sendmail.cf. Dazu bedient es sich sich des Programmes m4
/usr/share/sendmail/ostype/suse-linux.m4 Dies ist ein vorbereitetes m4-Makro, das YaST zur Erzeugung der sendmail.cf benutzt.
/var/spool/mqueue/ Verzeichnis mit den auf Zustellung wartenden Mails

Schalter für die SuSE Konfiguration

Will man die sendmail.cf mit den SuSE-Werkzeugen erledigen, so spielen die folgenden Schalter innerhalb der /etc/rc.config eine Rolle:

SENDMAL_TYPE = "yes" / "no"
Steht dieser Schalter auf yes, so übernimmt SuSEconfig die Erstellung der /etc/sendmail.cf, bei no muß man die Erstellung selbst übernehmen.

SENDMAIL_LOCALHOST = "<schule>.hh.schule.de  localhost"
Der eigene Name des Servers, zusätzlich soll man hier auch localhost mit angeben. Will man für mehrere Domains Post akzeptieren, so kann man hier, durch Leerzeichen getrennt, weitere Rechnernamen angeben. Falls die Liste zu lang wird kann man die Einträge auch in die zusätzliche Datei /etc/mail/sendmail.cw auslagern, hier steht dann pro Zeile eine Maildomain.

SENDMAIL_SMARTHOST = "uucp:shuttle"  /  "smtp:mail.hh.shuttle.de"
Hier steht, an welchen Rechner die ausgehende Post geliefert werden soll. Bei uns ist das üblicherweise das UUCP-System, das die Weitergabe übernimmt. Falls man nicht mit UUCP arbeitet, kann man den Eintrag "smtp:mail.hh.shuttle.de" auch weglassen, dann wird die Mail aber direkt an den Empfänger zugestellt, was manchmal recht langwierig ist. Geschickter ist es auf alle Fälle die Mails beim Provider abzuliefern.
Unbedingt notwendig ist das Abliefern von SMTP-Mail beim Provider, wenn man über T-Online eingewählt ist. Ansonsten wird man die Mails an Empfänger bei T-Online nicht los.

SENDMAIL-RELAY = ""
Hiermit kann man Mail generell an einen anderen Rechner weiterleiten, anstatt sie lokal auszuliefern.

SENDMAIL_ARGS = " -bd -q30m -om"
Mit diesen Parametern wird Sendmail gestartet. Der Schalter -bd startet Sendmail als daemon, der im Hintergrund auf Arbeit wartet. Der Schalter -q30m bewirkt, dass Sendmail alle 30 Minuten nach wartender Mail schaut. Wenn man nicht mit UUCP arbeitet kann man diesen Schalter weglassen und den Mailversand durch sendmail -q von Hand oder per Cron-Job auslösen.

SENDMAIL_EXPENSIVE = "yes"  /  "no"
Steht dieser Schalter auf no, so versucht Sendmail eine Mail sofort an den nächsten Rechner weiterzugeben. Steht der Schalter auf yes, so speichert Sendmail die Mail im Ordner /var/mqueue zwischen.

SENDMAIL_NONCANONIFY = "yes"  /  "no"
Steht dieser Schalter auf no, so versucht Sendmail immer den Namen des Empfängerrechners zu verifizieren. Damit werden DNS-Anfragen ausgelöst. Will man diese Anfragen vermeiden, wil man nicht immer online ist, so muß der Schalter auf yes stehen.

Löschen von wartenden Mails

Wenn man mit Sendmail experimentiert, dann entstehen immer mal wieder Mails, die man gern löschen möchte. Ausgehende Mails, die nicht zugestellt werden konnten, sind im Ordner /var/mqueue gespeichert. Dort kann man sie löschen:

rm /var/spool/mqueue/*
Sendmail wehrt sich sonst gegen das Löschen der Dateien.


Kritik, Anregungen und Ergänzungen willkommen. Zusammengestellt von Uwe Debacher und Bernd Burre, letzte Änderung am 27.01.2006
Impressum