Copyright © 1996 by O'Reilly/International Thomson Verlag

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches "Linux: Wegweiser durch das Netzwerk" dann klicken Sie hier.


Kapitel 14
smail zum Laufen bringen

Dieses Kapitel enthält eine kurze Einführung zur Einrichtung von smail und eine Übersicht der gebotenen Funktionalität. Obwohl smail von seinem Verhalten her größtenteils kompatibel mit sendmail ist, sind die Konfigurations-Dateien doch völlig unterschiedlich.

Die Haupt-Konfigurationsdatei ist /usr/lib/smail/config. Diese Datei enthält die für Ihre Site spezifischen Werte. Wenn Sie nur eine UUCP-Site betreiben, die keine weiteren Server mit Daten versorgt, bleibt für Sie nicht viel mehr zu tun. Andere Dateien, mit denen die Routing- und Transport-Optionen konfiguriert werden, sind ebenfalls vorhanden und werden kurz besprochen.

Standardmäßig verarbeitet smail die gesamte eingehende Post sofort und liefert sie auch direkt aus. Wenn Sie relativ viel Datenverkehr haben, können Sie smail auch anweisen, alle Nachrichten in der sog. Queue zu speichern und sie nur in regelmäßigen Intervallen zu bearbeiten.

Wenn Sie Mail in einem TCP/IP-Netzwerk verarbeiten, wird smail häufig im Dämon-Modus ausgeführt: Während der Bootphase des Systems wird er aus rc.inet2 heraus gestartet, begibt sich selbst in den Hintergrund und wartet auf eingehende TCP-Verbindungen auf dem SMTP-Port (üblicherweise Port 25). Diese Lösung ist besonders vorteilhaft, wenn Sie mit einem großen Datenvolumen rechnen, weil smail dann nicht für jede eingehende Verbindung separat gestartet werden muß. Alternativ könnte inetd den SMTP-Port überwachen und jedesmal smail starten, wenn eine Anforderung über diesen Port kommt.

smail besitzt verschiedene Optionen, mit denen Sie sein Verhalten kontrollieren können. Sie an dieser Stelle zu beschreiben, würde wenig Sinn machen. Glücklicherweise unterstützt smail eine Reihe von Standard-Betriebsmodi, die automatisch aktiviert werden, wenn Sie das Programm unter einem besonderen Programmnamen wie rmail oder smtpd aufrufen. Normalerweise handelt es sich bei diesen Aliases immer um symbolische Links auf smail selbst. Sie werden die meisten bei der Besprechung der verschiedenen smail-Features kennenlernen.

Es gibt zwei Links auf smail, die Sie unter allen Umständen haben sollten: /usr/bin /rmail und /usr/sbin/sendmail.(1) Wenn Sie Nachrichten mit einem Benutzer-Frontend wie elm erstellen und verschicken, wird die Nachricht für die Auslieferung über eine Pipe an rmail durchgereicht, wobei die Empfängerliste in der Kommandozeile mit übergeben wird. Dasselbe geschieht mit Mail, die über UUCP eingeht. Dabei starten einige Versionen von elm /usr/sbin/sendmail anstelle von rmail, d. h. beide müssen vorhanden sein. Befindet sich smail beispielsweise in /usr/local/bin, geben Sie den folgenden Befehl ein:

# ln -s /usr/local/bin/smail /usr/bin/rmail
# ln -s /usr/local/bin/smail /usr/sbin/sendmail
Wenn Sie tiefer in die Details der Konfiguration von smail einsteigen wollen, wenden Sie sich an die Manpages smail(1) und smail(5). Sind diese in Ihrer Linux-Distribution nicht enthalten, finden Sie sie über die smail-Quellen.

UUCP-Setup

Soll smail in einer reinen UUCP-Umgebung benutzt werden, ist die grundlegende Installation einfach. Stellen Sie zuerst einmal sicher, daß die beiden oben besprochenen symbolischen Links auf rmail und sendmail existieren. Wenn Sie SMTP-Batches von anderen Sites erwarten, müssen Sie auch rsmtp als Link auf smail definieren.

Vince Skahans smail-Distribution enthält eine Beispiel-Konfigurationsdatei. Sie heißt config.sample und ist in /usr/lib/smail zu finden. Kopieren Sie sie nach config und überarbeiten Sie sie so, daß die für Ihre Site entsprechenden Werte enthalten sind.

Gehen wir davon aus, daß Ihr System swim.twobirds.com heißt und in den UUCP-Maps als swim registriert ist. Der »Smart Host« ist ulysses. Ihre config-Datei sollte dann folgendermaßen aussehen:

#
# unser Domainname
visible_domain=two.birds:uucp
#
# unser Name bei ausgehenden Mails
visible_name=swim.twobirds.com
#
# ist gleichzeitig auch der UUCP-Name
uucp_name=swim.twobirds.com
#
# unser "Smart Host"
smart_host=ulysses
Die erste Zeile teilt smail mit, zu welcher Domain Ihre Site gehört. Geben Sie die entsprechenden Namen, durch Doppelpunkte voneinander getrennt, hier an. Ist Ihr Sitename in den UUCP-Maps registriert, sollten Sie auch uucp hinzufügen. Erhält smail eine E-Mail, ermittelt es mit dem Systemaufruf hostname Ihren Hostnamen und vergleicht die Adresse des Empfängers mit diesem Hostnamen, wobei nacheinander alle Namen der Liste angehangen werden. Stimmt die Adresse mit einem dieser Namen oder mit dem unqualifizierten Hostnamen überein, wird davon ausgegangen, daß sich der Empfänger auf diesem Rechner befindet. smail versucht daraufhin, die Nachricht an einen Benutzer oder Alias auf dem lokalen Host weiterzuleiten. Anderenfalls wird davon ausgegangen, daß der Empfänger auf einem anderen Host zu finden ist, und die Nachricht wird an einen anderen Host weitergeleitet.

visible_name sollte einen einzelnen, voll qualifizierten Domainnamen für Ihre Site enthalten, der bei ausgehenden Mails verwendet werden soll. Dieser Name wird bei der Generierung der Absender-Adresse aller ausgehenden Mails verwendet. Sie müssen einen Namen verwenden, den smail als einen für den lokalen Host gültigen akzeptiert (z. B. den Hostnamen gemeinsam mit einer der unter visible_domain aufgelisteten Domains). Anderenfalls können Antworten Ihre Site niemals erreichen.

Die letzte Zeile setzt den Pfad, der zum »Smart Host«-Routing verwendet wird (wird im vorangehenden Kapitel beschrieben). Bei diesem Beispiel-Setup leitet smail alle Nachrichten an entfernte Adressen an den sog. »Smart Host« weiter. Der bei Smart_path angegebene Pfad wird dabei als Route zu diesem Host verwendet. Weil Nachrichten mittels UUCP ausgeliefert werden, muß ein System angegeben werden, das Ihrer UUCP-Software bekannt ist. Wie Sie UUCP eine Site bekanntgeben, ist in Kapitel 12, Verwalten von TaylorUUCP beschrieben.

Eine Option wurde bisher noch nicht erklärt, nämlich uucp_name. Der Grund für die Verwendung dieser Option liegt darin, daß smail standardmäßig den von hostname zurückgelieferten Wert für UUCP-spezifische Informationen verwendet, wie beispielsweise den in der From_-Headerzeile vorhandenen Rückgabepfad. Ist Ihr Hostname nicht beim UUCP Mapping Project registriert, sollte smail statt dessen den voll qualifizierten Domainnamen verwenden.(2) Dies können Sie durch Verwendung der Option uucp_name in der config-Datei realisieren.

Eine andere Datei in /usr/lib/smail ist paths.sample. Sie stellt ein Beispiel dafür dar, wie eine paths-Datei aussehen könnte. Allerdings benötigen Sie diese Datei nur, wenn Sie Mail-Links zu mehr als einer Site besitzen. Wenn dies so ist, müssen Sie allerdings Ihre eigene Datei schreiben oder eine aus den Usenet Maps generieren. Die paths-Datei wird später in diesem Kapitel beschrieben.

LAN-Setup

Wenn Sie eine Site mit zwei oder mehreren Hosts betreiben, die über ein LAN miteinander verbunden sind, müssen Sie einen Host bestimmen, der die UUCP-Verbindung mit der Außenwelt hält. Zwischen den einzelnen Hosts in Ihrem LAN werden Sie Mail üblicherweise mit SMTP über TCP/IP austauschen. Wenden wir uns noch einmal unserer virtuellen Brauerei zu, und nehmen wir einmal an, daß vstout als UUCP-Gateway verwendet wird.

In einer Netzwerkumgebung ist es am besten, alle Benutzer-Mailboxen auf einem einzelnen System zu halten, das über NFS an alle anderen Hosts gemountet wird. Das erlaubt es den Benutzern, sich an einer beliebigen Maschine einzuloggen, ohne die Post immer mitnehmen zu müssen (oder, schlimmer noch, jeden Morgen drei oder vier Maschinen nach neu eingegangener Post überprüfen zu müssen). Aus diesem Grund sollte die Adresse des Absenders auch unabhängig von der Maschine sein, auf der sie geschrieben wurde. Es ist gängige Praxis, den reinen Domainnamen in der Adresse zu verwenden und nicht den Hostnamen. Janet beispielsweise würde janet@vbrew.com spezifizieren und nicht janet@vale.vbrew.com. Nachfolgend erklären wir, wie Sie den Server dazu bringen, den Domainnamen als gültigen Namen für Ihre Site zu verwenden.

Eine andere Möglichkeit, alle Mailboxen auf einem zentralen Host zu halten, bietet die Verwendung von POP oder IMAP. POP steht für Post Office Protocol und erlaubt es Benutzern, über eine einfache TCP/IP-Verbindung auf deren Mailboxen zuzugreifen. IMAP, das Interactive Mail Access Protocol, ist ähnlich wie POP, aber etwas allgemeiner gehalten. Clients und Server für IMAP und POP wurden auf Linux portiert und sind auf sunsite.unc.edu unter /pub/Linux/system/Network zu finden.

Schreiben der Konfigurations-Dateien

Die Konfiguration für die Brauerei stellt sich dar wie folgt. Alle Hosts außer dem Mail-Server (vstout) selbst routen alle ausgehende Post an diesen Server mit Hilfe des »Smart Host«-Routing. vstout selbst sendet die gesamte ausgehende Post an den eigentlichen »Smart Host«, der die gesamte Mail der Brauerei routet. Der Host hat den Namen moria.

Die config-Datei für alle Hosts außer vstout sieht also so aus:

#
# unsere Domain
visible_domain=vbrew.com
#
# wie wir uns selbst nennen
visible_name=vbrew.com
#
# Smart Host-Routing: über SMTP an vstout
smart_path=vstout
smart_transport=smtp
Das ist dem sehr ähnlich, was wir für die reine UUCP-Site verwendet haben. Der Hauptunterschied besteht darin, daß für den Transport der zu sendenden E-Mails an den Smart Host nun natürlich SMTP verwendet wird. Durch das Attribut visible_domain verwendet smail den Domainnamen anstelle des lokalen Hostnamens für die gesamte ausgehende Post.

Auf dem UUCP-Mail-Gateway vstout sieht die config-Datei ein wenig anders aus:

#
# unsere Hostnamen
hostnames=vbrew.com:vstout.vbrew.com:vstout
#
# wie wir uns selbst nennen
visible_name=vbrew.com
#
# in der UUCP-Welt sind wir als vbrew.com bekannt
uucp_name=vbrew.com
#
# Smart Transport: über UUCP an moria
smart_path=moria
smart_transport=uux
#
# wir sind für unsere Domain verantwortlich
auth_domains=vbrew.com
Diese config-Datei verwendet ein anderes Schema, um smail mitzuteilen, wie der lokale Host genannt wird. Statt eine Liste mit Domains zur Verfügung zu stellen und den Hostnamen über einen Systemaufruf ermitteln zu lassen, wird eine explizite Liste angegeben. Die obige Liste enthält den voll qualifizierten sowie den unqualifizierten Hostnamen und den Domainnamen selbst. Auf diese Weise erkennt smail janet@vbrew.com als lokale Adresse und liefert die Nachricht an janet aus.

Die Variable auth_domains bestimmt die Domains, für die vstout »verantwortlich« zeichnet. Erhält smail eine an host.vbrew.com adressierte Mail, wobei host aber keine existierende lokale Maschine benennt, lehnt es die Nachricht ab und schickt sie zurück an den Absender. Ist dieser Eintrag nicht vorhanden, wird jede solche Nachricht an den Smart Host zurückgeschickt, der sie wieder an vstout schickt und so weiter. (Glücklicherweise gibt es ein Feature namens Maximum Hop Count, mit dem die Nachricht irgendwann doch ausrangiert wird.) D

smail betreiben

Zuerst müssen Sie entscheiden, ob smail als separater Dämon laufen soll, oder ob inetd den SMTP-Port verwalten soll und smail nur ausführt, wenn eine SMTP-Verbindung von einem Client angefordert wird. Üblicherweise ziehen Sie den Dämon-Betrieb auf dem Mail-Server vor, weil das die Maschine wesentlich weniger belastet als der wiederholte Start von smail bei jeder neuen Verbindung. Weil der Mail-Server auch die meiste eingehende Post direkt an die Benutzer verteilt, wird der inetd-Betrieb für die meisten anderen Hosts gewählt.

Welchen Betriebsmodus Sie für jeden einzelnen Host auch wählen, Sie müssen die folgende Zeile immer in Ihrer /etc/services-Datei stehen haben:

smtp            25/tcp          # Simple Mail Transfer Protocol
Das definiert die TCP-Port-Nummer, die smail zur SMTP-Kommunikation verwenden soll. Port 25 ist der im »Assigned Numbers RFC« definierte Standard.

Im Dämon-Modus geht smail selbständig in den Hintergrund und wartet darauf, daß eine Anforderung auf dem SMTP-Port eingeht. Taucht eine solche Anforderung auf, wird eine SMTP-Kommunikation mit dem anderen Prozeß aufgebaut und durchgeführt. Der smail-Dämon wird normalerweise mit dem folgenden Befehl aus dem rc.inet2-Script heraus gestartet:

/usr/local/bin/smail -bd -q15m
Die Option -bd aktiviert den Dämon-Modus. Mit -q15m werden alle Nachrichten, die in der Queue aufgelaufen sind, alle 15 Minuten bearbeitet.

Wollen Sie statt dessen mit inetd arbeiten, sollte Ihre /etc/inetd.conf die folgende Zeile enthalten:

smtp    stream  tcp nowait  root  /usr/sbin/smtpd smtpd
smtpd sollte dabei ein symbolischer Link auf die smail-Binary sein. Denken Sie daran, daß inetd die inetd.conf erneut lesen muß. Senden Sie ihm nach Durchführung der Änderungen einfach ein HUP-Signal.

Dämon- und inetd-Modus schließen sich gegenseitig aus. Wird smail im Dämon-Modus betrieben, müssen Sie sicherstellen, daß in inetd.conf alle Zeilen für den smtp-Service entfernt wurden. Wird smail dagegen über inetd verwaltet, muß sichergestellt sein, daß in rc.inet2 der smail-Dämon nicht gestartet wird.

Wenn Ihre Mail nicht durchkommt

Eine Reihe von Features sind vorhanden, um die Fehlersuche bei Installations-Problemen zu erleichtern. Überprüfen Sie zuerst die smail-Logdateien. Diese sind in /var/spool/smail/log zu finden und heißen logfile und paniclog. Die erste führt alle Transaktionen auf, während die zweite nur Fehlermeldungen enthält, die mit Konfigurations-Fehlern und ähnlichem zu tun haben.

Ein typischer Eintrag in logfile sieht wie folgt aus:

04/24/94 07:12:04: [m0puwU8-00023UB] received
|            from: root
|         program: sendmail
|            size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] delivered
|             via: vstout.vbrew.com
|              to: root@vstout.vbrew.com
|         orig-to: root@vstout.vbrew.com
|          router: smart_host
|       transport: smtp
Dies zeigt, daß eine Nachricht von root an root@vstout.vbrew.com ordnungsgemäß an den Host vstout über SMTP ausgeliefert wurde.

Nachrichten, die smail nicht ausliefern konnte, erzeugen einen ähnlichen Eintrag in der Log-Datei, statt delivered ist aber eine Fehlermeldung zu sehen:

04/24/94 07:12:04: [m0puwU8-00023UB] received
|            from: root
|         program: sendmail
|            size: 1468 bytes
04/24/94 07:12:04: [m0puwU8-00023UB] root@vstout.vbrew.com ... deferred
 (ERR_148) transport smtp: connect: Connection refused
Der obige Fehler ist typisch für eine Situation, in der smail richtig erkannt hat, daß die Nachricht an vstout ausgeliefert werden soll, aber nicht in der Lage ist, eine Verbindung zum SMTP-Service auf vstout herzustellen. Wenn dies geschieht, haben Sie entweder ein Konfigurations-Problem, oder Ihre smail-Binaries besitzen keine TCP-Unterstützung.

Dieses Problem ist nicht so selten, wie man vielleicht denken könnte. Es sind durchaus einige vorkompilierte smail-Binaries ohne TCP/IP-Unterstützung in Umlauf, sogar in einigen Linux-Distributionen. Wenn dies bei Ihnen der Fall ist, müssen Sie smail selbst kompilieren. Sie können prüfen, ob Ihr smail TCP-Netze unterstützt, indem Sie mit Telnet auf den SMTP-Port Ihrer Maschine zugreifen. Eine erfolgreiche Verbindung zum SMTP-Server sieht so aus:

$ telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 monad.swb.de Smail3.1.28.1 #6 ready at Sun, 23 Jan 94 19:26 MET
QUIT
221 monad.swb.de closing connection
Wenn dieser Test nicht das SMTP-Banner erzeugt (die mit dem Kode 220 beginnende Zeile), sollten Sie auf jeden Fall ganz sicher sein, daß Ihre Konfiguration wirklich korrekt ist, bevor Sie sich an die Neukompilierung von smail wagen, die nachfolgend beschrieben wird.

Tritt ein Problem mit smail auf, das Sie auch durch die von smail generierten Fehlermeldungen nicht lokalisieren können, besteht die Möglichkeit, sich Debugging-Nachrichten ausgeben zu lassen. Sie aktivieren dies durch Verwendung der Option -d. Dieser kann optional eine Zahl folgen, die bestimmt, wie umfangreich die Meldungen sind (zwischen der Option selbst und der Zahl darf kein Leerzeichen stehen). smail gibt dann einen Bericht über seine Operationen auf dem Bildschirm aus, der Ihnen weitere Hinweise auf den Fehler geben kann.

