Inhalt

6. Installation von Transportsoftware

6.1 qmail v1.03

Sicher, schnell und einfach zu benutzen, das ist mein bevorzugter MTA (= »Mail Transport Agent« E-Mail Transportprogramm).

Momentan bietet keine Distribution eine Vorinstallation von qmail. Wir konzentrieren uns auf das Kompilieren und Installieren von qmail, da dies der einzige knifflige Teil ist: die Konfiguration ist ziemlich geradlinig.

qmail beziehen

Besuchen Sie

http://www.qmail.org/
um die letzte Version herunterzuladen.

Dekomprimieren der Quellen

Danach werden sie ausgepackt durch Start von:

mv qmail.tar.gz /usr/local/src
cd /usr/local/src ; tar -zxvf qmail.tar.gz

Falls Sie eine »bz2« Version finden (ein neueres und besseres Packformat), ersetzen Sie tar einfach durch:

bunzip2 qmail.tar.bz2
tar -xvf qmail.tar

Vorbereitung der Übersetzung

Jetzt wechseln Sie in das qmail Verzeichnis, um die Konfigurationsvorgaben einzusehen:

cd qmail; more conf-*

Sie sollten keine Vorgaben ändern müssen, aber Sie können z.B. ein alternatives Installationsverzeichnis angeben oder bessere flags zur Kompilierung setzen.

Jetzt rufen Sie

mkdir /var/qmail

auf, um das Zielverzeichnis zu erstellen.

Wenn Sie keine Debian Distribution installiert haben, müssen Sie einige Benutzer IDs für die Benutzung von qmail hinzufügen: qmails hohe Sicherheit hängt davon ab.

Die Tatsache, daß qmail in Module aufgeteilt ist, die je unter ihrer eigenen Benutzer ID laufen, macht es wesentlich schwerer für einen Endringling, in Ihr gesamtes E-Mail System einzubrechen oder root Zugang durch Mißbrauch zu erhalten.

Also starten Sie:

# groupadd nofiles
# useradd -g nofiles -d /var/qmail/alias alias
# useradd -g nofiles -d /var/qmail qmaild
# useradd -g nofiles -d /var/qmail qmaill
# useradd -g nofiles -d /var/qmail qmailp
# groupadd qmail
# useradd -g qmail -d /var/qmail qmailq
# useradd -g qmail -d /var/qmail qmailr
# useradd -g qmail -d /var/qmail qmails

Oder bearbeiten Sie /etc/passwd und /etc/group von Hand, um diese Benutzer selbst anzufügen.

Evan E. berichtete, er mußte den »-g groupid« Parameter für ein Vanilla groupadd (Caldera 1.2) benutzen, da ansonsten groupadd folgenden Fehler ergab: »Eine Gruppe mit diesem Namen existiert bereits.«

Sie können zum Beispiel dementsprechend hinzufügen:

qmail:*:2107:
nofiles:*:2108:

und

alias:*:7790:2108::/var/qmail/alias:/bin/true
qmaild:*:7791:2108::/var/qmail:/bin/true
qmaill:*:7792:2108::/var/qmail:/bin/true
qmailp:*:7793:2108::/var/qmail:/bin/true
qmailq:*:7794:2107::/var/qmail:/bin/true
qmailr:*:7795:2107::/var/qmail:/bin/true
qmails:*:7796:2107::/var/qmail:/bin/true

Jetzt können Sie

make setup check

aufrufen, um Ihre Einstellungen zu prüfen, dann

./config

um qmail zu konfigurieren. Achtung, Ihr Server muß über DNS auflösbar sein, oder ./config wird verwirrt werden.

Falls Sie keinen DNS Zugang haben, können Sie Ihren Servernamen direkt per

./config-fast foo.bar.com

angeben.

Nun müssen Sie einige Alias Namen installieren, da /etc/alias nicht von qmail verwendet wird, bis Sie ein optionloses Paket kompilieren und installieren. Hier ist mein Setup:

File : ".qmail-MAILER-DAEMON"
&postmaster
File : ".qmail-bin"
&root
File : ".qmail-daemon"
&root
File : ".qmail-decode"
&root
File : ".qmail-dumper"
&root
File : ".qmail-games"
&root
File : ".qmail-ingres"
&root
File : ".qmail-mailer-daemon"
&postmaster
File : ".qmail-manager"
&root
File : ".qmail-news"
&root
File : ".qmail-nobody"
&root
File : ".qmail-operator"
&root
File : ".qmail-postmaster"
&root
File : ".qmail-root"
&guylhem
File : ".qmail-system"
&root
File : ".qmail-toor"
&root
File : ".qmail-uucp"
&root
File : ".qmail-uucp-default"
|preline -dr /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" lm!rmail
 "($DEFAULT@$HOST)"

Sie müssen jede dieser Dateien in ~alias erstellen, wobei &guylhem in .qmail-root durch Ihr eigenes Login für root E-Mail ersetzt werden muß.

Eine Warnung an UUCP Benutzer: Vertrauen Sie nicht der qmail FAQ für UUCP; benutzen Sie statt dessen meine .qmail-uucp-default. Ansonsten sind Sie nicht in der Lage, irgend welche E-Mails über Ihre UUCP Verbindung zu senden.

Sie werden sich jetzt entscheiden müssen, in welchem Format Ihre Benutzer ihre E-Mails erhalten werden.

Hier ist mein Vorschlag:

Um das Standardformat festzulegen, lesen Sie jede Datei in /var/qmail/boot, kopieren danach die, die Ihnen am besten gefällt, nach /var/qmail/rc.

/home/ oder /proc/ sind eine sichere Wahl, aber bevorzugen Sie /home/ aus Sicherheitsgründen.

Konfigurierung von qmail

In der Datei /var/qmail/control müssen einige Optionen angepaßt werden.

defaultdomain, me, plusdomain

me

ist Ihr »Full Qualified Domain Name« (voll qualifizierter Domainname, Abkürzung: FQDN), zum Beispiel lautet er auf meinem Computer barberouge.linux.lmm.com

defaultdomain

wird an jeden Hostnamen ohne Punkte angefügt, einschließlich defaulthost. Zum Beispiel können Sie es auf localnetwork setzen, so daß jede E-Mail, gesendet an »joe@seinpostfach« statt dessen ergänzt wird, um an »joe@seinpostfach.lokalesnetzwerk« gesendet zu werden.

plusdomain

ist die Ausnahme: es wird an jeden Hostnamen angefügt, der mit einem Plus-Zeichen endet, eingeschlossen defaulthost (gesetzt in me, falls es mit einem Plus-Zeichen endet).

Diese drei Beispiele zeigen Ihnen die Macht und Leichtigkeit der qmail Konfiguration.

locals, rcpthosts

Falls Sie virtuelle Domainnamen unterstützen wollen, fügen Sie einfach zusätzliche Namen in diesen Dateien hinzu. Jede E-Mail, die Sie für diese Namen erhalten, wird lokal behandelt.

Der Unterschied zwischen locals und rcpthosts ist, daß letztere nicht als lokale Aliases betrachtet werden, was nützlich ist, falls Sie E-Mails von einigen kostenlosen E-Mail Adressen wie yahoo.com oder gmx.de erhalten, während Sie auch E-Mails an andere Benutzer dieser nicht-lokalen Dienste senden, d.h. Sie wollen keine als lokal behandelten E-Mails an jemand@yahoo.com senden!

virtualdomains

Dort können Sie den Standardmodus für den Ausgang bestimmen, z.B.

#:alias-uucp

wenn Sie abgehende E-Mails nicht per UUCP, sondern per SMTP (Vorgabe) senden wollen:

:alias-ucp

qmail Test

Nachdem nun alles konfiguriert ist, versuchen Sie

sh -cf '/var/qmail/rc &'

um qmail zu starten (es wird den lokalen MTA nicht beeinträchtigen), dann

echo to: meinylogin | /var/qmail/bin/qmail-inject

Sie sollten diese E-Mail in dem von Ihnen in /var/qmail/boot/ gewählten Format erhalten.

Entfernen Ihres anderen MTA

Wenn dieser Test erfolgreich verlaufen ist, beenden Sie Ihren frühreren MTA:

killall -STOP daemon_name

Falls irgendwelche Child-Prozesse laufen, sollten Sie

killall -CONT their_name

abwarten, noch einmal

killall -STOP

wiederholen und solange wie nötig wiederholen.

Wenn es keine Child-Prozesse gibt

killall -TERM

und dann

killall -CONT

Entfernen Sie den MTA. Wie man das anstellt, hängt von der installierten Distribution ab, zum Beispiel

rpm -e --nodeps
bei RedHat, Caldera und SuSE, oder
dpkg -r --force-depends
bei Debian. Danach starten Sie:
# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail
# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

Nun setzen Sie »qmail-smtpd« in /etc/inetd.conf ein (alles auf einer Zeile):

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env
 /var/qmail/bin/qmail-smtpd

Falls Sie eine alte »nicht-SYSV-init« Distribution wie RedHat einsetzen, fügen Sie einfach in die Startskripte ein:

sh -cf '/var/qmail/rc &'

Diese sollten sich gewöhnlich in /etc/local befinden, aber Ihr Aufwand mag variieren.

Für aktuelle »SYSV-init« fähige Distributionen (RedHat, Caldera, SuSE, Debian) fügen Sie dieses Skript zu /etc/init.d oder /etc/rc.d/init.d/ hinzu:

Debian Version:

#!/bin/sh

test -x /var/qmail/rc || exit 0

case "$1" in
  start)
     echo -n "Starte MTA: "
     sh -cf '/var/qmail/rc &'
     echo "qmail."
     ;;
  stop)
     echo -n "Stoppe MTA: "
     killall qmail-lspawn
     echo "qmail."
     ;;
  restart)
     echo -n "Starte erneut MTA: "
     killall -HUP qmail-lspawn
     killall -ALRM qmail-lspawn
     echo "qmail."
     ;;
  *)
     echo "Verwendung: /etc/init.d/qmail {start|stop|restart}"
     exit 1
esac

exit 0

RedHat Version:

#!/bin/sh
#
# qmail      Dieses Shell Skript sorgt für Start und Halt von qmail.
#
# Beschreibung: qmail ist ein E-Mail Transportprogramm, welches ein Programm 
#               ist, daß E-Mails von einer Maschine zu einer anderen 
#               transportiert.
# Prozeßname:   qmail
# config: /var/qmail/control/
# Funktionsbibliothek Quelle.
. /etc/rc.d/init.d/functions
# Netzwerkskonfiguration Quelle.
. /etc/sysconfig/network
export PATH=$PATH:/var/qmail/bin
# Prüfe, daß das Netzwerk läuft.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/sendmail ] || exit 0
# Sieh nach, wie wir genannt werden.
case "$1" in
  start)
        # Starte Daemon.
        echo -n "Starte qmail: "
        qmail-start '|preline procmail' splogger qmail &
        touch /var/lock/subsys/qmail
        echo
        ;;
  stop)
        # Stoppe Daemon.
        echo -n "Schließe qmail ab: "
        killproc qmail-lspawn
        echo
        rm -f /var/lock/subsys/qmail
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  status)
        status qmail
        ;;
  *)
        echo "Verwendung: qmail {start|stop|restart|status}"
        exit 1
esac
exit 0

Und erstellen Sie symbolische Links zu jeder /etc/rc.d/rcN.d/, zum Beispiel:

ln -sf /etc/init.d/qmail /etc/rc1.d/K19qmail

Wenn der erste Buchstabe ein »K« ist, werden Sie qmail auf diesem Runlevel beenden (»1« für den Einzelmodus oder »6« für den Start), falls aber der erste Buchstabe ein »S« ist, wird qmail auf diesem Runlevel gestartet (Runlevel wie oben).

RedHat, Caldera und SuSE werden /etc/rc.d/ benutzen, anstelle der lesbaren /etc/ der Debian Distribution, d.h., zum Beispiel /etc/rc.d/rc1.d oder /etc/rc.d/init.d.

Das war es.

Es wird für das Inkrafttreten der Modifikationen kein Neustart benötigt. Wie Sie sich erinnern, benutzen Sie Linux und kein anderes billiges Betriebssystem. Starten Sie einfach

killall inetd
init 1

um in den Einzelnutzer Modus zu wechseln, danach:

init 2

um zurück in Ihr normales Runlevel zu wechseln (angezeigt in /etc/inittab mit der »initdefault« Bezeichnung).

Sie können das qmail Skript auch von Hand starten, aber die »init« Methode wird Ihnen zeigen, falls das qmail Skript gut platziert ist, d.h. nach dem Start des Netzwerkskripts aber vor jedem anderen Programm, das davon abhängt, Sie per E-Mail zu warnen (wie inn).

6.2 smail v3.1

smail v3.1 scheint ein de-facto Standard Transportagent für reine UUCP Systeme und einige SMTP Systeme zu sein. Es ist leicht zu konfigurieren, es wird ohne Patch aus den Quellen kompiliert und ist ziemlich sicher.

smail konfigurieren

Installieren Sie das smail Binärpaket aus Ihrer Distribution (ich empfehle dies zu wählen) oder besorgen Sie sich die Quellen und bauen smail. Falls Sie smail von den Quellen selbst bauen, benötigen Sie Folgendes in Ihrer os/linux Datei, so daß sed Ihnen Shell Skripte liefert, die richtig arbeiten:

CASE_NO_NEWLINES=true

Sobald das installiert ist, werden Konfigurationsdateien gewiß nach /etc/smail gelangen (aber das mag bei Ihnen anders sein, wenn Sie alte Distributionen verwenden); lassen Sie uns mit ihrer Bearbeitung beginnen.

Die Datei »config«

# From
smart_path=polux
smart_transport=uux

# To
hostname=barberouge
domains=linux.lmm.com

visible_name=barberouge.linux.lmm.com
uucp_name=barberouge.linux.lmm.com

# max_message_size=512k
# auth_domains=foo.bar
# more_hostnames=barberouge.polux.freenix.fr

Nun zuerst: wer versorgt Sie? Ich werde von »polux« per UUCP (d.h. UUX Transport) versorgt. Natürlich müssen Sie diese Datei ändern, um sie an Ihre Situation anzupassen. Zum Beispiel könnten Sie von »bargw.bar.foobar.com« über »smtp« versorgt werden, in diesem Fall benötigen Sie keine Transportdatei und können »-transport_file« definieren, um anzuzeigen, daß sie keine brauchen.

Sie können außerdem »postmaster_address = IhrName« verwenden, die Netzwerktopologie in ausgehenden Adressen verbergen (falls Sie ein Gateway haben), indem Sie »visible_name« (sichtbarer Name) verwenden, außerdem kann das Einsetzen, welche Aliasadresse für von Ihnen empfangenen E-Mails verwendet wird, durch Verwendung von »more_hostnames« benutzt werden.

Sehen Sie in der smail Dokumentation für weitere Details oder Beispiele unter /usr/doc/smail/examples nach, ob etwas davon auf Ihre Situation paßt.

Die Datei »directors«

# aliasinclude - expand ":include:filename" Adresse erstellt durch Aliasdatei
# Dieser und der nächste Eintrag sind wie ein dampfender Teller. Es gibt einige
# Gründe dafür, signifikante Änderungen vorzunehmen. Der Änderungszweck ist
# dabei, Adressen der Form anzupassen und zu erweitern:
#       :include:pathname
# welche in Aliasdateien oder Mailinglisten/»forward« Dateien auftauchen
# können (hergestellt durch jeden Zeiger mit einem Treiber der
# »forward« Datei).
aliasinclude:
driver = aliasinclude,          # benutze diesen Spezialfall Treiber
nobody;                         # assoziiere Benutzer nobody mit
                                #  Adresse, wenn geringe Verletzung
                                #  von Zugriffsrechten eintreten
copysecure,                     # beziehe Erlaubnis von Aliaszeiger
copyowners,                     # beziehe Eigentümer von Aliaszeiger


# forwardinclude - expand ":include:filename" Adressen erstellt durch
# »forward« Datei
forwardinclude:
driver = forwardinclude,        # benutze diesen Spezialfall Treiber
nobody;
copysecure,                     # beziehe Erlaubnisse von Zeiger der
                                #  Weiterleitung
copyowners,                     # beziehe Eigentümer von Zeiger der
                                #  Weiterleitung


# aliases - Suche nach Alias Erweiterungen, abgelegt in einer Datenbank
# Dies ist die Standard Aliasdatei. Sie wird für generische Dinge
# verwendet, wie Mapping von Root auf andere Benutzer, Postmaster,
# MAILER-DAEMON und UUCP auf Administratorseite, Erstellen einiger kleiner
# Systemalias Erweiterungen usw. Bei dieser Seiten-Konfiguration wird
# die Aliasdatei meist für computerspezifische Aliase/Weiterleitungen
# verwendet. Globales Weiterleiten von Informationen sollte in der
# Weiterleitungsdatenbank abgelegt werden.
aliases:
driver=aliasfile,               # genereller Aliaszeiger
-nobody,                        # alle Adressen werden standardmäßig
                                #  mit Benutzer nobody assoziiert, hier
                                #  etwas einzusetzen ist nicht nützlich
sender_okay,                    # nicht den Absender aus der
                                #  Erweiterung entfernen
owner=owner-$user;              # Probleme gehen an Inhaberadresse
file=/etc/aliases,
modemask=002,                   # sollte nicht global beschreibbar sein
optional,                       # ignoriere, falls Datei nicht
                                #  existiert
proto=lsearch,                  # unsortierte ASCII Datei


# forward - Suche nach Erweiterung, gespeichert in der Weiterleitungsdatenbank
# Dies ist eine subdomainweite Benutzer-Weiterleitungsdatenbank. Einträge
# werden hier für aktuelle und veraltete Benutzer vorgenommen, um ihre E-Mails
# an deren bevorzugten E-Mail-Leser weiterzuleiten. Die Weiterleitungsdatenbank
# wird über das TCP/IP Netzwerk versendet, sobald Änderungen vorgenommen
# werden, um das Netzwerk konsistent zu halten.
#forward:
# driver = aliasfile,           # genereller Aliaszeiger
# -nobody,                      # alle Adressen werden mit Benutzer
#                               #  nobody assoziiert, hier etwas
#                               #  einzusetzen ist nicht sinnvoll
# owner = real-$user;           # Probleme gehen an die Eigentümer-
#                               #  adresse
#
# file = /etc/forward,
# modemask = 002,
# proto = dbm,                  # benutze dbm(3X) Bibliothek für
#                               #  Zugriff


# dotforward - erweitere ».forward« Dateien in Benutzerverzeichnissen
# Für Benutzer, für die ein Eintrag in der »forward« Datenbank besteht,
# wird eine ».forward« Datei nur verwendet, wenn sie auf der
# Heimatmaschine besteht, die in der Weiterleitungsdatenbank
# identifiziert wurde. Falls verwendet, wird ihr wie einer Adressliste
# gefolgt, an die E-Mails zugestellt werden sollen, anstatt denen (oder
# zusätzlich zu denen), die der Benutzer in der lokalen Adresse
# indentifiziert hat.
dotforward:
driver = forwardfile,           # genereller Weiterleitungszeiger
owner = postmaster, nobody, sender_okay;

file = ~/.forward,              # .forward Datei im Heimatverzeichnis
checkowner,                     # Benutzer kann diese Datei innehaben
owners = root,                  # oder Root kann Eigentümer sein
modemask = 002,                 # sie sollte nicht global beschreibbar
                                #  sein
caution = daemon:root,          # dies Sachen nicht als Root oder
                                #  Daemon starten
# extra Vorsicht bei von der Entfernung aus zugänglichen
#  Heimatverzeichnissen walten lassen!
unsecure = "~uucp:/tmp:/usr/tmp:/var/tmp"


# forwardto - erweitere ein »Forward to « in Benutzer Mailbox Dateien
# Dies emuliert die V6/V7/System-V Weiterleitungsmechanismen, die eine
# Zeile von Adressen zur Weiterleitung, gespeichert am Anfang der
# Benutzer-Mailbox Datei verwenden, die mit dem String »Forward to«
# (weiterleiten an) als Präfix ausgestattet sind.
forwardto:
driver = forwardfile,
owner = postmaster, nobody, sender_okay;

file = /var/spool/mail/${lc:user},      # zeige auf Benutzer Mailbox
                                        #  Datei
forwardto,                              # schalte »Forward to « Funktion ein
checkowner,                             # Benutzer kann Dateiinhaber sein
owners = root,                          # oder Root kann Datei innehaben
modemask = 0002,                        # unter System V kann Gruppe mail
                                        #  schreiben
caution = daemon:root                   # diese Dinge nicht als Root oder
                                        #  Daemon starten


# user - übereinstimmende Benutzer auf diesem lokalen Host mit Zustellung an
#  deren Mailboxen
user:   driver = user;                  # zu Benutzernamen passende Treiber
        transport = local               # lokaler Transport an Mailboxen


# real_user - übereinstimmende Benutzernamen mit Präfixstring »real-«
# Das ist nützlich, um eine Adresse zu erlauben, die explizit an eine
# Mailbox eines Benutzers zustellt. Zum Beispiel können hier Fehler in einer
# ».forward« Datei Erweiterung zugestellt werden, oder Weiterleitungsschleifen
# zwischen mehreren Maschinen können durch Verwendung einer wahren Benutzernamen
# Adresse aufgelöst werden. Auch können Benutzer, die E-Mails dazu verwenden
# wollen, um Daten auf eine Maschine zu übertragen, die nicht ihre  »Heimat-«
# Maschine ist, eine E-Mail an »wahrer-Loginname@ferner.host« senden.
real_user:
driver = user;
transport = local,
prefix = "real-"                # z.B. Übereinstimmung wahrer Root


# lists - erweitere Mailinglistgen, gespeichert in einem Listenverzeichnis
# Mailinglisten können einfach erstellt werden durch Anlegen einer Datei im
# Verzeichnis /etc/smail/lists.
lists:
driver = forwardfile,
caution,                        # markiere alle Adressen mit »Vorsicht«
nobody,                         # und dann assoziiere mit Benutzer
                                #  nobody
owner = owner-$user;            # System V Seiten können o-$user
                                # verwenden wollen, wenn Eigentümer-
                                # $user für einen 14-Zeichen Dateinamen
                                # zu lang ist
file = lists/${lc:user}         # Listen sind unter $smail_lib_dir


# owners - erweitere Mailinglisten, die in einem Eigentümer-Listenverzeichnis
#  gespeichert sind
# Mailinglisten-Eigentümerlisten können einfach durch Erstellen einer Datei
# im Verzeichnis /etc/smail/lists/owner erstellt werden. Mailinglisten
# Eigentümer bekommen die lokal produzierten Fehler einer Mailingliste mit
# dem selben Namen zugesandt. Um eine Eigentümerliste für eine Mailingliste
# zu erstellen, ist eine Datei mit dem Listennamen in /etc/smail/lists/owner
# zu erstellen. Damit wird eine Adressliste von Eigentümer-Listennamen kreiert,
# wie sie vom »lists« Zeiger oben verwendet wird.
owners:
driver = forwardfile,
caution,                        # markiere alle Adressen mit "Vorsicht"
nobody,                         # und dann assoziiere mit Benutzer
                                #  nobody
owner = postmaster;             # System V Seiten können o-$user
                                # verwenden wollen, wenn Eigentümer-
                                # $user für einen 14-Zeichen Dateinamen
                                # zu lang ist
prefix = "owner-",
file = lists/owner/${lc:user}   # Listen sind unter $smail_lib_dir


# request - dehne Mailinglisten, gespeichert in einem Listenanfrageverzeichnis
# Mailinglisten Anfragelisten können einfach durch Anlegen einer Datei im
# Verzeichnis /etc/smail/lists/request erstellt werden. Die Anfrageadressen
# werden typischerweise als eine Standardadresse für Abfragen über eine
# Mailingliste verwendet. Zum Beispiel Anfragen über die Aufnahme oder Löschen
# in / aus einer Liste wird normalerweise an »list-request« gesendet, das so
# eingestellt sein sollte, daß die richtige(n) Person(en) die E-Mail erhalten.

request:
driver = forwardfile,
caution,                        # markiere alle Adressen mit »Vorsicht«
nobody,                         # und dann assoziiere mit Benutzer
                                #  nobody
owner = postmaster;             # System V Seiten können o-$user
                                # verwenden wollen, wenn Eigentümer-
                                # $user für einen 14-Zeichen Dateinamen
                                # zu lang ist
suffix = "-request",
file = lists/request/${lc:user} # Listen sind unter $smail_lib_dir

Hier sollten Sie nichts ändern müssen, nur Mailinglisten Optionen, falls Sie vorhaben, einige über smail laufen zu lassen, oder Weiterleitungsoptionen, falls Sie z.B. die Weiterleitung abschalten wollen.

Die Datei »fidopaths«

.f105.n324.z2.fidonet.org       f105.n324.z2.fidonet.org!%s
.n324.z2.fidonet.org            f105.n324.z2.fidonet.org!%s
.z2.fidonet.org                 f105.n324.z2.fidonet.org!%s
.fidonet.org                    f105.n324.z2.fidonet.org!%s

Erstellen Sie so eine Datei nur, wenn Sie ifmail und FIDO verwenden.

Die Datei »routers«

# forces - erzwingt bestimmte Pfade
# Diese Datenbank existiert als harte Kodierung der Pfade zu verschiedenen
# Maschinen oder Domains. Sie findet Verwendung bei der Erstellung temporärer
# Tweaks zu anderen Routing Datenbanken. Um diese Datenbank zu ändern,
# bearbeiten Sie die Datei maps/force.path und geben »make« im maps/
# Unterverzeichnis ein.
forces:
driver = pathalias,             # Router zu Pfad-Datei Suche
method = /etc/smail/maps/table; # Transporte sind in dieser Datei
file = forcepaths,              # Datei enthält Info zu erwzungenem Pfad
proto = lsearch,                # verwedne sortierte Pfad-Datei
optional,
reopen                          # schließe, wenn nicht verwendet


uucp_neighbors:
driver=uuname,                  # verwende Programm, das Nachbarn
                                #  zurückgibt
transport=uux;
cmd="/usr/bin/uuname -a",       # verwende ausdrücklich das uuname Programm
domain=uucp                     # entferne Endung ».uucp«


# smart_host - ein teilweise spezifizierter Smarthost Zeiger
# Falls das Attribut »smart_path« in der Konfigurationsdatei als ein 
# Pfad vom lokalen zu einem entfernten Host definiert ist, dann werden
# Hostnamen, auf die keine andere Regel paßt, an den angegebenen
# entfernten Host geschickt. Das Attribut »smart_transport« kann zur 
# Spezifizierung eines davon verschiedenen Transports verwendet werden. 
# Wenn das "smart_path" Attribut nicht gesetzt ist, wird dieser Router
# ignoriert.
smart_host:
driver = smarthost,             # Spezialfall Treiber
transport = uux                 # stelle standardmäßig per UUCP zu
path=phreak

# ifmail - um E-Mails an FIDONET und umgekehrt zu senden
ifmail:
driver=pathalias,
transport=ifmail;
file=fidopaths,
proto=lsearch

Sie sollten nur dann ein ifmail-Kapitel eintragen, wenn Sie ifmail für FIDO E-Mails nutzen. Beachten Sie, daß Sie auch den Transportmodus von »uux« (UUCP) auf z.B. »smtp« oder sogar die Pfade zu verschiedenen Maschinen oder Domains in /etc/smail/maps/table hartkodieren können.

Dies ist dann sinnvoll, wenn Sie ausgehende E-Mails für Ihr lokales Netzwerk unverzüglich zugestellt haben wollen, während kein Bedarf dafür besteht, zu Ihrer uux Verbindung Ihres Internetzugangs geleitet zu werden.

Die Datei »transports«

# local - stelle E-Mail an lokale Benutzer zu
# Teile smail mit, direkt an die Benutzer Mailboxdateien im /var/spool/mail
# Verzeichnis anzufügen.
#local:
#driver = appendfile,                   # hänge Nachricht an Datei an
#-return_path,                          # schließe Return-Path: Feld ein
#local,                                 # verwende lokale Form für Zustellung
#from,                                  # unterstütze Von_ Zeile im Kopfteil
#unix_from_hack;                        # füge > vor Von im Körper ein
#
#file = /var/spool/mail/${lc:user},     # benutze diesen Ort bei Linux
#                                       # Beachte, daß mail-spooler
                                        #  "1777" Rechte hat
#file = ~/mailfile,                     # benutze diesen Ort für höhere
                                        #  Sicherheit
#group = mail,                          # Eigentümergruppe bei System V
#mode = 0660,                           # unter System V kann Gruppe mail
                                        #  Zugriff haben
#suffix = "\n",                         # zusätzlichen Zeilenumbruch einfügen
#append_as_user,


# Dies erlaubt jedem Benutzer, über eine »~/.procmailrc« Datei das
# Filtern und Speichern von E-Mails und E-Maillisten in verschiedenen
# Mailboxen zu kontrollieren, falls sie das wünschen.
local:
+inet,
-uucp,
driver = pipe,                  # hänge Nachricht an Datei an
#-return_path,                  # schließe Return-Path: Feld ein
#local,                         # verwende lokale Form für Zustellung
#from,                          # unterstütze Von_ Zeile im Kopfteil
#unix_from_hack;                # füge > vor Von im Körper ein

cmd = "/usr/bin/procmail",      # nutze procmail für lokale Zustellung
parent_env,                     # Umgebungsinfo von parent_Adresse
pipe_as_user,                   # nutze mit Adresse assoziierte
                                #  Benutzer-ID
umask = 0022,                   # umask für child-Prozeß
#-ignore_status,                # Status beim Verlassen glauben
#-ignore_write_errors,          # erneut versuchen bei abgerissener Pipe


# pipe - stelle E-Mails an Shell-Befehle zu
# Dies wird implizit genutzt, wenn smail Adressen antrifft, die mit einem
# vertikalen Balken beginnen, wie »|/usr/lib/news/recnews talk.bizarre«.
# Der vertikale Balken wird entfernt aus der Adresse, bevor sie zum
# Transport übergeben wird.
#pipe:
driver = pipe,                  # leite Nachrich an anderes Programm
#return_path, local, from, unix_from_hack;
#
#cmd = "/bin/sh -c $user",      # sende Adresse an die Bourne Shell
#parent_env,                    # Umgebungsinfo von parent_Adresse
#pipe_as_user,                  # verwende mit Adresse assoziierte
                                #  Benutzer-ID
#umask = 0022,                  # umask für child-Prozeß
#-log_output,                   # kein Log von stdout/stderr
#ignore_status,                 # Status beim Verlassen könnte falsch
                                #  sein, ignoniere
