Login
Immer anmelden
SSL Login

 
Newsletter
Werbung
Shopping
International Shopping
 
 


Yatego Shopping bei über 10000 Händlern und über
3 Mio. Artikel.


Linux

:

Linux-Bücher

Handy
Shop

  und Computer.

Viele Services

:

Apple iPad Reader,


Ratgeber,

 

Techniktops,

 

Yatego Clicks

  & über 3000

Gutscheine.

 
Mo, 22. November 1999, 00:00

Lokaler Mailserver mit sendmail und fetchmail

userdb zur Adresskorrektur (Header-Rewriting)

Die Datenbank für die Zuordnung der Email-Adressen zu den lokalen Benutzernamen und umgekehrt sollte wie folgt aussehen: Für jeden Benutzer werden zwei Zeilen in der Text-Datei /etc/mail/userdb mit folgender Syntax definiert:

lokaler Loginname:mailname Email-Adresse
Email-Adresse:maildrop lokaler Loginname

Beispiel:

# /etc/mail/userdb
martig:mailname stefan.martig@rhone.ch
stefan.martig@rhone.ch:maildrop martig

Für Sendmail muss diese Textdatei in ein verständliches Datenbank-Format umgewandelt werden:

makemap btree /etc/mail/userdb.db < /etc/mail/userdb

Testen der Konfiguration

Nun sollte man Sendmail dazu bringen, die Konfigurationsdateien neu einzulesen, damit man einige Tests machen kann. Mit dem folgenden Befehl geschieht dies:

killall -HUP sendmail

Die Umsetzung der lokalen Namen mit der userdb.db-Datei kann nun wie folgt geprüft werden (kontrollieren Sie auch unbedingt, ob root tatsächlich lokal abgearbeitet wird, ansonsten erreicht den root niemand mehr und Sie als Systemadministrator werden auch keine Meldungen von Daemonen etc. erhalten :-)

/usr/sbin/sendmail -bv stefan.martig@rhone.ch
/usr/sbin/sendmail -bv martig
/usr/sbin/sendmail -bv root
/usr/sbin/sendmail -bv martig@oc.ch
/usr/sbin/sendmail -bv root@oc.ch

Die Ausgabe sollte folgendermaßen aussehen:

stefan.martig@rhone.ch... deliverable: mailer relay,
host rhone.ch,user stefan.martig@rhone.ch

Der Parameter -d zeigt ausführliche Informationen zur Abarbeitung der Konfiguration. Interessant ist hierbei, ob es auch in der Userdb nachschaut. Es läßt sich schön mit Hilfe von grep ausfiltern:

/usr/sbin/sendmail -bv -d stefan.martig@rhone.ch | grep udbmatch

Es erscheint dann folgendes:

udbmatch(martig, mailname)
udbmatch ==> stefan.martig@rhone.ch

Mail ins Internet schicken mit Sendmail

Sendmail sollte nun einsatzbereit sein. Wir können einen ersten Versuch starten, lokale Mail herumzuschicken. Dafür dient der folgende Befehl (führen Sie ihn als normaler User aus):

echo "TEST2user" | /usr/sbin/sendmail heinzen
echo "TEST2root" | /usr/sbin/sendmail root

Sendmail greift hier nur auf die lokalen Spool-Verzeichnisse zu, eine Internetverbindung sollte nicht initiiert werden. Kommt nach wenigen Sekunden eine Email an (wovon man ausgehen kann), ist der Test erfolgreich. Ob die externen Mails auch funktionieren, läßt sich folgendermaßen überprüfen:

echo "TEST2isp" | /usr/sbin/sendmail stefan.martig@rhone.ch

Dabei passiert vorerst mal nichts, denn diese Email wurde gespoolt und soll auch solange im Spoolverzeichnis bleiben, bis eine Verbindung zum Internet besteht. Ansehen lässt sich die Mailqueue mit dem Kommando:

/usr/bin/mailq

Nun sollte eine Liste mit allen gespoolten Mails ausgegeben werden.

Mails an Mailserver übergeben

Sie können nun eine Verbindung zum Provider aufbauen und mit /usr/sbin/sendmail -q Sendmail anweisen, die Emails aus dem lokalen Spoolverzeichnis an den Mailserver des Providers zu übergeben.

Mail vom Internet holen mit Fetchmail

Fetchmail ist ein POP- und IMAP-Client, der auf der DLD 5.3 schon drauf ist, daher haben wir uns fuer dieses Programm zum Abholen der Email vom Provider entschieden. Die Konfigurationsdatei /root/.fetchmailrc sieht wie folgt aus:

poll mail.rhone.ch protocol POP3 user stefan.martig password abcdef is martig
poll mail.rhone.ch protocol POP3 user matthias.heinzen password ghijklm is heinzen
poll mail.gmx.net protocol POP3 user stefan_martig password nopqrs is martig

Nach user steht der Name beim Provider (wie bei fetchmail -u ...), und hinter is ... steht der Loginname auf der lokalen Maschine, also das Postfach, in das fetchmail die Mail ablegen soll. Diese Datei darf nur für den Benutzer lesbar sein, der die Mails abholt, da sie die Paßwörter im Klartext enthält. Also:

chmod 600 /root/.fetchmailrc

Die vorgestellte Lösung ist nicht besonders elegant, da der Administrator von jedem Benutzer das Passwort beim Provider wissen muss und der Benutzer jedes Ändern, Löschen oder Hinzufügen von neuen Accounts dem Postmaster melden muss, damit er die Datei /root/.fetchmailrc anpassen kann. Eine probate Moeglichkeit wäre ein kleines Perl-Skript, das, von root gestartet, fetchmail für jeden User ausführt und dabei sein lokales /home/user/.fetchmailrc als Konfiguration nimmt. Aber das ist noch Zukunftsmusik und ich ziehe es vor, eine genaue Kontrolle in der Anfangsphase zu haben :-) Mit

/usr/local/bin/fetchmail -a -k

werden nun alle (Option -a) noch beim Provider befindlichen Emails übertragen (auch die alten), wobei die Option -k fetchmail veranlasst, die Mails beim Provider nicht zu löschen (wir testen ja noch!). Die abgeholten Mails werden nun in den entsprechenden Postfächern abgelegt und können mit einem Mailreader gelesen werden.

Automatisierung

Bisher haben wir den gesamten Mailverkehr manuell geregelt. Nun sollte aber ein Mailserver autonom handeln. Es gibt verschiedene Möglichkeiten, den Mailserver zum automatischen Versenden und Abholen von Emails beim Provider zu veranlassen. Hier ist eine davon:

Abliefern beim Provider

sendmail -q: Dieser Befehl sollte sowohl unmittelbar nach Verbindungsaufbau als auch vor dem Verbindungsabbau ausgeführt werden, um die geschriebenen Emails an den Mailserver des Providers zu übergeben. Bei unserem System wird dies durch ein Einfügen von sendmail -q in das Skript /etc/ppp/ip-up und /etc/ppp/ip-down erledigt. Ferner garantiert der als Daemon laufende Sendmail ein ständiges Leeren der MailQueue während dem Verbundensein mit dem Internet. Wenn der Rechner nicht mit dem Internet verbunden ist, so läßt er die externe Post liegen und bearbeitet nur die lokale Post (mit den EXPENSIVE Einträgen in der sendmail.mc oben).

Abholen beim Provider

Ebenfalls im Skript /etc/ppp/ip-up wird dann Fetchmail als Daemon (Option -d 900, d.h. im Hintergrund) unmittelbar nach dem Verbindungsaufbau zum Provider gestartet; nun wird alle 900 Sekunden nach neuen Mails geschaut und gegebenenfalls übertragen (-a).

/usr/local/bin/fetchmail -d 300 -a

Wird die Verbindung mit dem Provider gestoppt, bietet es sich an, die beiden folgenden Befehle in das Skript /etc/ppp/ip-down aufzunehmen:

/usr/local/bin/fetchmail --quit
/usr/local/bin/fetchmail -a

Hierbei wird der aktuelle fetchmail-Prozeß (--quit) zunächst gekillt und daraufhin alle noch beim Provider befindlichen Emails übertragen (-a), ohne daß Fetchmail als Daemon im Hintergrund läuft.

Der automatische Postbote

Die beiden Skripte sehen dann etwa so aus:

#!/bin/sh
# /etc/ppp/ip-up
/sbin/route add -net default ippp0
/usr/sbin/sendmail -q
/usr/bin/fetchmail -d 900 -a -L /var/log/fetchmail

#!/bin/sh
# /etc/ppp/ip-down
/usr/sbin/sendmail -q
/usr/bin/fetchmail --quit
/sbin/route add -net default ippp0
Kommentare (Insgesamt: 0 || Kommentieren )
Pro-Linux
Newsletter
Neue Nachrichten