Wenn nichts mehr hilft, können Sie smail mit der Option -bR im Rogue-Modus starten. Die Manpage sagt zu dieser Option: »Enter the hostile domain of giant mail messages, and RFC standard scrolls. Attempt to make it down to protocol level 26 and back.« Wenn diese Option Ihre Probleme auch nicht lösen wird, so mag sie Ihnen doch ein wenig Trost und Beistand spenden. ;-)

smail kompilieren

Wenn Sie sich sicher sind, daß smail keine TCP-Netzwerk-Unterstützung besitzt, müssen Sie sich den Quellkode besorgen. Dieser ist möglicherweise bereits in Ihrer Distribution enthalten. Anderenfalls können Sie sich den Quellkode über FTP aus dem Netz besorgen.(3)

Bei der Kompilierung von smail sollten Sie mit dem Satz von Konfigurations-Dateien aus Vince Skahans newspak-Distribution beginnen. Um den TCP-Netzwerktreiber zu aktivieren, müssen Sie das DRIVER_CONFIGURATION-Makro in der Datei conf /EDITME entweder auf bsd-network oder auf arpa-network setzen. Ersteres ist für LAN-Installationen geeignet, für das Internet wird aber arpa-network benötigt. Der Unterschied zwischen diesen beiden besteht darin, daß arpa-network einen speziellen Treiber für den BIND-Service besitzt, der in der Lage ist, MX-Records zu erkennen, was bsd-network nicht kann.

Mail-Auslieferungsmodi

Wie bereits oben erwähnt, ist smail in der Lage, Nachrichten direkt auszuliefern oder in einer Queue zur späteren Bearbeitung zwischenzuspeichern. Verwenden Sie die Message-Queue, speichert smail alle Nachrichten im messages-Verzeichnis unter /var/spool/smail. Die Nachrichten werden nicht bearbeitet, bis dazu die explizite Aufforderung erfolgt (dies wird auch als »Starten der Queue« bezeichnet).

Sie können einen von drei vorhandenen Auslieferungs-Modi wählen, indem Sie das Attribut delivery_mode in der Datei config einstellen. Die möglichen Werte sind foreground, background oder queued. Damit können Sie die Auslieferung im Vordergrund (direkte Bearbeitung aller eingehenden Nachrichten), im Hintergrund (Die Nachricht wird durch einen Kind-Prozeß des empfangenden Prozesses ausgeliefert; dabei wird der Parent-Prozeß sofort nach dem Start wieder beendet) oder über die Queue wählen. Alle eingehenden Mails werden über die Queue verarbeitet, wenn die Boolesche Variable queue_only in der config-Datei gesetzt ist. Dabei wird der eingestellte Modus ignoriert.

Wenn Sie Queues benutzen, müssen Sie auch sicherstellen, daß sie regelmäßig, sagen wir alle 10 bis 15 Minuten, überprüft werden. Wird smail im Dämon-Modus betrieben, müssen Sie die Option -q10m in der Kommandozeile angeben, damit die Queue alle 10 Minuten abgearbeitet wird. Alternativ können Sie runq aus cron heraus in diesen Intervallen starten. runq sollte ein Link auf smail sein.

Sie können sich die aktuelle Mail-Queue durch Ausführen von smail mit der Option -bp ansehen. Sie können auch einen Link auf smail namens mailq einrichten und mailq aufrufen:

$ mailq -v
m0pvB1r-00023UB  From: root  (in /var/spool/smail/input)
                Date: Sun, 24 Apr 94 07:12 MET DST
                Args: -oem -oMP sendmail root@vstout.vbrew.com
Log of transactions:
 Xdefer: <root@vstout.vbrew.com> reason: (ERR_148) transport smtp:
 connect: Connection refused
Dies zeigt eine einzelne, in der Message-Queue vorliegende Nachricht. Der Transaktionslog (der nur ausgegeben wird, wenn Sie mailq mit der Option -v aufrufen) gibt unter Umständen auch an, warum die Nachricht noch nicht ausgeliefert wurde. Wurde bislang noch kein Versuch unternommen, die Nachricht auszuliefern, wird kein Transaktionslog ausgegeben.

Selbst wenn Sie nicht mit der Queue arbeiten, wird smail gelegentlich Nachrichten in die Queue schieben, nämlich dann, wenn die unmittelbare Auslieferung aus irgendeinem Grund fehlgeschlagen ist. Bei SMTP-Verbindungen könnte der Grund darin liegen, daß der Host momentan nicht erreichbar ist, aber auch, daß dessen Dateisystem gerade voll ist. Daher sollten Sie die Queue ungefähr stündlich ausführen lassen (mit runq), weil sonst solche zwischengespeicherten Nachrichten für immer in der Queue bleiben.

Verschiedene config-Optionen

Hier noch einige nützliche Optionen, die Sie in Ihrer config-Datei eintragen können:
error_copy_postmaster
Ist diese Boolesche Variable gesetzt, wird bei jedem Fehler eine Meldung an den Postmaster erzeugt. Normalerweise tut smail dies nur, wenn es über einen Konfigurationsfehler stolpert. Sie schalten diese Variable ein, indem Sie sie in Ihre config-Datei einfügen und ihr ein Plus (+) voranstellen.

max_hop_count
Wenn der Sprungzähler (Hop Count, d. h. die Anzahl der bereits passierten Hosts) für eine Nachricht größer oder gleich dieser Zahl ist, führt der Versuch, diese Nachricht erneut auszuliefern, zu einer Fehlermeldung, die an den Absender geschickt wird. Auf diese Weise wird verhindert, daß Nachrichten bei der Auslieferung in einer Endlosschleife landen. Der Hop Count wird üblicherweise aus der Zahl der Received:-Felder im Mail-Header ermittelt. Mit der Option -h kann er in der Kommandozeile aber auch von Hand eingegeben werden.

Diese Variable ist auf den Wert 20 voreingestellt.

postmaster
Die Adresse des Postmasters. Kann die Adresse Postmaster nicht in eine gültige lokale Adresse aufgelöst werden, wird diese als letzte Rettung benutzt. Standardmäßig zeigt dieser Wert auf root.

Routing und Auslieferung von Nachrichten

smail teilt die Auslieferung von Mails in drei verschiedene Untersysteme auf: das Router-, Director- und das Transport-Modul.

Das Router-Modul löst alle entfernten Adressen auf und ermittelt dabei, an welchen Host die Nachricht als nächstes weitergeleitet werden soll, und wie der Transport zu erfolgen hat. Abhängig von der Natur des Links, können unterschiedliche Transportmechanismen wie UUCP oder SMTP verwendet werden.

Lokale Adressen werden an das Director-Modul übergeben, das alle Weiterleitungs- bzw. Aliasing-Aufgaben übernimmt. So könnte die Adresse etwa ein Alias oder eine Mailing-Liste sein, oder ein Benutzer könnte seine Mails auf eine andere Adresse umleiten. Ist die ermittelte Adresse nicht lokal, wird sie an das Router-Modul zum weiteren Routing übergeben. Anderenfalls wird sie zur lokalen Auslieferung an das Transport-Modul übergeben. Der bei weitem am häufigsten auftretende Fall ist, daß die Nachricht in eine Mailbox ausgeliefert wird. Nachrichten können aber über eine Pipe auch an einen Befehl übergeben oder an eine bestimmte Datei angehängt werden.

Das Transport-Modul ist dafür verantwortlich, welche Methode der Auslieferung verwendet wird. Es versucht, die Nachricht auszuliefern und erzeugt im Fehlerfall entweder eine Bounce-Nachricht (d. h. die Mail wird an den Absender zurückgeschickt), oder versucht es zu einem späteren Zeitpunkt erneut.

Mit smail haben Sie bei der Konfiguration dieser Aufgaben viele Freiheiten. Für jede steht eine ganze Reihe von Treibern bereit, unter denen Sie sich den benötigten aussuchen können. Sie beschreiben sie smail gegenüber durch eine Reihe von Dateien, nämlich routers, directors und transports, die unter /usr/lib/smail zu finden sind. Sind diese Dateien nicht vorhanden, werden vernünftige Standardwerte als gegeben angenommen, die für viele Sites passend sind, die entweder SMTP oder UUCP für den Transport benutzen. Wollen Sie die Routing- oder Transport-Methode von smail modifizieren, sollten Sie sich die Beispieldateien aus der smail-Source-Distribution(4) besorgen, die Beispieldateien nach /usr/lib/smail kopieren und sie entsprechend Ihren Bedürfnissen anpassen. Schlagen Sie in Anhang B nach.

Nachrichten routen

Trifft eine Nachricht ein, prüft smail zuerst, ob das Ziel der lokale Host oder eine andere Site ist. Ist die Host-Zieladresse einer der lokalen, in config konfigurierten Hostnamen, wird die Nachricht an das Director-Modul übergeben. Anderenfalls leitet smail die Zieladresse an eine Reihe von Router-Treibern weiter, um herauszufinden, an welchen Host eine Nachricht weitergeleitet werden soll. Diese Treiber können in der Datei routers beschrieben werden; falls diese Datei nicht existiert, wird ein Satz von Standard-Routern verwendet.

Der Zielhost wird an alle Router übergeben, und der Router, der die spezifischste Route findet, wird gewählt. Nehmen wir beispielsweise eine an joe@foo.bar.com adressierte Nachricht. Ein Router könnte eine Standard-Route für alle Hosts in der bar.com-Domain kennen, während ein anderer die Information zu foo.bar.com selbst besitzt. Weil letzterer spezifischere Informationen besitzt, würde er gegenüber dem ersten den Vorrang erhalten. Liefern zwei Router ein gleich gutes Resultat zurück, wird derjenige gewählt, der in der Datei routers als erster erscheint.

Der Router spezifiziert nun die zu verwendende Transportmethode, beispielsweise UUCP, und generiert eine neue Zieladresse. Die neue Adresse wird zusammen mit dem Host, an den die Nachricht weitergeleitet werden soll, an das Transport-Modul übergeben. Im obigen Beispiel findet smail heraus, daß foo.bar.com mit UUCP über den Pfad ernie!bert erreicht werden kann. Es generiert dann bert!foo.bar.com!user als neues Ziel und läßt den UUCP-Transport diesen Ausdruck als die an ernie zu übergebende Adresse verwenden.

Wenn Sie das Standard-Setup benutzen, stehen die folgenden Router zur Verfügung:

Die Standardwerte funktionieren für viele einfache Setups, versagen aber, wenn die Anforderungen an das Routing komplizierter werden. Wenn Sie mit einem der nachfolgend beschriebenen Probleme konfrontiert werden, müssen Sie eine eigene routers-Datei installieren, die die Standardwerte überschreibt. Einige Linux-Distributionen werden mit einer Reihe von Konfigurations-Dateien geliefert, die bereits so geändert wurden, daß diese Probleme nicht auftreten. Schlagen Sie in Anhang B nach.

Die größten Probleme ergeben sich, wenn Ihr Host in einer Welt lebt, in der sowohl IP- als auch UUCP-Links gemeinsam existieren. Sie werden dann Hostnamen in Ihrer hosts-Datei besitzen, mit denen Sie sich nur gelegentlich über den SLIP-Link unterhalten. smail wird also versuchen, alle Post für diese Hosts über SMTP auszuliefern. Das ist aber normalerweise nicht das, was Sie wollen, weil selbst wenn der SLIP-Link regelmäßig aktiviert wird, SMTP wesentlich langsamer ist als UUCP. Mit dem Standard-Setup bleibt Ihnen aber keine andere Wahl.

Sie können dieses Problem umgehen, indem Sie dafür sorgen, daß smail die paths-Datei prüft, bevor es den Resolver befragt. Alle Hosts, bei denen Sie die Auslieferung mit UUCP erzwingen möchten, tragen Sie in die paths-Datei ein. Sollen niemals Nachrichten über SMTP übertragen werden, können Sie die Resolver-basierten Router auch ganz entfernen.

Ein weiteres Problem ist, daß das Standard-Setup kein echtes Internet-Mailrouting anbietet, weil der Resolver-basierte Router keine MX-Records verarbeiten kann. Um das Internet-Mailrouting vollständig zu unterstützen, müssen Sie den Standard-Router auskommentieren und dafür den aktivieren, der BIND verwendet. Allerdings existieren in einigen Linux-Distributionen smail-Binaries, die ohne BIND-Unterstützung kompiliert wurden. Wenn Sie BIND aktivieren und in Ihrer paniclog-Datei eine Meldung wie »router inet_hosts: driver bind not found« finden, müssen Sie sich die Sourcen besorgen und smail neu kompilieren (Informationen dazu finden Sie im obigen Abschnitt »LAN-Setup«).

Es ist übrigens keine gute Idee, den uuname-Treiber zu verwenden. Zum einen wird ein Konfigurations-Fehler generiert, wenn Sie UUCP nicht installiert haben, weil der uuname-Befehl dann nicht gefunden werden kann. Ein zweites Problem taucht auf, wenn Sie mehr Sites in Ihrer UUCP-sys eingetragen haben, als Mail-Links vorhanden sind. Das können Sites sein, mit denen Sie nur News austauschen, oder von denen Sie gelegentlich Dateien herunterladen, mit denen ansonsten aber keine weitere Kommunikation stattfindet.

Das erste Problem können Sie umgehen, indem Sie uuname durch ein Shell-Script ersetzen, das einfach nur exit 0 ausführt. Die allgemeinere Lösung besteht aber darin, diese Treiber ganz aus der routers-Datei zu entfernen.

Die paths-Datenbank

smail erwartet, die pathalias-Datenbank in der Datei paths unter /usr/lib/smail vorzufinden. Diese Datei ist optional, d. h. wenn Sie kein pathalias-Routing durchführen wollen, entfernen Sie einfach eine existierende paths-Datei.

Bei paths handelt es sich um eine sortierte ASCII-Datei, die aus Einträgen besteht, die Sitenamen auf UUCP-Bang-Pfade abbilden. Die Datei muß sortiert sein, weil smail Sites über einen binären Suchalgorithmus ermittelt. Kommentare sind in dieser Datei nicht erlaubt, und Sitenamen müssen vom Pfad durch einen Tabulator getrennt sein. pathalias-Datenbanken werden in Kapitel 13, Elektronische Post ausführlicher behandelt.

Wenn Sie diese Datei von Hand erzeugen, müssen Sie darauf achten, daß alle für eine Site gültigen Namen vorhanden sind. Ist eine Site beispielsweise sowohl über ihren reinen UUCP-Namen als auch über ihren voll qualifizierten Domainnamen bekannt, müssen Sie für jeden Namen einen Eintrag einfügen. Die Datei kann sortiert werden, indem Sie sie über eine Pipe durch den sort-Befehl laufen lassen.

Wenn sich Ihre Site nur am Ende des Baums befindet (d. h. eine Leaf-Site ist), sollte überhaupt keine paths-Datei notwendig sein. Setzen Sie einfach die Smart Host-Attribute in Ihrer config-Datei, und überlassen Sie das gesamte Routing dem Server, der Sie mit Mail versorgt.

Nachrichten an lokale Adressen ausliefern

Häufig ist die lokale Adresse einfach der Loginname eines Benutzers. In diesem Fall wird die Nachricht in die Mailbox des Benutzers (/var/spool/mailBenutzername) ausgeliefert. Andere Möglichkeiten sind Aliases und Namen von Mailing-Listen sowie Mail-Weiterleitung (Forwarding) des Benutzers. In solchen Fällen wird die lokale Adresse in eine Liste neuer Adressen umgewandelt, die lokal, aber auch auf einem anderen Rechner liegen können.

Neben diesen »normalen« Adressen kann smail auch mit anderen Arten lokaler Zieladressen wie Dateinamen und Pipe-Befehlen umgehen. Nun sind dies aber keine allgemein gültigen Adressen, d. h. Sie können nicht einfach eine Nachricht an /etc/passwd@vbrew.com schicken. Sie sind nur gültig, wenn sie aus einer Weiterleitungs- oder Alias-Datei stammen.

Alles was mit einem Slash (/) oder einer Tilde (~) beginnt, wird als Dateiname interpretiert. Die Tilde verweist auf das Home-Verzeichnis des Benutzers und kann nur verwendet werden, wenn der Dateiname aus einer .forward-Datei oder aus einem Weiterleitungseintrag in der Mailbox (siehe unten) stammt. Wird eine Nachricht an eine Datei ausgeliefert, wird diese von smail an die Datei angehängt. Existiert die Datei noch nicht, wird sie automatisch erzeugt.

Bei einem Pipe-Befehl kann es sich um jeden UNIX-Befehl handeln, dem ein Pipe-Symbol (|) vorangestellt ist. smail übergibt diesen Befehl dann zusammen mit seinen Argumenten an die Shell, allerdings ohne das führende |. Die Nachricht selbst wird dem Befehl durch die Standardeingabe übergeben.

Um beispielsweise eine Mailing-Liste in eine lokale Newsgruppe einzuspeisen, könnten Sie ein Shell-Script namens gateit verwenden und ein lokales Alias einrichten, das alle Nachrichten aus dieser Mailing-Liste mit Hilfe von »|gateit« ausliefert.

Falls Leerzeichen in der Befehlszeile vorhanden sind, muß der Aufruf in Anführungszeichen stehen. Aus Sicherheitsgründen achtet smail darauf, daß der Befehl nicht ausgeführt wird, wenn die Adresse auf dubiose Weise entstanden ist (beispielsweise, wenn die Alias-Datei, aus der die Adresse stammt, von jedem geschrieben werden kann).

Lokale Benutzer

In den weitaus häufigsten Fällen bezeichnen lokale Adressen die Mailbox eines Benutzers. Die Mailbox ist in /var/spool/mail zu finden und hat den Namen des jeweiligen Benutzers. Sie gehört dem Benutzer, die verwendete Gruppe ist mail, und der verwendete Modus ist 660. Falls sie nicht existiert, wird sie von smail automatisch erzeugt.

Beachten Sie, daß, obwohl /var/spool/mail momentan der Standardort ist, an dem Mailbox-Dateien zu halten sind, manche Mail-Programme andere Pfade, z. B. /usr /spool/mail, verwenden. Falls die Auslieferung an Benutzer Ihrer Maschine wiederholt fehlschlägt, sollten Sie versuchen, ob ein symbolischer Link auf /var /spool/mail hilft.