#ignore_write_errors,           # ignoriere abgebrochene Pipes


# file - stelle E-Mail an Dateien zu
# Dies findet implizit Verwendung, wenn smail Adressen antrifft, die mit
# einem Schrägstrich oder Tilde beginnen, wie »/usr/info/list_messages« oder
# vielleicht »~/Mail/inbox«.
#file:
driver = appendfile,
#return_path, local, from, unix_from_hack;
#
#file = $user,                  # Datei wird Adresse entnommen
#append_as_user,                # verwende mit Adresse assoziierte
                                #  Benutzer-ID
#expand_user,                   # dehne ~ und $ innerhalb der Adresse
                                #  aus
#check_path,
#suffix = "\n",
#mode = 0644


# uux - Zustellung an das rmail Programm auf einer entfernten UUCP Gegenstelle
#
# Bis zu 5 Empfängeradressen werden an den entfernten Host in einer UUCP
# Übertragung gesandt.
uux:
driver = pipe,
-uucp,
inet,
#uucp,                          # nutze UUCP Form der Adressierung
from,                           # unterstütze eine Von_ Zeile
max_addrs = 5,                  # maximal 5 Adressen pro Aufruf
max_chars = 200;                # maximal 200 Zeichen für Adressen
# das -r Flag verhindert sofortige Zustellung, Klammern um die
# $user Variable verhindern besondere Interpreation durch uux.
cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)",
#cmd="/usr/bin/uux - $host!rmail $(($user)$)",
ignore_write_errors,            # ignoriere abgerissene Pipes
umask = 0022,
#pipe_as_sender,


# uux_one_addr - stelle E-Mail über UUCP an einen entfernten Host zu, der
# jeweils eine Adresse entgegennehmen kann.
# Dies ist oft notwendig, wenn die Zustellung an eine Seite erfolgt, auf der
# eine unmodifizierte Version von 4.1BSD läuft.
uux_one_addr:
driver = pipe,
uucp,                           # verwende UUCP Art der Adressform
from;                           # unterstütze eine Von_ Zeile
die -r Kennung verhindert sofortige Zustellung
cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})",
umask = 0022,
pipe_as_sender


queueonly:
driver = pipe;                  # sende Nachrich an eine Pipe
cmd = "/usr/lib/sendmail -Q -f $sender -bm $user",
# nutze getmail für lokale Zustellung
user=root,                      # führe getmail als "root" aus
group=mail,                     # führe getmail als "mail" aus
parent_env,                     # Umgebungsinfo von Eltern_Adresse
-pipe_as_user,                  # verwende mit Adresse assoziierte
                                #  Benutzer-ID
umask = 0007,                   # umask für child-Prozeß

# um die Nachricht zuzustellen.  Der smtp Transport wird nur eingefügt, wenn
# es ein BSD Netzwerk gibt.
# Das uucp Attribut kann für Übertragungen innerhalb der UUCP Zone gesetzt
# werden. Das inet Attribut muß für Transfers innerhalb des Internet gesetzt
# werden.
# Beachte: Dies ist nur wenig optimal, es sollte ein backend geben, das
#  mit mehreren Nachrichten pro Verbindung umgehen kann.
# Weiterhin: Es kann erforderlich sein, »max_addrs« auf 100 zu
#  beschränken, da dies das untere Limit ist, für das SMTP eine Implementation
#  für den Umgang mit einer Adresse benötigt.
smtp:
driver=tcpsmtp,
inet,                           # wenn UUCP_ZONE nicht gesetzt ist
#uucp,                          # wenn UUCP_ZONE gesetzt ist
-max_addrs, -max_chars;         # kein Limit für Adressenzahl

short_timeout=5m,               # Timeout für kurze Operationen
long_timeout=2h,                # Timeout für längere SMTP
Operationen
service=smtp,                   # verbinde zu diesem Service Port
Für Internet Verwendung die 4 folgenden Zeilen auskommentieren
use_bind,                       # löse MX und multiple A Records auf
defnames,                       # verwende Standard Domänensuche
defer_no_connect,               # erneut versuchen, wenn Nameserver
                                #  nicht erreichbar
local_mx_okay,                  # einen MX an lokalem Host ablehnen


ifmail:
from,received,max_addrs=5,max_chars=200,
driver=pipe;
pipe_as_sender,
cmd="/usr/local/bin/ifmail -x9 -r$host $((${strip:user})$)"

Sie sollten ein ifmail Kapitel nur dann einbeziehen, wenn Sie ifmail für FIDO E-Mail verwenden. Außerhalb davon sollte es für Sie nicht notwendig sein, etwas an dieser Datei zu bearbeiten, die das Transportprotokoll (wie uux, smtp, ...) definiert, die Sie als Parameter in anderen .config Dateien verwenden können.

Nehmen Sie zu Kenntnis, daß ich einige Teile wie »pipes« oder »file« auskommentiert habe, um die Sicherheit zu erhöhen.

Das Verzeichnis »maps/«

Das Verzeichnis maps/ enthält die Dateien map und table:

Zuerst die Datei map:

#N      foo.bar foo2.bar2
#S      AT 486/RedHat Linux 1.2.13
#O      Organisation
#C      Kontakt
#E      Administration (E-Mail)
#T      Telefon
#P      Adresse
#R
#U      Hosts verbunden via uucp
#W      erstellt/bearbeitet von
#
hname polux

hname linux.eu.org

hname = polux
hname = polux.linux.eu.org

Bearbeiten Sie diese Datei wieder so, daß sie zu Ihrer Situation paßt (ich werde von polux.linux.eu.org versorgt).

Nun die Datei table:

*       uux

Sie können verschiedene Transporte zu verschiedenen Pfaden definieren, z.B. »smtp« für die Maschinen in Ihrem lokalen Netzwerk, »uux« (d.h. UUCP) für den Rest der Welt oder umgekehrt (ich verwende uucp für jede ausgehende E-Mail, dafür benutze ich »*«!).

Andere gute Beispiele

Die vorherigen Dateien sind diejenigen, die ich momentan auf meiner Seite verwende, Ihnen sollten keinerlei Probleme begegnen, wenn Sie sie als Beispiele oder Basis für Ihre eigenen Dateien nehmen.

Die folgenden Dateien sollen nur als gute Beispiele für die Konfiguration von smail auf anderem Weg dienen.

Die Datei »transports«

#ident »@(#) transports,v 1.2 1990/10/24 05:20:46 tron Exp«

# Siehe smail(5) für eine vollständige Beschreibung diese Dateiinhalts.

# local - Zustellung von E-Mail an lokale Benutzer
#
# Sage smail, direkt an die Benutzer-Mailboxdateien im Verzeichnis /usr/mail
# zuzustellen.
local:
driver = appendfile,            # füge Nachrich an eine Datei an
return_path,                    # einbetten eines Return-Path: Feldes
local,                          # nutze lokale Form für Zustellung
from,                           # unterstütze eine Von_ Zeile
unix_from_hack;                 # füge > vor Von im Body ein

file = /usr/mail/${lc:user},    # nutze diesen Ort bei System V
group = mail,                   # Eigentümergruppe bei System V
mode = 0660,                    # unter System V kann Gruppe mail
                                #  zugreifen
suffix = "\n",                  # zusätzlichen Zeilenumbruch einfügen
append_as_user,

# pipe - E-Mails an Shell-Befehle übergeben
#
# Dies wird implizit verwendet, wenn smail auf Adressen stößt, die mit einem
# senkrechten Balken beginnen, wie »|/usr/lib/news/recnews talk.bizarre«.
# Der senkrechte Balken wird aus der Adresse entfernt, bevor sie zum
# Transport gegeben wird.
pipe:
driver = pipe,                  # leite Nachricht an anderes Programm
return_path, local, from, unix_from_hack;

