PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lokalen Mailserver einrichten



mightymike99
05.12.01, 01:00
PDF+HTML am Ende


*** Netzwerk: Lokaler Mailserver ****
***** 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:
o sendmail (>=Version 8.10.x) (ist in Regel bereits installiert, wenn
nicht hier die Homepage)
o fetchmail
o (ist auch idR schon installiert, hier
o die Homepage)
o procmail
o 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, internet@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).
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äenen inter.net und intra.net. Dazu erstellen Sie in 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

*** Absenderadressen 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 der 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 kann man mit folgenden Einträgen
unterbunden werden:

# 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 eine 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/virtusertableist nicht nötig, das die externe Domain
ebenfalls als lokal angesehen wird.

**** 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 ist 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 die 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.

*** POP3-Server konfigurieren ***

Um Mails von den lokalen Arbeitsstationen abholen zu können, muss auf dem
Server in der /etc/inetd.conf folgender Eintrag auskommentiert 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.

*** Clientconfiguration 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
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! Nun kann man gleich auch den Versand 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.

**** Automatisierung 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 mit SMTP-
after-POP bedient werden.

*** Zuhilfename 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 vor ip-down
einzutragen.

/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!!
======================================
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".