Linux-Arbeitskreis Hamburg |
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.
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.
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.
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.
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 |
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.
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.