cmd = "/bin/sh -c $user",       # sende Adresse an die Bourne Shell
parent_env,                     # Umgebungsinfo von parent_Adresse
pipe_as_user,                   # nutze mit Adresse assoziierte
                                #  Benutzer-ID
umask = 0022,                   # umask für child-Prozeß
-log_output,                    # kein Log von stdout/stderr
ignore_status,                  # Status beim Verlassen kann falsch
                                #  sein, ignorieren
ignore_write_errors,            # ignoriere abgebrochene Pipes

# file - Übergabe von E-Mails an Dateien
#
# Dies wird implizit verwendet, wenn smail auf Adressen trifft, die mit einem
# Schrägstrich oder Tilde beginnen, wie »/usr/info/list_messages« oder
# vielleicht »~/Mail/inbox«.
file:
driver = appendfile,
return_path, local, from, unix_from_hack;

file = $user,                   # Datei wird aus Adresse entnommen
append_as_user,                 # nutze mit Adresse assoziierte
                                #  Benutzer-ID
expand_user,                    # erweitere ~ und $ innerhalb der
                                #  Adresse
suffix = "\n",
mode = 0644

# uux - Übergabe an Programm rmail auf einer entfernten UUCP Seite
#
# Bis zu 5 Empfängeradressen werden mit einer UUCP Transaktion an den
# entfernten Host übertragen.
uux:
driver = pipe,
uucp,                           # nutze UUCP Form der Adressierung
from,                           # unterstütze eine Von Zeile
max_addrs = 5,                  # max. 5 Adressen pro Aufruf
max_chars = 200;                # max. 200 Zeichen für Adressen

# Das -r Flag verhindert die sofortige Zustellung, Klammern
# um die $user Variable verhindern spezielle Interpretation durch uux.
cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)",
umask = 0022,
pipe_as_sender

# uux_one_addr - Zustellung der E-Mails über UUCP an einen entfernten Host,
# der nur eine Adresse mit einem Mal annehmen kann.
#
# Dies ist oft dann notwendig, wenn die Zustellung an eine Seite erfolgt,
# auf der eine unmodifizierte Version von 4.1BSD läuft.
uux_one_addr:
driver = pipe,
uucp,                           # nutze UUCP Form der Adressierung
from;                           # unterstütze eine Von Zeile

# Das -r Flag verhindert die sofortige Zustellung
cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})",
umask = 0022, pipe_as_sender

# demand - Übergabe an ein entferntes rmail Programm, Abfrage bei Bedarf
demand:
driver = pipe,
uucp, from, max_addrs = 5, max_chars = 200;

# ohne -r Flag versuche sofort, Kontakt mit der Gegenstelle aufzunehmen
cmd = "/usr/bin/uux - -g$grade $host!rmail $(($user)$)",
umask = 0022, pipe_as_sender

# uusmtp - Übergabe an das Programm rsmtp auf einer entfernten UUCP Seite
#
# Zustellung unter Verwendung eines einfachen, gestapelten SMTP Protokolls
# an die entfernte Maschine. Das erlaubt die Verwendung von viel mehr
# willkürlichen Adressen. Es beseitigt zudem das Limit von Empfängeradressen
# pro uux Aufruf.
uusmtp:
driver = pipe,
bsmtp,                          # sende gestapelte SMTP Befehle
-max_addrs,                     # es gibt kein Limit bei Anzahl oder
-max_chars;                     # max. Größe der Empfängeradressen.

# unterstütze -r zur Verhinderung der sofortigen Zustellung, die
# Empfängeradressen werden in den Daten speichert, die an die
# Standardeingabe von rsmtp gesendet werden.
cmd = "/usr/bin/uux - -r -g$grade $host!rsmtp",
umask = 0022, pipe_as_sender

# demand_uusmtp - Übergabe an ein entferntes rsmtp Programm, Abfrage bei
# Bedarf
demand_uusmtp:
driver = pipe,
bsmtp, -max_addrs, -max_chars;

# ohne -r Flag versuche sofort, Kontakt mit der Gegenstelle aufzunehmen
cmd = "/usr/bin/uux - -g$grade $host!rsmtp",
umask = 0022, pipe_as_sender

# smtp - Zustellung per SMTP über TCP/IP
#
# Verbinde mit einem entfernten Host unter Verwendung von TCP/IP und initiiere
# eine SMTP Konversation, um die Nachricht zuzustellen. Der SMTP Transport
# ist nur enthalten, wenn ein BSD Netzwerk existiert.

# Beachte: Es kann erforderlich sein, »max_addrs« auf 100 zu begrenzen, da
# das die untere Grenze ist, ab der SMTP eine Implementation benötigt, um
# eine Nachricht zu handhaben.
smtp:
driver = smtp,
-max_addrs,
-max_chars

Die Datei »table«

#ident »@(#) table,v 1.2 1990/10/24 05:20:31 tron Exp«

# Diese Datei benennt die Transporte, die von »bargw« zur Übertragung an
# bestimmte Hosts verwendet werden sollen.

#host           transport
#--------       ---------
curdsgw         demand_uusmtp   # Übergabe per batch SMTP
oldbsd          uux_one_addr    # 4.1BSD Seiten können nicht mehr als eine
                                #  Adresse gleichzeitig annehmen
sun             demand          # rufe sun auf, wenn es E-Mails zu versenden
                                #  gibt
*               uux             # für alle anderen frage in Intervallen ab

Neustart von inetd

Um smail als SMTP Daemon zu starten, fügen sie eines der Folgenden zu /etc/inetd.conf hinzu:

smtp stream tcp nowait  root  /usr/bin/smtpd smtpd

Alternativ:

smtp stream tcp nowait  root  /usr/sbin/tcpd  /usr/sbin/in.smtpd

Abgehende E-Mails werden bei der Benutzung von elm automatisch versandt.

smail mit SMTP

Normalerweise verwenden ISPs SMTP, deshalb sollten Sie keine Probleme beim Versand Ihrer E-Mails haben. Wenn zu dem Zeitpunkt keine Internetverbindung besteht, zu dem Sie E-Mails versenden, dann liegt die E-Mails unter /var/spool/smail/input. Wenn dann die nächste Verbindung zustande kommt, wird runq gestartet, das den E-Mail Versand auslöst. Jedenfalls ist das Empfangen von E-Mails das Problem, da Ihr Provider viele Clients hat, um die er sich kümmert, nicht bloß Sie.

Gewöhnlich beziehen Sie Ihre E-Mail via POP Protokoll, sehen Sie dazu in den POP-Abschnitt weiter unten.

6.3 sendmail+IDA (veraltet)

Für große Seiten ist sendmail aufgrund der »unglaublichen Einfachheit der Verwendung« (ein sehr relatives Gefühl, wenn Sie qmail kennen) eine gute Wahl. Aber Sie müssen sich zwischen sendmail+IDA und sendmail 8.x entscheiden:

Zur Erinnerung: Linux-Neulinge oder diejenigen, die über Sicherheit und Leichtigkeit der Konfiguration besorgt sind, sollten lieber die Verwendung von smail oder qmail in Erwägung ziehen, die sicherer und leichter zu nutzen sind.

Installation der Quellen

Falls Ihre Dirstribution Sie nicht mit einem installationsfertigen Paket von sendmail versorgt (».rpm« für RedHat, Caldera und SuSE, ».deb« für Debian), laden Sie einfach die Quellen herunter und starten:

cd / ; tar -zxvf sendmail5.67b+IDA1.5.tgz
cd /usr/local/lib/mail/CF

Kopieren Sie die Dateien sample.m4 und local.m4 nach »IhrHostName.m4«.

Ändern Sie die vorgegebenen Hostnamen, Aliase, Smarthost und füllen Sie mit dem für Ihre Seite richtigen Werten. Die Vorgabedatei ist eine reine UUCP-Seite (so nicht mehr in Version 8.x), die Domänen in den Köpfen hat und die mit einem Smarthost kommunizieren. Geben Sie nun folgendes ein:

make IhrHostName.cf

Kopieren Sie die entstandene Datei nach /etc/sendmail.cf.

Falls Sie nur UUCP haben, brauchen Sie keine der in der README.Linux Datei erwähnten Tabellen zu erstellen.

Sie müssen die Dateien nur per touch erstellen, damit der Makefile arbeitet. Bearbeiten Sie die ».m4« Datei, wenden Sie make auf die sendmail.cf Datei an und starten Sie einen Test.

Falls Sie nur UUCP haben und mit Gegenstellen zusätzlich zu Ihrem »Smart-Host« kommunizieren, müssen Sie für jeden »uucpxtable« Einträge anfügen (oder E-Mails zu denen laufen ebenfalls über den Smarthost) und dbm auf die überarbeiteten »uucpxtable« anwenden.

Wenn Sie Rich Brauns original Binärdistribution 5.67a laufen lassen, werden Sie die Konfiguration einfrieren müssen, wenn Sie ihre ».cf« Datei mit

/usr/lib/sendmail -bz

wechseln, um den Wechsel wirksam werden zu lassen

Außerdem sollten Sie Ihre Version zumindest auf den Stand von 5.67b bringen, da es ein ärgerliches Sicherheitsloch in 5.67a und früheren Versionen gibt. Eine andere nette Sache ist, daß, wenn Sie »mail.debug« gesetzt haben und syslog starten, Ihre ein- und ausgehenden E-Mails im Log eingetragen werden. Sehen Sie für Einzelheiten in die Datei /etc/syslog.conf.

Die Quellen für sendmail+IDA finden Sie unter:

vixe.cso.uiuc.edu
Sie brauchen keinen Patch, um unter Linux zu laufen, wenn Sie etwas wie einen Kernel 1.00 laufen haben.

Wenn Sie einen Kernel > 1.1.50 haben, bekommen Sie den Spaß des Rückbaus der meisten der Linux-spezifischen Patches, die jetzt in den Vanilla Quellen sind. Ich habe Ihnen gesagt, daß dieses sendmail nur für alte Kernels war :-).

Es ist äußerst fraglich, wo dies notwendig ist: einfach »make« eingeben und wenn es sich aufbläht, gehen Sie zu der Zeile in den Quellen und kommentieren den darin enthaltenen Linux-spezifischen Code aus.

Wenn Sie vorhaben, sendmail+IDA laufen zu lassen, empfehle ich Ihnen sehr, die Version sendmail5.67b+IDA1.5 zu nehmen, da dort alle Linux-spezifischen Patches in den Vanilla Quellen enthalten sind und verschiedene Sicherheitslöcher gestopft wurden, die in den älteren Versionen waren, die Sie vielleicht vor dem 1. Dezember 1993 erhalten oder eingebaut haben.

Jetzt sollten Sie mit dem Kernel 2.0 sendmail 8.x statt sendmail+IDA nutzen, aber ich sagte bereits, Sie sollten besser sendmail 8.x wählen :-).

Die Datei sendmail.m4

Für sendmail+IDA müssen Sie eine sendmail.m4 Datei erstellen, statt die sendmail.cf Datei direkt zu bearbeiten. Das Schöne daran ist, daß die Einstellung der E-Mail Konfiguration einfach, die in smail oder traditionellem sendmail extrem schwierig (wenn nicht sogar für manche ganz unmöglich richtig zu machen) ist.

Die sendmail.m4 Datei, die dem oben gebrachten smail Beispiel entspricht, sieht wie folgt aus:

dnl #------------------ BEISPIELDATEI SENDMAIL.M4 ------------------
dnl #
dnl # Der String »dnl« ist das m4 Äquivalent zum Auskommentieren einer
dnl # Zeile (nun, nicht ganz, aber nutzen Sie es für diesen Zweck, 
dnl # wenn Sie müssen :-)).
dnl # Generell sollten Sie LIBDIR aus den kompilierten Pfaden überbrücken.
dnl #define(LIBDIR,/usr/local/lib/mail)dnl      # wohin alle unterstützten
dnl                                             #  Dateien gehen
define(LOCAL_MAILER_DEF, mailers.linux)dnl      # E-Mail Program für Lokales
define(POSTMASTERBOUNCE)dnl                     # Postmeister bekommt die
dnl                                             #  »Rausschmeißer«
define(PSEUDODOMAINS, BITNET UUCP)dnl           # nicht DNS versuchen
dnl #
dnl #-------------------------------------------------------------
dnl #
dnl # Namen, unter denen wir bekannt sind
define(PSEUDONYMS, myhostname.subdomain.domain myhostname.UUCP)
dnl #
dnl # unser Primärname
define(HOSTNAME, myhostname.subdomain.domain)
dnl #
dnl # unser UUCP-Name
define(UUCPNAME, myhostname)dnl
dnl #
dnl #-------------------------------------------------------------
dnl #
define(UUCPNODES, |uuname|sort|uniq)dnl       # unsere UUCP Nachbarn
define(BANGIMPLIESUUCP)dnl                    # sicherstellen, daß UUCP
define(BANGONLYUUCP)dnl                       #  E-Mails richtig behandelt
define(RELAY_HOST, my_uucp_neighbor)dnl       # unser Smart-Relay-Host
define(RELAY_MAILER, UUCP-A)dnl               # wir erreichen Moria via UUCP
dnl #
dnl #--------------------------------------------------------------------
dnl #
dnl # die verschiedenen dbm Nachschlagetabellen
dnl #
define(ALIASES, LIBDIR/aliases)dnl            # System Aliase
define(DOMAINTABLE, LIBDIR/domaintable)dnl    # Domainhosts
define(PATHTABLE, LIBDIR/pathtable)dnl        # Pfaddatenbank
define(GENERICFROM, LIBDIR/generics)dnl       # generische »Von«-Adressen
define(MAILERTABLE, LIBDIR/mailertable)dnl    # E-Mail per Host oder Domain
define(UUCPXTABLE, LIBDIR/uucpxtable)dnl      # Pfade zu von uns versorgten
                                              #  Hosts
define(UUCPRELAYS, LIBDIR/uucprelays)dnl      # Umgehungspfade
dnl #
dnl #--------------------------------------------------------------------
dnl #
dnl # Einschluß des »wahren« Code, der alles zum Laufen bringt
dnl # (mit Quellcode zur Verfügung gestellt)
dnl #
include(sendmail.mc)dnl                         # NOTWENDIGER EINTRAG!!!
dnl #
dnl #------------ ENDE DER BEISPIEL DATEI SENDMAIL.M4 -------------------

Definition eines lokalen E-Mail Programms

Anders als anderen Unix Distributionen kommt Linux nicht mit lokalen Zustellungsprogramm (MDA) als Standard daher.

Die Slackware Distribution schon. Nun, es wird zumindest durch das »einfach-zu-verwendende-aber-langwierige« Installationsskript angeboten und verwendet procmail.

Jetzt, wenn normalerweise deliver oder procmail installiert ist, um mit einem vorgegebenen sendmail Setup lokale E-Mails zu handhaben, wird dieses ohnehin sehr komplexe Setup nicht noch komplexer gemacht. Ich empfehle die Verwendung der allgemein erhältlichen Programme deliver oder procmail, die in einigen Linuxdistributionen als optionale Pakete enthalten sein können.

Dafür müssen Sie »LOCAL_MAILER_DEF« in der Datei sendmail.m4 definieren, das auf eine Datei zeigt, die wie folgt aussieht:

# -- /usr/local/lib/mail/mailers.linux --
#     (lokale E-Mail Programme für Verwendung unter Linux)
Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u
Mprog,  P=/bin/sh,          F=lsDFMeuP, S=10, R=10,    A=sh -c $u

Es gibt auch eine eingebaute Vorgabe für deliver in der Datei sendmail.mc, die in die Datei sendmail.cf einbezogen wird. Zur Spezifizierung verwenden Sie statt der Datei mailers.linux folgende Definition in Ihrer sendmail.m4 Datei:

dnl --- (in sendmail.m4) ---
define(LOCAL_MAILER_DEF, DELIVER)dnl            # E-Mail Programm für lokale
dnl                                             #  Zustellung

Unglücklicherweise geht sendmail.mc davon aus, daß deliver in /bin installiert ist, was bei Slackware 1.1.1 nicht der Fall ist; dort liegt es unter /usr/bin. In dem Fall müssen Sie es entweder mit einem Link täuschen oder deliver aus den Quellen neu aufbauen, so daß es unter /bin residiert. Bitte beachten Sie, daß procmail generell besser als deliver ist, zum Beispiel für die Filterung von E-Mails.

Die sendmail+IDA dbm Tabellen

Das Einstellen besonderer Umstande für Sites oder Domänene kann besser durch eine Anzahl optionaler dbm Tabellen erreicht werden, als durch eine direkte Bearbeitung der Datei sendmail.cf.

Sehen Sie für mehr Einzelheiten in die Ausgabe des Linux Journal vom Juli 1994 (wenn Sie die noch finden können :-)), die Dokumentation in den Quellen oder in das sendmail Kapitel zu der neuesten Version des Linux Documentation Projects Networking Administration Guide, das sehr bald verfügbar sein wird.

mailertable

definiert spezielles Verhalten für entfernte Host oder Domains

uucpxtable

erzwingt UUCP Zustellung der E-Mails an Hosts im DNS Format

pathtable

definiert UUCP Pfade zu entfernten Hosts oder Domains

uucprelays

Abkürzung von Pfadalias Pfaden zu bekannten entfernten Hosts

genericfrom

konvertiert interne Adressen zu generischen, die nach außen sichtbar sind

xaliases

konvertiert genererische Adressen nach/von gültigen internen Adressen

decnetxtable

konvertiert RFC-822 Adressen zur DECnet Adressform

Also welche Einträge werden wirklich benötigt?

Wenn keine der optionalen dbm Tabellen verwendet werden, stellt sendmail E-Mails über »RELAY_HOST« und »RELAY_MAILER« zu, die in der Datei sendmail.m4 definiert sind, die zur Generierung der sendmail.cf verwendet wird. Es ist leicht möglich, diese Umstände durch Einträge in die Domaintabelle oder »uucpxtable« zu übergehen.

Eine generische Seite im Internet mit Domain Name Service (DNS) oder eine reine UUCP Seite, die alle E-Mails per UUCP über einen »Smart Relay Host« weiterleitet, braucht vielleicht überhaupt keine spezifischen Tabelleneinträge.

Jedes System sollte virtuell die Makros »DEFAULT_HOST« und »PSEUDONYMS« setzen, die den anerkannten Sitenamen und Aliase, unter denen sie bekannt ist, entspricht.

Falls alles, was Sie haben, ein Übertragungshost und E-Mailprogramm ist, müssen Sie diese Voreinstellungen nicht setzen, da sie automatisch arbeiten; UUCP Hosts brauchen vielleicht zusätzlich das Setzen von »UUCPNAME« auf ihren offiziellen UUCP-Namen.

Letztere werden vielleicht außerdem »RELAY_MAILER« und »RELAY_HOST« setzen, die Smart-Host Routing über eine E-Mail Weiterleitung einschalten.

Der zu verwendende E-Mail Transport wird in »RELAY_MAILER« eingestellt und sollte gewöhnlich »UUCP-A« für UUCP Seiten sein. Wenn Ihre Seite nur SMTP einsetzt und DNS (Domain Name Service) spricht, werden Sie den »RELAY_MAILER« wechseln.

Wenn auf Ihrer Seite SLIP ist, werden Sie den leichten Ausweg nehmen wollen und alle ausgehenden E-Mails an Ihren Service Povider weiterleiten wollen, damit dieser die richtigen Dinge damit tut. Dafür müssen Sie »ISOLATED_DOMAINS« und »VALIDATION_DOMAINS« auf Ihre Domain definieren. Weiterhin ist »RELAY_HOST« als Ihr Service Provider zu definieren und der »RELAY_MAILER« muß »TCP« sein. Natürlich werden Sie nach einer Berechtigung fragen wollen, bevor Sie irgend ein System als Ihre generell verwendete Stelle zur Weiterleitung einstellen.

6.4 sendmail 8.x

sendmail 8.7.x von Berkeley war die letzte Hauptrevision nach sendmail5. Es hatte einen wunderbaren eingebauten Support unter Linux: einfach

make Linux

eingeben und alles war eingestellt.

Ihnen wird am besten damit gedient sein, sich eines der verschiedenen Binärpaket aus den normalen Linux Archivseiten herauszugreifen, als wenn Sie sich alles wie Berkley mit dbm selbst erkämpfen müssen.

Der Nachteil von sendmail v8 besteht darin, daß Sie das absolute Minimum konfigurieren müssen, damit die Arbeit erledigt wird; das Folgende ist ein Beispiel, das Sie zumindest recht nahe heranbringen sollte.

Eine Beispieldatei 8.7.x mc

Fast wie sendmail+IDA verwendet sendmail v8 m4, um eine Konfigurationsdatei in eine volle sendmail.cf zu verarbeiten, die sendmail verwendet. Das Folgende ist meine momentane .mc Datei für meinen Rechner (PPP zum Internet für ausgehende E-Mails, UUCP für eingehende E-Mails).

dnl divert(-1)
#---------------------------------------------------------------------
#
# Das ist die .mc Datei für einen Linux Host, der wie folgt eingestellt
# ist:
#
#       - verbunden zum Internet für ausgehende E-Mails (hier PPP)
#       - verbunden via UUCP für eingehende E-Mails
#       - Header enthalten Domain
#       - kein lokaler E-Mailer (statt dessen »deliver«)
#       - kein laufendes DNS, also nicht nach außen nicht anerkannt
#       - alle nicht-lokalen ausgehenden E-Mails gehen an den
#         RELAY_HOST über SMTP
#         (Wir haben PPP laufen und lassen unseren Service Provider
#          die Arbeit erledigen)
#
#                                       vds 3/31/95
#
#---------------------------------------------------------------------
include(`../m4/cf.m4')
VERSIONID(`linux nodns relays to slip service provider smarthost')
dnl
Cwmyhostname.myprimary.domain myhostname.UUCP localhost
OSTYPE(linux)
FEATURE(nodns)dnl
FEATURE(always_add_domain)dnl
FEATURE(redirect)
FEATURE(nocanonify)
dnl MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)dnl
define(`RELAY_HOST', smtp:my.relay.host.domain)
define(`SMART_HOST', smtp:my.relay.host.domain)
define(`UUCP_RELAY', smtp:my.relay.host.domain)
define(`LOCAL_MAILER_PATH', `/bin/deliver')
define(`LOCAL_MAILER_ARGS', `deliver $u')

sendmail v8 tidbits

Es gibt einige Unterschiede, die ich gegenüber »IDA bigots« erwähnen will. Bis jetzt habe ich den folgenden entdeckt:

Statt

runq
muß für die Warteschlange (»Queue«)
sendmail -q
gestartet werden.

6.5 Lokale Zustellprogramme

Anders als die meisten Betriebssysteme hat Linux keine E-Mail Unterstützung »eingebaut«. Sie benötigen ein Programm, um lokale E-Mails zuzustellen, wie lmail, procmail oder deliver.

Wie auch immer, jede neuere Distribution enthält jetzt ein entsprechendes Programm.

Eine Beschreibung, wie sie für die lokale Zustellung verwendet werden, findet sich im oben erwähnten Binärrelease von »sendmail5.67b+IDA1.5«.


Inhalt