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.
Dieser Anhang enthält Beispiel-Konfigurationsdateien für eine UUCP-Leafsite (ein Host, der ein LAN über UUCP mit Mail versorgt) in einem lokalen Netzwerk. Die Dateien basieren auf den Beispielen, die in der Source-Distribution von smail-3.1.28 enthalten sind. Ich habe den kläglichen Versuch unternommen, Ihnen zu erklären, wie diese Dateien arbeiten, Sie sind aber gut beraten, wenn Sie sich die sehr gute smail(8)-Manpage ansehen, die diese Dateien sehr ausführlich beschreibt. Haben Sie erst einmal die grundlegende Idee hinter der smail-Konfiguration verstanden, lohnt es sich, dieses Dokument zu lesen. Es ist ganz einfach!
Die erste abgedruckte Datei ist die routers-Datei, die smail eine Reihe von Routern beschreibt. Muß smail eine Nachricht an eine gegebene Adresse liefern, wird diese Adresse der Reihe nach an alle Router übergeben, so lange, bis einer paßt. »Passen« bedeutet hier, daß der Router den Zielhost in seiner Datenbank findet, sei es in der paths-Datei, in /etc/hosts, oder welcher Routing-Mechanismus auch immer verwendet wird.
Einträge in smail-Konfigurationsdateien beginnen immer mit einem eindeutigen Namen, der den Router, Transport oder Direktor bestimmt. Darauf folgt eine Liste mit Attributen, die das entsprechende Verhalten definieren. Die Liste besteht aus einer Reihe globaler Attribute, wie dem verwendeten driver, und privaten Attributen, die nur von dem jeweiligen Driver verstanden werden. Attribute werden durch Kommata, globale und private Attribute hingegen jeweils durch ein Semikolon voneinander getrennt.
Um diese feine Unterscheidung zu verdeutlichen, stellen Sie sich vor, Sie wollen zwei separate pathalias-Dateien verwalten; eine enthält die Routing-Information für Ihre Domain, und die zweite enthält globale Routing-Informationen, die möglicherweise aus den UUCP-Maps generiert wurden. Mit smail können Sie nun zwei Router in Ihre routers-Datei eintragen, die beide den pathalias
-Driver verwenden. Dieser Treiber durchsucht eine pathalias-Datenbank nach Hostnamen. Es wird erwartet, daß der Dateiname in einem privaten Attribut angegeben wird:
# # pathalias-Datenbank zum Routen innerhalb der Domain domain_paths: driver=pathalias, # suche Host in Pfaddatei transport=uux; # wenn vorhanden, über UUCP ausliefern file=paths/domain, # Datei ist /usr/lib/smail/paths/domain proto=lsearch, # Datei ist nicht sortiert (lineare Suche) optional, # ignorieren, wenn Datei nicht existiert required=vbrew.com, # nur nach *.vbrew.com-Hosts suchen # # pathalias-Datenbank zum Routen auf Hosts außerhalb der Domain world_paths: driver=pathalias, # suche Host in Pfaddatei transport=uux; # wenn vorhanden, über UUCP ausliefern file=paths/world, # Datei ist /usr/lib/smail/paths/world proto=bsearch, # Datei ist mit sort(1) sortiert optional, # ignorieren, wenn Datei nicht existiert -required, # keine Domains benötigt domain=uucp, # entferne vor der Suche das ".uucp" am Ende
Das zweite globale Attribut, das in beiden oben aufgeführten routers-Einträgen verwendet wird, definiert den sog. Transport, d. h. wie die Daten weitergeleitet werden, wenn der Router die passende Adresse findet. In unserem Fall wird die Nachricht mit dem uux-Transport ausgeliefert. Transports werden in der Datei transports definiert, die noch beschrieben wird.
Sie können genauer bestimmen, mit welchem Transport eine Nachricht ausgeliefert wird, indem Sie eine Methodendatei anstelle des transports
-Attributs verwenden. Methodendateien ermöglichen die Abbildung von Ziel-Hostnamen auf Transports. Wir gehen an dieser Stelle aber nicht weiter darauf ein.
Die folgende routers-Datei definiert Router für ein lokales Netz, die die Resolver-Library abfragen. Allerdings würden Sie auf einem Internet-Host einen Router konfigurieren, der MX-Records verarbeiten kann. Zu diesem Zweck sollten Sie die Kommentarzeichen vor dem alternativen inet_bind
-Router entfernen, der den eingebauten BIND-Driver von smailverwendet.
In einer Umgebung, in der UUCP und TCP/IP gemeinsam genutzt werden, könnten Sie mit dem Problem konfrontiert werden, daß sich Hosts in Ihrer /etc/hosts-Datei befinden, mit denen Sie nur gelegentlich über SLIP oder PPP Kontakt haben. Normalerweise wollen Sie in solchen Fällen Mail immer noch über UUCP versenden. Um zu verhindern, daß der inet_hosts
-Driver diese Hosts prüft, müssen Sie sie in die paths/force-Datei eintragen. Das ist eine weitere pathalias-ähnliche Datenbank, die durchsucht wird, bevor smail den Resolver abfragt.
# Eine /usr/lib/smail/routers-Beispieldatei # # force -- erzwinge UUCP-Auslieferung an bestimmte Hosts, selbst wenn sie # in unserer /etc/hosts stehen force: driver=pathalias, # suche Host in Pfaddatei transport=uux; # wenn vorhanden, über UUCP ausliefern file=paths/force, # Datei ist /usr/lib/smail/paths/force optional, # ignorieren, wenn Datei nicht existiert proto=lsearch, # Datei ist nicht sortiert (lineare Suche) -required, # keine Domains benötigt domain=uucp, # entferne vor der Suche das ".uucp" am Ende # inet_addrs -- überprüfe Domain-Namen, die literale # IP-Adressen wie in janet@[172.16.2.1] enthalten inet_addrs: driver=gethostbyaddr, # Driver zur Prüfung von IP-Domainliteralen transport=smtp; # Auslieferung mit SMTP über TCP/IP fail_if_error, # Fehler, wenn Adreßformat nicht korrekt check_for_local, # sofort ausliefern, wenn lokaler Host # inet_hosts -- prüfe Hostnamen mit gethostbyname(3N) # kommentieren Sie diese Zeilen aus, wenn Sie die BIND-Version verwenden wollen inet_hosts: driver=gethostbyname, # prüfe Hosts mit Hilfe der Library-Funktion transport=smtp; # SMTP verwenden -required, # keine Domains benötigt -domain, # keine Domainendungen definiert -only_local_domain, # nicht auf definierte Domains beschränken # inet_hosts -- alternative Version, die BIND verwendet, um auf DNS zuzugreifen #inet_hosts: # driver=bind, # eingebauten BIND-Driver verwenden # transport=smtp; # mit TCP/IP-SMTP ausliefern # # defnames, # normale Domain-Suche verwenden # defer_no_connect, # neuer Versuch, wenn Name-Server down ist # -local_mx_okay, # MX nicht an lokalen Host weiterleiten # # pathalias-Datenbank zum Routen innerhalb der Domain domain_paths: driver=pathalias, # suche Host in Pfaddatei transport=uux; # wenn vorhanden, über UUCP ausliefern file=paths/domain, # Datei ist /usr/lib/smail/paths/domain proto=lsearch, # Datei ist nicht sortiert (lineare Suche) optional, # ignorieren, wenn Datei nicht existiert required=vbrew.com, # nur nach *.vbrew.com-Hosts suchen # # pathalias-Datenbank zum Routen auf Hosts außerhalb der Domain world_paths: driver=pathalias, # suche Host in Pfaddatei transport=uux; # wenn vorhanden, über UUCP ausliefern file=paths/world, # Datei ist /usr/lib/smail/paths/world proto=bsearch, # Datei ist mit sort(1) sortiert optional, # ignorieren, wenn Datei nicht existiert -required, # keine Domains benötigt domain=uucp, # entferne vor der Suche das ".uucp" am Ende # smart_host -- ein teilweise spezifizierter Smart Host-Direktor # ist das Attribut smart_path nicht in /usr/lib/smail/config # definiert, wird dieser Router ignoriert. # das Transport-Attribut wird durch die globale # smart_transport-Variable überschrieben smart_host: driver=smarthost, # Spezial-Driver transport=uux; # Standard-Auslieferung über UUCP -path, # verwende smart_path Konfigurationsdatei- # Variable
Die Behandlung von Mail für lokale Adressen wird in der Datei directors festgelegt. Diese ist genauso aufgebaut wie die routers-Datei und enthält eine Liste von Einträgen, die jeweils einen Direktor definieren. Direktors liefern keine Nachrichten aus, sondern führen nur alle möglichen Umleitungen über Aliases, Mail-Forwarding und ähnliches durch. like.
Wird Mail an eine lokale Adresse wie beispielsweise janet geliefert, gibt smail den Benutzernamen an alle aktiven Direktors weiter. Ist ein Direktor erfolgreich, bestimmt er entweder einen Transport, über den die Nachricht ausgeliefert werden soll (z. B. die Mailbox-Datei des Benutzers), oder er generiert eine neue Adresse (beispielsweise nach der Auswertung eines Aliases).
Aus Sicherheitsgründen führen Direktors viele Überprüfungen durch, die ermitteln sollen, ob eine Datei sicher ist oder nicht. Adressen, die auf etwas dubiose Weise gefunden wurden (beispielsweise aus einer allgemein schreibbaren aliases-Datei), werden als unsicher markiert. Manche Driver weisen solche Adressen zurück, wie beispielsweise der Transport, der Nachrichten an Dateien liefert.
Darüber hinaus assoziiert smail auch einen Benutzer mit jeder Adresse. Alle Schreib-/Leseoperationen werden im Namen dieses Benutzers durchgeführt. Für die Auslieferung in die Mailbox von janet wird die Adresse natürlich auch mit janet assoziiert. Andere Adressen, wie die aus der aliases-Datei, assoziieren andere Benutzer, beispielsweise den Benutzer nobody.
Die Details dieser Features entnehmen Sie bitte der smail(8)-Manpage.
# Eine /usr/lib/smail/directors-Beispieldatei # aliasinclude -- löse aus Alias-Dateien erzeugte ":include:filename"-Adressen # auf aliasinclude: driver=aliasinclude, # verwende Spezial-Driver nobody; # greife als Benutzer "nobody" auf Datei zu, # wenn unsicher copysecure, # übernehme Rechte von Alias-Direktor copyowners, # übernehme Besitzer von Alias-Direktor # forwardinclude -- löse aus Forward-Dateien erzeugte # ":include:filename"-Adressen auf forwardinclude: driver=forwardinclude, # verwende Spezial-Driver nobody; # greife als Benutzer "nobody" auf Datei zu, # wenn unsicher checkpath, # prüfe Zugriff auf Pfad copysecure, # übernehme Rechte vom Forwarding-Direktor copyowners, # übernehme Besitzer vom Forwarding-Direktor # aliases -- suche nach in der Datenbank gespeicherten Alias-Auflösungen aliases: driver=aliasfile, # Allzweck-Aliasing-Direktor -nobody, # alle Adressen sind per Voreinstellung # bereits mit nobody assoziiert sender_okay, # Sender aus Erweiterungen nicht entfernen owner=owner-$user; # Probleme an Benutzeradresse melden file=/usr/lib/aliases, # Voreinstellung: sendmail-Kompatibilität modemask=002, # sollte nicht allgemein geschrieben werden # können optional, # ignorieren, wenn Datei nicht existiert proto=lsearch, # unsortierte ASCII-Datei # dotforward -- löse .forward-Dateien im Home-Verzeichnis des Benutzers auf dotforward: driver=forwardfile, # Allzweck-Forwarding-Direktor owner=real-$user, # Probleme an Benutzer-Mailbox melden nobody, # Benutzer ist nobody, wenn unsicher sender_okay; # Sender niemals aus Erweiterungen entfernen file=~/.forward, # .forward-Datei im Home-Verzeichnis checkowner, # Benutzer kann diese Datei besitzen owners=root, # aber auch root kann diese Datei besitzen modemask=002, # sollte nicht allgemein geschrieben werden # können caution=0-10:uucp:daemon, # nicht als root oder Daemon # besondere Vorsicht bei Home-Verzeichnissen auf entfernten Rechnern unsecure="~ftp:~uucp:~nuucp:/tmp:/usr/tmp", # forwardto -- löse "Forward to "-Zeile zu Beginn # der Mailbox-Datei eines Benutzers auf forwardto: driver=forwardfile, owner=Postmaster, # Fehler an Postmaster melden nobody, # Benutzer ist nobody, wenn unsicher sender_okay; # Sender aus Erweiterungen nicht entfernen file=/var/spool/mail/${lc:user}, # Position der Benutzer-Mailbox forwardto, # aktiviere "Forward to "-Prüfung checkowner, # Benutzer kann diese Datei besitzen owners=root, # aber auch root kann diese Datei besitzen modemask=0002, # Unter System V kann Group-Mail schreiben caution=0-10:uucp:daemon, # nicht als root oder Daemon # user -- überprüfe Benutzer auf dem lokalen Host mit Lieferung zu deren # Mailboxen user: driver=user; # Driver zur Prüfung der Benutzernamen transport=local, # lokaler Transport erfolgt in Mailboxen # real_user -- überprüfe Benutzernamen, wenn der Prefix mit dem String # "real-" beginnt real_user: driver=user; # Driver zur Prüfung der Benutzernamen transport=local, # lokaler Transport erfolgt in Mailboxen prefix="real-", # Prüfe z. B. "real-root" # lists -- löse Mailing-Listen auf, die unter /usr/lib/smail/lists # gespeichert sind lists: driver=forwardfile, caution, # alle Adressen sind mit Vorsicht zu genießen nobody, # und mit dem Benutzer nobody assoziiert sender_okay, # Sender NICHT entfernen owner=owner-$user; # Besitzer der Liste # wandele den Namen der Mailing-Liste in Kleinbuchstaben file=lists/${lc:user},
Wurde eine Nachricht erfolgreich geroutet oder geleitet, übergibt smail die Nachricht an den vom Router oder Direktor spezifizierten Transport, der die Adresse prüft. Diese Transports sind in der Datei transports definiert. Auch ein Transport wird durch eine Reihe globaler und privater Optionen definiert.
Die wichtigste Option, die in jedem Eintrag definiert wird, ist der Driver, der den Transport übernimmt. Dazu gehört beispielsweise der Driver pipe
, der den im cmd
-Attribut angegebenen Befehl ausführt. Darüber hinaus gibt es eine ganze Reihe globaler Attribute, die vom Transport verwendet werden können, um den Nachrichten-Header und möglicherweise den -Body umzuwandeln. Beispielsweise läßt das Attribut return_path
den Transport ein Return-Path
-Feld in den Header einfügen. Durch das Attribut unix_from_hack
wird jeder Zeile, die mit dem Wort From
beginnt, ein >-Zeichen vorangestellt.
# Eine /usr/lib/smail/transports-Beispieldatei # local -- Mail an lokale Benutzer ausliefern local: driver=appendfile, # Nachricht an Datei anhängen return_path, # Return-Path:-Feld einfügen from, # From_-Zeile verwenden unix_from_hack, # > vor From im Body einfügen local; # lokale Forms verwenden file=/var/spool/mail/${lc:user}, # Position der Mailbox-Dateien group=mail, # Besitzergruppe für System V mode=0660, # Gruppe, auf die die Mail zugreifen kann suffix="\n", # Extra-Zeilenvorschub anhängen # pipe -- Mail an Shell-Befehle weiterleiten pipe: driver=pipe, # Nachricht an anderes Programm pipen return_path, # Return-Path:-Feld einfügen from, # From_ -Zeile verwenden unix_from_hack, # > vor From im Body einfügen local; # lokale Forms verwenden cmd="/bin/sh -c $user", # Adresse an Bourne Shell parent_env, # Umgebungsinfo von Parent-Adresse pipe_as_user, # mit Benutzer-ID assoziierte Adresse # verwenden ignore_status, # Exit-Status ungleich 0 ignorieren ignore_write_errors, # Schreibfehler ignorieren (gebrochene Pipe) umask=0022, # umask für Child-Prozeß -log_output, # stdout/stderr nicht loggen # file -- Mail in Dateien liefern file: driver=appendfile, return_path, # Return-Path:-Feld einfügen from, # From_-Zeile verwenden unix_from_hack, # > vor From im Body einfügen local; # lokale Forms für Lieferung verwenden file=$user, # Datei wird aus Adresse genommen append_as_user, # verwende mit Benutzer-ID assoziierte Adresse expand_user, # löse ~ und $ innerhalb der Adresse auf suffix="\n", # Extra-Zeilenvorschub anhängen mode=0600, # Zugriffsrechte auf 600 setzen # uux -- an rmail-Programm an einer entfernten UUCP-Site weiterleiten uux: driver=pipe, uucp, # UUCP-Adreßformate verwenden from, # From_-Zeile verwenden max_addrs=5, # maximal 5 Adressen pro Aufruf max_chars=200; # maximal 200 Zeichen für Adressen cmd="/usr/bin/uux -- -r -a$sender -g$grade $host!rmail $(($user)$)", pipe_as_sender, # uucp-Logs enthalten Rufer log_output, # Fehlermeldungen für gebouncte Nachrichten # speichern # defer_child_errors, # erneuter Versuch, wenn uux Fehler meldet # demand -- Lieferung an unmittelbar pollendes entferntes rmail-Programm demand: driver=pipe, uucp, # UUCP-Adreßformate verwenden from, # From_-Zeile verwenden max_addrs=5, # maximal 5 Adressen pro Aufruf max_chars=200; # maximal 200 Zeichen für Adressen cmd="/usr/bin/uux -- -a$sender -g$grade $host!rmail $(($user)$)", pipe_as_sender, # uucp-Logs enthalten Rufer log_output, # Fehlermeldungen für gebouncte Nachrichten # speichern # defer_child_errors, # erneuter Versuch, wenn uux Fehler meldet # hbsmtp -- halbgares BSMTP. Die Ausgabedateien müssen # regelmäßig bearbeitet und über UUCP verschickt werden. hbsmtp: driver=appendfile, inet, # verwende RFC 822-Adressierung hbsmtp, # "batched SMTP" ohne HELO und QUIT -max_addrs, -max_chars; # kein Limit bei Zahl der Adressen file="/var/spool/smail/hbsmtp/$host", user=root, # Datei gehört root mode=0600, # kann nur von root gelesen und geschrieben # werden # smtp -- Lieferung mit SMTP über TCP/IP smtp: driver=tcpsmtp, inet, -max_addrs, -max_chars; # kein Limit bei Zahl der Adressen short_timeout=5m, # Timeout für kurze Operationen long_timeout=2h, # Timeout für längere SMTP-Operationen service=smtp, # Verbindung mit dem Service-Port # bei Internet: die folgenden vier Zeilen auskommentieren # use_bind, # löse MX- und mehrfache A-Records auf # defnames, # verwende voreingestellte Domainsuche # defer_no_connect, # erneuter Versuch, wenn Name-Server # nicht hochgefahren # -local_mx_okay, # MX nicht an lokalen Host weiterleiten