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