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:   [email protected]
    root:   [email protected]
    news:   [email protected]
    
  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: