Lokaler Mailserver

      Voraussetzungen
      Die Beispielumgebung
      Aufgaben des Mailservers
      Funktionstest des Mailservers
      Sendmail konfigurieren
            Allgemeines
           Lokale Hostnamen festlegen
           Weiterleiten zum Provider
           Erlaubte Nutzer(Mailclients) festlegen
           Unqualifizierte Adressen miteinbeziehen
           Abliefereinstellungen
           Verbindungsaufbau zum Internet steuern
           Den Mailversand erlauben
           Aliase für lokale Adressen einrichten
      Abholung der Mail
           Mail beim Provider abholen: fetchmail
           POP3-Server konfigurieren
           Clientkonfiguration
     Automatisieren des Mailversandes und -empfangs
           Zeitgesteuerte Abarbeitung per cron
           Zuhilfenahme des ip-up Skriptes

Voraussetzungen

Im folgenden wird davon ausgegangen, dass...

  1. alle benötigten Programme installiert sind:
    • sendmail (>=Version 8.10.x)
      (ist in Regel bereits installiert, wenn nicht, hier die Homepage)
    • fetchmail
    • (ist auch idR schon installiert, hier die Homepage)
    • procmail
    • popper (Ist nicht unbedingt installiert. hier die Homepage)
  2. eine Verbindung zum Internet besteht.
  3. ein Postfach bei einem Provider vorhanden ist.

Aufgaben des Mailservers

Der lokale Mailserver soll in regelmässigen Abständen die Nachrichten zum Provider übermitteln und vom Provider abholen und lokal zustellen, d.h. im lokalen Postfach ablegen. Von den Arbeitsstationen im Netz werden dann die Mails vom lokalen Postfach abgeholt.

Die Beispielumgebung

Jetzt seid Ihr natürlich erst einmal gefordert die unten aufgeführten Informationen zu ermitteln. Das sollte jedoch nicht allzu schwer sein.

Wir gehen mal von folgender Beispielumgebung aus:

Lokales Netz: 192.168.11.0/24
Lokale Domain: intra.net
Mailservername: mail
FQDN des Mailservers: mail.intra.net
IP des Mailservers: 192.168.11.6
Benutzerinformationen: sabine, info@inter .net, Passwort "info"
max, support @inter.net, Passwort "support"
claudia, billing @inter.net, Passwort "billing"
Universalanlaufstelle, intern et@inter.net, Passwort "Internet"
IP's im LAN: 192.168.11.1 ... 192.168.11.3
Entferntes Netz: dynamisch
Internetdomain: inter.net
Mailserver: mail.inter.net

Das Konto Internet ist ein "catch-all"-Postfach, dass alle sonstigen Mails aufnimmt, die keinem dort angelegten Benutzer zuzuweisen sind.
Für jeden lokalen Empfänger muss natürlich ein Benutzer angelegt sein. Folgende Regeln sollen für die Zustellung gelten:

  • Sabine ist die Sekretärin und bekommt die Mails für info und das catch-all-Postfach.
  • Max macht den Support und bekommt die Mails für support.
  • Claudia macht die Buchhaltung und bekommt die Mails für billing.

Funktionstest des Mailservers

Nach der Installation der Software mit den jeweiligen Tools der verwendeten Distribution müsste auf dem lokalen Mailserver schon der E-Mail Transport innerhalb des Systems funktionieren. D. h. die Nutzer auf diesem System können via E-Mail kommunizieren. Dies testet man am einfachsten, in dem man (als root) von der Konsole(Terminal, Kommandozeile) jeweils eine Mail an die Benutzer sendet:

mail:~ # mail sabine
Subject: Willkommen
STRG+D beendet die Texteingabe
Use "." to terminate letter
Willkommen auf dem lokalen Mailserver.
.
EOT
mail:~ #

Die Mail müsste nun im Postfach der Benutzerin Sabine liegen. Die Benutzerpostfächer sind nur vom Benutzer und natürlich von root lesbar. Da ich immer noch root bin wechsele ich in das Verzeichnis /var/spool/mail. Ein ls -l müsste u. a. folgenden Eintrag liefern:

-rw-rw---- 1 sabine root 452 Jul 23 09:49 sabine

Würde sich Sabine nun auf mail.intra.net anmelden, würde sie mit einem "You have new mail" begrüsst.

Sollte allerdings kein Eintrag vorhanden sein, hat sendmail die Mail wohl noch nicht ausgeliefert, d. h. sie liegt noch in der Warteschlange unter /var/spool/mqueue. Die Eingabe von

mail:~ # sendmail -q

sollte die Mail endgültig in das Benutzerpostfach befördern. Sollte es zu Fehlermeldungen kommen oder die Mail immer noch nicht im Benutzerpostfach liegen, sind alle oben genannten Voraussetzungen(Nur Punkt 1) zu überprüfen. Im Regelfall übergibt sendmail die lokalen Mails an procmail, das letztendlich die Mails dem Benutzer zur Verfügung stellt.


sendmail konfigurieren

Allgemeines

Ist bisher alles positiv verlaufen, kommen wir zur wesentlichen Konfiguration von sendmail, damit von den Arbeitsstationen Mails an die anderen lokalen Benutzer wie auch ins Internet verschickt werden können.

Alle mir bekannten Distributionen starten sendmail als eigenständigen Daemon im Hintergrund. Die Paramter -bd beim Aufruf gewährleisten dies. Beim Aufruf lässt sich auch steuern, ob sendmail in regelmässigen Abständen eine eventuell vorhandene Warteschlange an den Provider senden soll. Dies regelt der Parameter -q (z. B. -q30m bedeutet, dass sendmail alle 30 Minuten schaut, ob Mails zu versenden sind und diese dann auf den Weg bringt; mit -q1h wird dies stündlich erledigt.) Diese Einrichtung des sendmail-Daemons ist abhängig von der Distribution (bei SuSE über die /etc/rc.config, bei RedHat über die /etc/sysconfig/sendmail).< /P>

Für die eigentliche Konfiguration ist die Datei /etc/sendmail.cf zu erstellen und dann zu editieren. Da alle mir bekannten Distributionen schon eine vorgefertigte sendmail.cf liefern, werde ich auf die Erstellung über eine m4-Konfigurationsdatei nicht weiter eingehen.

Gehen wir also zum Editieren der /etc/senmail.cf über (dazu sollte man wissen, dass es unterhalb von /etc noch ein Verzeichnis mail gibt, in dem weitere Konfigurationsdateien liegen). Im folgenden werde ich nur die relevanten Ausschnitte zeigen.

Lokale Hostnamen festlegen

##############
# local info #
##############
# file containing names of hosts for which we receive email
Fw-o /etc/mail/sendmail.cw %[^\#]

In der Datei /etc/mail/sendmail.cw werden alle Hostnamen eingetragen, die als lokal betrachtet werden sollen, in unserem Falle also neben dem obligatorischen localhost die Domänen inter.net und intra.net. Dazu erstellen Sie die Datei /etc/mail/sendmail.cw mit folgendem Inhalt:

localhost
inter.net
intra.net

Weiterleitung zum Provider

Nun wieder zurück zur /etc/sendmail.cf:

# "Smart" relay host (may be null)
DSmail.inter.net

Dieser Server bekommt alle (nicht lokalen) Mails zur Weiterleitung. Hier ist also der SMTP-Server des Providers einzutragen.

Erlaubte Nutzer(=Mailclients) unseres Mailservers

# Hosts for which relaying is permitted ($=R)
FR-o /etc/mail/relay-domains %[^\#]

In der Datei /etc/mail/relay-domains sind die Domainnamen einzutragen, die über unseren Mailserver Mails versenden dürfen. Erstellen Sie also diese Datei mit folgendem Inhalt:

inter.net
intra.net

unqualifizierte Empfänger miteinbeziehen

Da alle unqualifizierten Adressen (also Mails ohne @ und Zieldomain) und auch alle lokalen Mails über den Mailserver laufen sollen, sind noch folgende Zeilen in der /etc/sendmail.cf anzupassen:

# who I send unqualified names to (null means deliver locally)
DRmail.intra.net
# who gets all local email traffic ($R has precedence for unqualified names)
DHmail.intra.net

Absenderadresse n maskieren

Würden von jetzt ab Mails an den SMTP-Server des Providers geschickt, hätten diese als Abenderadresse "benutzer@mail.intra.net". Da dies kein Provider akzeptieren würde, müssen wir die ausgehenden Mails noch maskieren:

# who I masquerade as (null for no masquerading) (see also $=M)
DMinter.net

Nun verlassen die Mails den Server mit der Absenderadresse "benutzer@inter.net".

Abliefereinstellungen

Sollten beim ersten Test des Mailversands die lokalen Mails nicht direkt zugestellt worden sein, ist wahrscheinlich noch der falsche "delivery mode" eingestellt:

# default delivery mode
O DeliveryMode=background

Im Hintergrundmodus (background) werden lokale Mails sofort versandt.

Verbindungsaufbau zum Internet steuern

Standardmässig baut sendmail gerne Verbindungen zum Internet auf. Bei teuren Wählverbindungen kann dies ungewollt sein. Dann kann man dies mit folgenden Einträgen unterbinden:

# avoid connecting to "expensive" mailers on initial submission?
O HoldExpensive=True
# service switch file (ignored on Solaris, Ultrix, OSF/1, others) O ServiceSwitchFile=/etc/mail/service.switch

Durch den ersten Eintrag baut sendmail nur dann eine Verbindung zum Internet auf, wenn die Mailqueue verschickt wird. Der zweite verweist auf die Datei /etc/mail/service.switch , über die die Namensauflösung realisiert wird. Bei teuren Wählverbindungen sollte sie folgenden Inhalt haben:

hosts files
aliases files

Damit wäre der Ausflug in die /etc/sendmail.cf beendet. Speichern Sie nun alle Änderungen und legen vielleicht sicherheitshalber mal eine Kopie der Datei an.

Den Mailversand erlauben

Bis auf einen Punkt ist sendmail nun fertig konfiguriert. Seit Version 8.9 (?) verbietet sendmail allen nicht extra deklarierten Rechnern den Versand. Die Rechner, die Mails versenden dürfen, müssen in der access.db eingetragen sein. Diese wird aus der Datei access gebildet. Diese Dateien liegen wieder unterhalb von /etc/mail. Zum Erstellen der access.db ist zuerst die Datei access zu editieren:

intra.net RELAY
# alle Rechner der Domain dürfen
inter.net RELAY
pc1.intra.net RELAY # dieser Rechner darf
192.168.11 RELAY # das ganze lokale Netz darf

Die Datei ist gut dokumentiert; über sie kann auch ein Spamfilter realisiert werden. Sind alle Eintragungen gemacht, ist die access.db aufzubauen mit:

mail:~ # makemap hash -f /etc/mail/access.db < /etc/mail/access  

Nach einem Neustart des Maildaemons (mit rcsendmail restart unter SuSE, /sbin/service sendmail restart unter RedHat etc.) steht nun einem Versand nichts mehr im Wege.
 

Aliase für lokale Adressen einrichten

Die Benutzernamen auf dem Mailserver im Internet stimmen nicht mit den lokalen überein. Wenn jedoch intern und extern die gleichen Adressen benutzt werden sollen (dann ist unsere Sabine z.B. auch intern über "info@inter.net" erreichbar, sind folgende Einträge in der /etc/mail/aliases erforderlich:

info sabine
support max
billing claudia

Nach der Ergänzung werden diese durch den Aufruf von newalisases wirksam. Ein Eintrag in der /etc/mail/virtusertable ist nicht nötig, da die externe Domain ebenfalls als lokal angesehen wird.

nach oben

Abholung der Mail

Der nächste Punkt, der in Angriff genommen werden muss, ist die Abholung der Mail:

Mail beim Provider abholen: fetchmail

Dies erledigt man am einfachsten mit fetchmail. Dazu ist im Homeverzeichnis des Benutzers, der die Abholung vornimmt, die Datei .fetchmailrc nach folgendem Muster anzulegen:

poll mail.inter.net protocol POP3 localdomains inter.net user info password info to sabine here
poll mail.inter.net protocol POP3 localdomains inter.net user support password support to max here
poll mail.inter.net protocol POP3 localdomains inter.net user billing password billing to claudia here
poll mail.inter.net protocol POP3 localdomains inter.net user internet password internet to sabine here

In diesem Fall soll fetchmail von root aufgerufen werden, die Datei liegt also im Verzeichnis /root. Fetchmail startet nur, wenn sichergestellt ist, dass nur der Besitzer die Datei lesen kann (immerhin werden dort die Passwörter im Klartext eingetragen). Daher sind mit

mail:~ # chmod 0600 .fetchmailrc

Schreib- und Leserechte nur für den Besitzer einzustellen. Danach kann die Konfiguration ausprobiert werden:

mail:~ # fetchmail -k -a -v >>/var/log/fetchmail 2>&1

Durch den Parameter -k werden die Mails nicht vom Server gelöscht (dies kann in der Testphase sehr praktisch sein). Bei Fehlkonfigurationen sind schon mal Mails ins Nirwana gegangen. Sollte Mail vorhanden sein, meldet fetchmail dies:

1 message for info at mail.inter.net (392 octets).

Da Mails an info lokal an Sabine weitergeleitet werden sollen, ist jetzt zu prüfen, ob sich in Sabines Postfach auch Mail befindet. Ist dies nicht der Fall, sollte zuerst mal in der Protokolldatei /var/log/fetchmail nachgeschaut werden, was passiert ist. Nachdem etwaige Fehler behoben wurden, könnten nun die Mails von den Clients an den Arbeitsstationen abgeholt werden.

nach oben

POP3-Server konfigurieren

Um Mails von den lokalen Arbeitsstationen abholen zu können, muss auf dem Server in der /etc/inetd.conf folgender Eintrag "entauskommentiert" sein:

pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s

Falls dies nicht der Fall sein sollte, ist das Kommentarzeichen (#) vor der Zeile zu entfernen und der inetd neu zu starten.

Ausserdem muss der popper(POP3-Mailserver) installiert sein. Dazu gibt man am Prompt einfach mal popper ein (ggf. mit locate danach suchen). Ist der popper nicht zu finden, muss er nachinstalliert werden.

Clientkonfiguration durchführen

Nun sind nur noch die Mailclients zu konfigurieren, hier am Beispiel für Sabine(info@inter.net):

Name:Sabine Irgendwie
E-Mail:info@inter.net< /td>
SMTP-Server:192.168.11 .6
POP3-Server: 192.168.11.6
Login:sabine
Passwort:*****(sabine' s Passwort bei mail)

Diese Einträge müssten sich bei jedem Mailclient auf jeder Plattform finden; ggf. ist die Onlinehilfe/das Handbuch des Programms zu Rate zu ziehen. Nimmt man die IP-Adresse des Mailservers, ist auf der Arbeitsstation keine hosts-Datei zu erstellen oder lokal auch kein Nameserver aufzubauen.

Hat alles geklappt, müsste Sabine nun zwei Nachrichten in Ihrem Posteingang haben: die Begrüssungsmail von root und die Mail vom Providerpostfach.

Herzlichen Glückwunsch! vom Arbeitsplatz an lokale und entfernte Adressen testen. Ich gehe mal davon aus, dass alles klappt! Dann ist nur noch dafür zu sorgen, dass die Mails regelmäßig verschickt und abgeholt werden.

nach oben

Automatisie rung des Mailversands und -empfangs

Zeitgesteuerte Abarbeitung per cron

In der /etc/crontab ist folgender Einträge hinzuzufügen, der dafür sorgt, dass z. B. Wochentags zwischen 7:00 und 17.00 Uhr alle 30 Minuten Mails empfangen und dann gesendet werden:

0,30 7-17 * * 1-5 root /usr/bin/fetchmail -a -v >> /var/log/fetchmail 2>&1 && /usr/sbin/sendmail -q        

(Die Pfade sind ggf. anzupassen)

Sendmail schickt in dieser Konfiguration die Mails auch erst dann raus, wenn fetchmail mit dem Empfang fertig ist. Dadurch können auch Konten auf Servern mit SMTP-after-POP Authentifizierung bedient werden.


Zuhilfenahme des ip-up Skriptes

In meiner SuSE waren die Einträge im /etc/ppp/ip-up schon vorgesehen. Falls dies nicht der Fall sein sollte, ist der folgende Eintrag dort vorzunehmen:

/usr/bin/fetchmail -a -v >> /var/log/fetchmail 2>&1 && /usr/sbin/sendmail -q        

Und nun viel Spass und Erfolg mit dem neuen lokalen Mailserver!!

nach oben
Copyright
Copyright 2001 by Leander Kirstein-Heine, Computer & Network Consulting, Engelplatz 11, D-07743 Jena Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled "GNU Free Documentation License".

Dieses Dokument stammt aus den www.linuxforen.de und wurde gemäß den Lizenzbestimmung designmäßig bearbeitet von: Baitronic

Autor:  Leander Kirstein-Heine