Zwei Adressen werden von smail benötigt: MAILER-DAEMON und postmaster. Wird eine Bounce-Message erzeugt, weil eine Nachricht nicht zugestellt werden konnte, wird eine Kopie an den postmaster-Account zur Überprüfung geschickt (falls es sich um ein Konfigurations-Problem handeln sollte). MAILER-DAEMON wird als Absender einer Bounce-Message benutzt.

Besitzen diese Adressen keinen gültigen Account auf Ihrem System, bildet smail MAILER-DAEMON implizit auf postmaster ab, und postmaster auf root. Sie sollten dies aber überschreiben, indem Sie für postmaster ein Alias einrichten, das auf die Person verweist, die für die Administration der Mail-Software zuständig ist.

Weiterleitung (Forwarding)

Ein Benutzer kann seine Mail an eine andere Adresse umleiten, indem er eine der beiden von smail für diesen Zweck vorgesehenen Methoden verwendet. Eine Möglichkeit besteht darin,
Forward to Empfänger, …
in die erste Zeile der Mailbox-Datei einzutragen. Alle eingehenden Nachrichten werden dann an die in der Liste aufgeführten Empfänger verschickt. Alternativ können Sie in Ihrem Home-Verzeichnis eine .forward-Datei erzeugen, die die durch Kommata separierte Liste der Empfänger enthält. Bei dieser Variante werden alle Zeilen der Datei gelesen und interpretiert.

Es kann übrigens jede Art von Adresse verwendet werden. Ein nützliches Anwendungsbeispiel für eine .forward-Datei liefert uns die Urlaubszeit:

janet, "|vacation"
Die erste Adresse liefert die eingehende Nachricht wie gehabt an janets Mailbox aus, während der vacation-Befehl einen kurzen Hinweis an den Absender schickt.

Alias-Dateien

smail kann mit Alias-Dateien umgehen, die mit denen von Berkeleys sendmail kompatibel sind. Einträge in einer Alias-Datei können die folgende Form haben:
 Alias: Empfänger
Empfänger ist eine durch Kommata separierte Liste von Adressen, durch die das Alias ersetzt wird. Die Empfängerliste kann sich über mehrere Zeilen hinziehen, wobei eine neue Zeile aber mit einem Tabulator beginnen muß.

Durch ein besonderes Feature ist smail auch in der Lage, Mailing-Listen aus der Alias-Datei zu verwalten: Wenn Sie als Empfänger :include:Dateiname angeben, liest smail die angegebene Datei und verwendet deren Inhalt als Liste der Empfänger.

Die zentrale Aliasdatei heißt /usr/lib/aliases. Wenn Sie versuchen, diese Datei für jeden schreibbar zu machen, übergibt smail keine Nachrichten an Shell-Befehle, die eventuell in dieser Datei auftauchen. Nachfolgend ein Beispiel für eine aliases-Datei:

# Datei: vbrew.com /usr/lib/aliases
hostmaster: janet
postmaster: janet
usenet: phil
# die Entwickler-Mailingliste
development: joe, sue, mark, biff
        /var/mail/log/development
owner-development: joe
# Ankündigungen von allgemeinem Interesse werden
# an alle Mitarbeiter weitergeleitet
announce: :include: /usr/lib/smail/staff,
        /var/mail/log/announce
owner-announce: root
# PPP-Mailing-Liste in lokale Newsgruppe einspeisen
ppp-list: "|/usr/local/lib/gateit local.lists.ppp"
Tritt ein Fehler auf, während eine Nachricht an eine Adresse geschickt wird, die aus der aliases-Datei ermittelt wurde, schickt smail eine Kopie der Fehlermeldung an den »Besitzer des Alias«. Schlägt zum Beispiel die Auslieferung an biff fehl, während Nachrichten an die development-Mailing-Liste übertragen werden, geht eine Kopie der Fehlermeldung sowohl an den Absender als auch an postmaster und owner-development. Existiert keine Besitzeradresse, wird keine zusätzliche Fehlermeldung erzeugt.

Bei Auslieferungen an Dateien oder beim Aufruf von Programmen, die in der aliases-Datei stehen, wird smail zum Benutzer nobody, um Sicherheitsprobleme zu vermeiden. Das kann recht ärgerlich sein, besonders, wenn Nachrichten in Dateien weitergeleitet werden. In der obigen Datei beispielsweise müssen die Logdateien nobody gehören und von ihm beschreibbar sein, oder die Auslieferung schlägt fehl.

Mailing-Listen

Anstelle der aliases-Datei können Mailing-Listen auch über Dateien im Verzeichnis /usr/lib/smail/lists verwaltet werden. Eine Mailing-Liste namens nag-bugs wird in der Datei lists/nag-bugs beschrieben, die eine durch Kommata separierte Liste der Teilnehmeradressen enthalten sollte. Die Liste kann sich über mehrere Zeilen erstrecken, Kommentare werden durch ein Doppelkreuz eingeleitet.

Für jede Mailing-Liste sollte ein Benutzer (oder Alias) namens owner-Listenname existieren. Alle Fehler, die bei der Auflösung einer Adresse auftreten, werden diesem Benutzer gemeldet. Diese Adresse wird auch bei allen ausgehenden Nachrichten als Absenderadresse im Header-Feld Sender: verwendet.

UUCP-basierte Transportarten

Eine Reihe der in smail eingebundenen Transportarten verwenden das UUCP-Paket. In einer UUCP-Umgebung werden Nachrichten üblicherweise so weitergeleitet, daß rmail auf dem nächsten Host ausgeführt wird, wobei die Nachricht über die Standardeingabe und die Empfangsadresse in der Kommandozeile übergeben werden. Auf Ihrem Host sollte rmail ein Link auf den smail-Befehl sein.

Wird eine Nachricht an UUCP übergeben, wandelt smail die Zieladresse in einen UUCP-Bang-Pfad um. Beispielsweise wird benutzer@host in host!benutzer umgewandelt. Jedes Vorkommen des Adreß-Operators % bleibt erhalten, d. h. benutzer%host@gateway wird zu gateway!benutzer%host. Allerdings generiert smail solche Adressen niemals selbst.

Alternativ kann smail BSMTP-Batches über UUCP senden und empfangen. Bei BSMTP werden eine oder mehrere Nachrichten zu einem Paket verschnürt, das auch die Befehle enthält, die der lokale Mailer ausführen würde, wenn eine echte SMTP-Verbindung aufgebaut worden wäre. BSMTP wird häufig bei »Store-and-Forward-Netzwerken« (z. B. UUCP-basiert) verwendet, um Festplattenplatz zu sparen. Die transports-Beispieldatei im Anhang B enthält eine Transportart namens bsmtp, die einen Teil der BSMTP-Batches in einem Queue-Verzeichnis erzeugt. Die vollständigen Batches können dann später durch ein Shell-Script erzeugt werden, das die benötigten HELO- und QUIT-Befehle einfügt.

Um die Transportart bsmtp für bestimmte UUCP-Links zu aktivieren, müssen Sie mit sogenannten method-Dateien arbeiten. Wenn Sie nur einen UUCP-Link haben und den Smart Host-Router verwenden, können Sie das Senden von SMTP-Batches aktivieren, indem Sie die Konfigurations-Variable smart_transport auf bsmtp anstelle von uux setzen.

Um SMTP-Batches über UUCP empfangen zu können, müssen Sie sicherstellen, daß sich der Befehl auf Ihrem Rechner befindet, an den die andere Seite die Pakete schickt, um sie zu entpacken. Arbeitet die andere Seite ebenfalls mit smail, müssen Sie rsmtp als Link auf smail definieren. Verwendet die Gegenseite sendmail, müssen Sie zusätzlich noch ein Script namens /usr/bin/bsmtp erzeugen, das einfach exec rsmtp ausführt (ein symbolischer Link würde nicht funktionieren).

SMTP-basierte Transportarten

smail unterstützt momentan einen SMTP-Treiber, mit dem Mail über TCP-Verbindungen ausgeliefert werden kann.(5) Es ist in der Lage, Nachrichten an eine beliebige Anzahl von Adressen auf einem einzelnen Host auszuliefern. Der Hostname kann dabei entweder ein voll qualifizierter Domainname sein, der von der Netzwerk-Software aufgelöst werden kann, oder ein Wert in Dotted Quad Notation, der von eckigen Klammern umschlossen ist. Üblicherweise werden alle Adressen, die von einem der BIND-, gethostbyname- oder gethostbyaddr-Router-Treiber aufgelöst werden, an SMTP weitergeleitet.

Der SMTP-Treiber versucht direkt über den in /etc/services eingetragenen smtp-Port eine Verbindung zum entfernten Host aufzubauen. Kann dieser nicht erreicht werden, oder kommt es zu einem Timeout, wird die Auslieferung zu einem späteren Zeitpunkt wiederholt.

Für die Auslieferung im Internet werden die Routen zum Zielhost in dem im Kapitel 13 beschriebenen route-addr-Format benötigt. Ein UUCP-Bang-Pfad ist hier nicht zu gebrauchen.(6) Darum wandelt smail die Adresse benutzer%host@gateway, wobei gateway über host1!host2!host3 erreicht werden kann, in die Quellrouten-Adresse <@host2,@host3:benutzer%host@gateway> um, die dann als Zieladresse an host1 übergeben wird. Um diese Umwandlungen (zusammen mit dem eingebauten BIND-Treiber) zu aktivieren, müssen Sie den Eintrag für den smtp-Treiber in der transports-Datei editieren. Mehr dazu in Anhang B.

Qualifizierung von Hostnamen

Manchmal ist es wünschenswert, unqualifizierte Hostnamen (z. B. ohne einen Domainnamen) abzufangen, die in Adressen für Absender oder Empfänger auftauchen. Ein Beispiel ist ein Gateway zwischen zwei Netzwerken, von denen eines voll qualifizierte Domainnamen benötigt. Bei einem Internet/UUCP-Relay sollten unqualifizierte Hostnamen standardmäßig auf die Domain uucp abgebildet werden. Weitergehende Adreß-Modifikationen sind fragwürdig.

Die Datei /usr/lib/smail/qualify teilt smail mit, welche Domainnamen an welche Hostnamen anzuhängen sind. Einträge in der qualify-Datei beginnen mit einem Hostnamen in der ersten Spalte, dem der Domainname folgt. Zeilen, die mit einem Doppelkreuz beginnen (wobei führende Leerzeichen, Tabulatoren etc. ignoriert werden), werden als Kommentare betrachtet. Die Einträge werden linear Zeile für Zeile durchsucht.

Existiert keine qualify-Datei, wird auch keine Qualifikation durchgeführt.

Der spezielle Hostname * steht für jeden Host. Auf diese Weise können Sie alle bisher noch nicht aufgeführten Hosts in einer Standard-Domain zusammenfassen. Diese Zeile sollte immer der letzte Eintrag in Ihrer Datei sein.

Bei der virtuellen Brauerei sind alle Hosts so eingerichtet, daß voll qualifizierte Domainnamen in den Absenderadressen verwendet werden. Bei unqualifizierten Empfangsadressen wird die uucp-Domain angenommen, so daß nur ein einzelner Eintrag in der qualify-Datei benötigt wird:

# /usr/lib/smail/qualify, zuletzt geändert am 12.02.1994 von janet
#
*            uucp

Fußnoten

(1)
Entsprechend dem Linux-Dateisystem-Standard der neue Standardplatz für sendmail. Ein anderer gängiger Ort ist/usr/lib.
(2)
Dafür gibt es folgenden Grund: Stellen Sie sich vor, daß Ihr Hostname monad lautet, aber nicht in den Maps registriert ist. Nun existiert in den Maps aber ein Rechner namens monad. Alle E-Mails an monad!root werden dann an diese Site weitergeleitet, selbst wenn sie von einem Ihrer direkten UUCP-Nachbarn stammen.
(3)
Haben Sie smail mit der Linux-Distribution eines Anbieters bezogen, dann haben Sie entsprechend den Kopierbestimmungen von smail »gegen eine nominelle Versandgebühr« auch Anspruch auf den Quellkode.
(4)
Die Standard-Konfigurationsdateien befinden sich in samples/generic unterhalb des Source-Verzeichnisses.
(5)
Die Autoren nennen die Unterstützung »einfach«. Für zukünftige Versionen von smail haben sie ein komplettes Backend angekündigt, das diese Arbeiten effektiver erledigen wird.
(6)
Allerdings wird die Verwendung von Routen im Internet nicht empfohlen. Sie sollten statt dessen voll qualifizierte Domainnamen verwenden.

Inhaltsverzeichnis Kapitel 13 Kapitel 15