Sendmail und Fetchmail: Ein lokaler Mail Server

ArticleCategory:

System Administration

AuthorImage:

[Photo de l'auteur]

TranslationInfo:

Original in fr John Perr

fr to en: John Perr

en to de: Ralf Spenneberg

AboutTheAuthor:

John verwendet Linux seit 1994; er ist einer der Editoren der französischen Ausgabe des LinuxFocus.

Abstract:[Here you write a little summary]

Dieser Artikel erklärt die Konfiguration von Sendmail und Fetchmail auf einem lokalen Rechner der über eine PPP Verbindung mit dem Internet kommuniziert. Eine derartige Konfiguration erlaubt die Verwendung jedes UNIX E-mail-Clients (nicht nur Netscape). Bei jedem Aufbau einer PPP Verbindung werden die Nachrichten ausgetauscht.

ArticleIllustration:

[Illustration]

ArticleBody:

Einführung

Damit auf dem Linux Rechner überhaupt E-mails verwaltet werden können, benötigt man einen Mail Transfer Agent (MTA). Der bekannteste ist sicherlich Sendmail, aber es gibt eine Reihe weiterer wie zum Beispiel qmail, welcher schneller und einfacher zu konfigurieren ist, oder exim, der in Standard Debian Konfigurationen enthalten ist. Wir werden uns in diesem Artikel aber auf Sendmail beschränken und das Konfigurationskit der Berkley Universität von Eric Allman verwenden.
Um die E-mails, die für uns bei unserem Internet Service Provider (ISP) lagern abzuholen, benötigen wir zusätzlich Fetchmail. Fetchmail wird diese E-mails abholen und an das lokale Sendmail zur Weiterverarbeitung und Einordnung in die lokalen Mailboxen übergeben. Fetchmail kann unter anderem für diese Aufgabe die Protokolle pop-3 oder imap einsetzen.

Konfiguration

Zur Konfiguration von Sendmail ist die Installation folgender Pakete erforderlich (rpm Format):

In Abhängigkeit der verwendeten Distribution können sich die Namen leicht unterscheiden. Die Versionsnummern können ebenfalls abweichen. Tatsächlich erforderlich sind die ersten beiden Pakete.(Anmerkung des Übersetzers: Aktuell ist Sendmail 8.10. Es sollte mindestens Sendmail 8.9 installiert werden um die neuen Sicherheitsfeatures zu unterstützen)

Am einfachsten erfolgt nun die Konfiguration von Sendmail in den folgenden Schritten:

  1. Wir gehen von folgenden Voraussetzungen aus:
  2. Wir erzeugen uns eine Datei:/usr/lib/sendmail-cf/cf/config.mcmit folgendem Inhalt:
    # start of config.mcinclude(`../m4/cf.m4')dnl
    OSTYPE(`linux')dnl
    define(`SMTP_MAILER_FLAGS', `e9')dnl
    FEATURE(redirect)dnl
    FEATURE(nocanonify)dnl
    FEATURE(always_add_domain)dnl
    FEATURE(local_procmail)dnl
    GENERICS_DOMAIN(localhost.localdomain localhost localhost)
    FEATURE(genericstable)FEATURE(masquerade_envelope)dnl
    define(`confCF_VERSION',`dede's cf - 22/05/98')dnl
    define(`confCON_EXPENSIVE',`True')dnl
    define(`confME_TOO',`True')dnl
    define(`confCOPY_ERRORS_TO',`Postmaster')dnl
    define(`confDEF_CHAR_SET',`ISO-8859-1')dnl
    define(`confMIME_FORMAT_ERRORS',`True')dnl
    define(`SMART_HOST',`smtp8:[smtp.isp.net]')dnl
    define(`confTO_QUEUEWARN',`24h')
    MAILER(local)
    MAILER(smtp)
    # End of config.mc
    

    Die Zeile define(`SMART_HOST'.... weist Sendmail an alle E-mails die an externe Benutzer gerichtet sind an den Mailserver unseres Providers zuzustellen, anstatt sie direkt zuzustellen. Unser Provider wird dann für uns die weitere Zustellung übernehmen.
  3. Desweiteren erzeugen wir /etc/genericstable:
    dede:   toto@isp.net
    root:   toto@isp.net
    news:   toto@isp.net
    
  4. Wir überprüfen, daß in der Datei /etc/alias folgende Einträge existieren:
    MAILER-DAEMON:  postmaster
    postmaster:     root
    
  5. Wir modifizieren oder erzeugen die Datei /etc/nsswitch.conf wie folgt:
    passwd:      files
    shadow:      files
    group:       files
    hosts:       files dns
    services:    files
    networks:    files
    protocols:   files
    rpc:         files
    ethers:      files
    netmasks:    files
    bootparams:  files
    netgroup:
    publickey:  
    automount:   files
    aliases:     files
    
    (Alle Zeilen außer host sollten nur den Eintrag "files" besitzen)

  6. Anschließend generieren wir /etc/sendmail.cf mit:
    m4 config.mc > /etc/sendmail.cf
    und setzen folgende Berechtigungen:
    -rw------- 1 root root 26468 mai 12 22:52 /etc/sendmail.cf

  7. Die Generierung der Adressumsetzungstabelle erfolgt mit:
    /usr/bin/sendmail -bi -oA/etc/genericstable
    Dabei sollte die Datei /etc/genericstable.db erzeugt werden.

  8. Das erneute Einlesen der Aliases Tabelle, falls wir etwas geändert haben, wird mit dem Befehl:
    newaliases
    angestoßen.
  9. Die Datei /etc/hosts sollte eine der folgenden Zeile ähnliche Zeile enthalten:
    127.0.0.1 localhost.localdomain localhost localhost

  10. Sendmail neustarten:
    kill `head -1 /var/run/sendmail.pid`
    /usr/bin/sendmail -bd -os

    Sendmail testen:

    Damit ist die Konfiguration von Sendmail abgeschlossen. Nun sollte die Funktionsfähigkeit überprüft werden:
    Wir erzeugen eine Datei test.mail mit folgendem Inhalt:

    Subject: Lokaler Test
    Erste Zeile unserer Nachricht
    (leere Zeile)


    und rufen auf:
    /usr/bin/sendmail -v dede < test.mail

    Die folgenden Zeilen sollten angezeigt werden:

    dede... Connecting to localdede... Sent
    

    Nun läßt sich durch einen Aufruf von mail oder einem anderem E-mail Client (nicht Netscape) die Ankunft der E-mail kontrollieren.

    Damit nun Netscape lokale E-mail liest konfigurieren wir es wie folgt:


    Der Befehl chmod 777 funktioniert ebenfalls, kann jedoch ein Sicherheitsloch darstellen, falls auf unserem Rechner sich noch weitere Benutzer befinden. chmod 1777 besagt, daß nur der Besitzer einer Datei diese auch löschen darf und nicht jeder mit Schreibberechtigung.

    Von nun an wird Netscape die E-mails direkt von dem PC empfangen, selbst wenn dieser nicht mit dem Internet verbunden ist. Natürlich lassen sich auch andere E-mail-Clients einsetzen, wie zum Beispiel XFmail, emacs, mutt, pine usw..

    Konfiguration von Fetchmail

    Bevor wir nun unseren E-mail Server im Internet ausprobieren, müssen wir Fetchmail konfigurieren, damit es die für uns bei unserem Provider gespeicherten E-mails abholt: Wir erzeugen eine Datei .fetchmailrc in /home/dede:

    poll pop.isp.net protocol POP3
            user toto is dede
            password XXXXXXX
    

    Dabei sind toto und XXXXX die Anmeldekennung und das Kennwort unseres E-mail Kontos bei pop.isp.net. Falls wir mehr als eine Mailbox hätten, würden wir hier für jede Mailbox einen derartigen Eintrag vornehmen.
    Die Datei .fetchmailrc muß folgende Berechtigungen aufweisen, damit Fetchmail sie nicht zurückweist:

    -rw-------   1 dede   dede   189 oct  6 21:45 /home/dede/.fetchmailrc
    

    Nun zum echten Test:

    Diese Nachricht sollte in dem Mailqueue angezeigt werden: mailqAnschließend verbinden wir uns mit unserem ISP und geben folgenden Befehl ein:
    /usr/bin/sendmail -q
    

    sendmail -q arbeitet den Queue ab und verschickt die E-mail. Nach einiger Zeit sollte ein Aufruf von fetchmail unsere E-mails abholen und wir sollte die E-mail von dem Spiegel zurückerhalten. Wenn alle E-mails angekommen sind, können wir die Verbindung zum ISP trennen.

    Automatisierung des Prozesses

    Nachdem nun alles konfiguriert ist, wollen wir nun den Prozeß so automatisieren, daß er automatisch bei jedem Verbindungsaufbau durchgeführt wird.

    Bei einem Verbindungsauf- bzw. Abbau werden von dem PPP-Dämon die Dateien /etc/ppp/ip-up bzw, ip-down ausgeführt. Zunächst kontrollieren wir, daß sich in diesen Dateien folgende Zeile befindet oder fügen sie an:
    [ -x /etc/ppp/ip-down.local ] && /etc/ppp/ip-down.local $*

    Die Ausführung der Dateien /etc/ppp/ip-up oder ip-down führt dann automatisch zum Aufruf der Dateien ip-up.local oder ip-down.local:

    #!/bin/bash
    # /etc/ppp/ip-up.local
    
    #Record connection parameters
    echo `date` $4 $5 ppp-on >> /etc/ppp/history
    tail -n 1 Verbindungsfehler >> /etc/ppp/history
    
    # Send waiting mail
    echo Sende E-mail... >; /dev/console
    /usr/sbin/sendmail -q
    echo E-mail versandt.  > /dev/console
    
    # Get mail waiting on the pop server
    echo Hole E-mail... > /dev/console
    fetchmail  > /dev/console 2>&1
    echo E-mail bekommen.  > /dev/console
    
    #End
    exit 0
    # end of /etc/ppp/ip-up.local
    

    Die beiden wichtigen Befehle in diesem Skript sind sendmail -q und fetchmail. Die anderen Befehle haben lediglich kosmetischen Charakter und erlauben:

    #!/bin/bash
    # /etc/ppp/ip-down.local
    #Record connection parameters
    echo `date` ppp-off >> /etc/ppp/history
    
    #end
    
    exit 0
    # end of /etc/ppp/ip-down.local
    

    Diese Dateien laufen in dem Benutzerkontext von root, daher muß die Datei .fetchmailrc in das /root Verzeichnis kopiert werden.

    Haben wir permanenten Zugang zu dem Internet so versendet Sendmail die E-mails regelmäßig wenn es folgendermaßen als Dämon gestartet wird:
    sendmail -bd -q10m
    So würde Sendmail alle 10 Minuten die E-mails versenden. Fetchmail läßt sich ebenfalls so starten:
    fetchmail -d 600
    So würde Fetchmail eingehende E-mails alle 10 Minuten (600 Sekunden) abholen.

    Üblicherweise werden derartige Befehle in den Start (oder init) Dateien in den Verzeichnissen /etc/rc oder /etc/rc.d/ eingetragen.(Die exakten Namen der Verzeichnisse hängen von der Distribution ab).

    Fazit

    Eine derartige Konfiguration erlaubt das Senden der in dem Mail-Queue (mailq) wartenden E-mails und das Abholen der bei dem Provider wartenden eingehenden E-mails. xbiff, xmailbox oder ähnliche Software kann nun anzeigen, daß neue E-mails eingegangen sind. Weiteres Feintuning ist mittels procmail möglich. Dies wurde eingehend in folgendem Artikel erklärt:November 1997 Artikel von Angel Lopez.

    Weitere interessante Artikel

    Dokumentation zu Sendmail und Fetchmail: