3. Mails versenden
Das Kapitel 1
Einführung sollte
unbedingt gelesen werden, da hier u.a. die Hintergründe
erklärt werden.
Suse-Benutzer müssen noch in der Datei
/etc/sysconfig/mail die Variablen
'MAIL_CREATE_CONFIG' auf 'no' und 'SMTPD_LISTEN_REMOTE' auf 'yes'
(früher in der Datei
/etc/rc.config die Variable
'SENDMAILTYPE' auf 'no') setzen. Ansonsten überschreibt
Yast2
u.a. die eigene
sendmail.cf (MAIL_CREATE_CONFIG) und
sendmail würde so gestartet,
dass nur lokale Mails (vom Linux-Rechner) angenommen werden
(SMTPD_LISTEN_REMOTE).
Nutzer anderer
Distributionen sollten ebenfalls überprüfen ob das jeweilige
Konfigurationstool angepasst werden muß.
3.1 Mail Transport Agents (MTA) - sendmail
E-Mails werden zunächst vom
eigentlichen Mailprogramm (z.B.: kmail oder Mozilla) an
den Mail Transport Agent (MTA) weitergegeben. Als MTA dient auf den meisten Systemen
sendmail. Als Alternativen gibt es unter anderem noch qmail
und exim. Auf diese werde ich in dieser Howto jedoch nicht
weiter eingehen. Der MTA übernimmt
mehrere Aufgaben auf einmal:
- Zwischenspeichern der E-Mail bis zur nächsten
Online-Verbindung
- Ermitteln bzw. Überprüfen des Empfängers
- Evtl. ändern der Absenderadresse auf die Mailadresse beim
Provider (Maskierung)
- Übertragung der Mail zum Empfänger (bzw. zum
nächsten Mailserver)
3.1.1 Die Datei 'sendmail.cf'
Konfiguriert wird sendmail in
der Datei /etc/sendmail.cf.
Allerdings ist diese Datei die vermutlich komplizierteste
Konfigurationsdatei die es unter Linux gibt:
Es wird behauptet, daß man kein echter
UNIX-Systemadministrator ist, solange man noch keine sendmail.cf
editiert hat. Es wird auch behauptet, daß man verrückt sei,
wenn man es ein zweites Mal tut.
Es gibt jedoch inzwischen dank der m4-Makros
einfachere Möglichkeiten sendmail zu konfigurieren.
Allerdings sollte man sich einen Blick in diese Datei gönnen.
3.2 m4-Makros
Die m4-Makros dienen der
einfachen Erstellung der sendmail.cf. Hier können die
für sendmail benötigten Angaben in halbwegs lesbarer
Form eingetragen und bearbeitet werden. Bei den meisten Distributionen
sind nach der Installation von sendmail einige m4-Makros mit
Beispielkonfigurationen vorhanden. Die Makros werden später durch
den m4-Präprozessor in das kryptische Format der
sendmail.cf
umgewandelt.
3.2.1 Beispiel-Makro
Hier ist eine Makrodatei, die
für die meisten Benutzer ausreichend sein dürfte. Es
müssen jedoch ein paar Einträge angepaßt werden.
Kommentare beginnen mit 'dnl'. Das 'dnl' am Ende einer
Konfigurationszeile bedeutet: 'lösche bis zum Ende der Zeile'.
Dadurch soll verhindert werden, daß ungewünschte Zeilenenden
in die resultierende sendmail.cf
gelangen:
dnl Konfiguration von Sendmail
dnl Mailserver-HOWTO
dnl
dnl Dirk Bender 29.06.2003
dnl
dnl
dnl Pfade müssen je nach Distribution abgeändert werden!
dnl
include(`/usr/share/sendmail/m4/cf.m4')dnl
dnl
dnl Beliebiger Name/ Version der Konfiguration:
dnl
VERSIONID(`Mailserver-HOWTO 1.0')dnl
dnl
dnl Verwendetes Betriebssystem:
dnl
OSTYPE(`suse-linux')dnl
dnl
dnl Verzögerung, die Sendmail wartet, bis die Mails gesendet werden.
dnl (Wegen Verzögerung bis die Onlineverbindung steht):
dnl
define(`confDIAL_DELAY', `10s')dnl
dnl
dnl Nach welchem Zeitraum soll Sendmail eine Warnung versenden, dass
dnl eine Mail noch nicht abgearbeitet werden konnte:
dnl
define(`confTO_QUEUEWARN', `24h')dnl
dnl
dnl Bei Waehlleitungen ist es notwendig diese als 'Teuer' zu deklarieren
dnl Dadurch werden die zu verschickenden Mails zuerst gepuffert,
dnl und erst bei einer Online-Verbindung mit "sendmail -q" zu versendet:
dnl
define(`confCON_EXPENSIVE', `True')dnl
dnl
dnl Der Mailer SMTP wird als 'teure Leitung' deklariert:
dnl
define(`SMTP_MAILER_FLAGS',`e')dnl
dnl
dnl Dies verhindert DNS-Lookups (unerwünscht bei Wählleitungen) allerdings
dnl muß der Mailserver Ihres Providers in die /etc/hosts eingetragen sein:
dnl
FEATURE(`nocanonify')dnl
dnl
dnl Akzeptiere auch unloesbare Domaenen und Sender (oder nicht; wg. DNS):
dnl
FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`accept_unqualified_senders')dnl
dnl
dnl fuege die lokale Domain hinzu, wenn sie im Absender fehlt
dnl Beispiel: "From: dirk" wird zu "From: dirk@postbote.heimnetz":
dnl
FEATURE(`always_add_domain')dnl
dnl
dnl Maskiert auch die im 'Umschlag' stehenden Absenderangaben:
dnl
FEATURE(`masquerade_envelope')dnl
dnl
dnl Die Datei mit den Alias-Namen:
dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
dnl
dnl Paßt Empfaengeradressen auch anhand der /etc/aliases an:
dnl
FEATURE(`allmasquerade')dnl
dnl
dnl Einstellungen zur Absendermaskierung für ein-
dnl und ausgehende Mails (siehe auch genericstable!).
dnl Beispiel: "From: martina@postbote.heimnetz" wird zu "From: martina@64-bit.de":
dnl
MASQUERADE_AS(`64-bit.de')dnl
dnl
dnl Diese Dateien werden fuer das Umschreiben der Absender-
dnl (genericstable) und Empfaenger-Adressen (virtusertable) verwendet:
dnl
FEATURE(`genericstable', `hash -o /etc/mail/genericstable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
dnl
dnl Die Datei in der die Domaenen stehen, in denen dieses Aendern erfolgen soll:
dnl (siehe genericdomain)
dnl
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')dnl
dnl
dnl Definiere den Smarthost entweder hier, oder im FEATURE(`mailertable'...)
dnl Ein Smarthost ist der Empfaenger-Host (Mailserver) fuer alle E-Mails,
dnl die nach draussen gehen. Ich definiere ihn in der mailertable:
dnl
dnl define(`SMART_HOST', `uucp-dom:news-ma')dnl
dnl define(`MAIL_HUB', `smtp:host.your.domain')dnl
dnl define(`LOCAL_RELAY', `smtp:host.your.domain')dnl
dnl
dnl Die Datei mit den Regeln zur Versendung von ausgehenden
dnl Mails (siehe mailertable):
dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
dnl
dnl Verwende Procmail für die Zustellung von lokalen Mails:
dnl
FEATURE(`local_procmail')dnl
dnl
dnl Pfad zu procmail:
dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
dnl
dnl Soll ein Nameserver verwendet werden? (Das bremst nur):
dnl
dnl FEATURE(`nodns')dnl
dnl
dnl Ohne Nameserver benoetigt man service.switch und /etc/hosts:
dnl
define(`confSERVICE_SWITCH_FILE', `/etc/mail/service.switch')dnl
define(`confHOSTS_FILE', `/etc/hosts')dnl
dnl
dnl wir nutzen access.db das Relaying (Zugriffe) zu regeln:
dnl
dnl FEATURE(`relay_based_on_MX')dnl
dnl FEATURE(`relay_entire_domain')dnl
FEATURE(`access_db', `hash -o /etc/mail/access.db')dnl
dnl
dnl Dies sind die verfuegbaren Mailer ('smtp' zur Auslieferung im Netz,
dnl 'local' für lokale Postfächer, 'procmail' zur Auslieferung)
dnl
MAILER(smtp)dnl
MAILER(local)dnl
MAILER(procmail)dnl
dnl MAILER(`uucp')dnl
dnl MAILER(`bsmtp')dnl
dnl MAILER(`fido')dnl
dnl
Wie schon in der
Einführung erwähnt
sind bei einigen Distributionen die Pfadangaben abweichend (z.B.
FEATURE(`mailertable'...) und müssen angepaßt werden. Wenn
diese Datei als
/etc/mail/linux.mc gespeichert ist wird mit dem
folgenden Befehl eine
sendmail.cf erstellt:
m4 /etc/mail/linux.mc > /etc/sendmail.cf
Nun sind noch weitere Dateien zu erstellen, die Einträge wegen der
Maskierung und dem Routing enthalten.
3.3 Weitere Konfigurationsdateien
Nach dem Erstellen der sendmail.cf
müssen noch weitere Konfigurationsdateien eingerichtet werden.
Hierzu gehören unter anderem die Einstellungen zur
Absendermaskierung, dem Relaying und der Versendung der Mails. Die
meisten dieser Dateien werden mit einem Editor (z.B. vi)
bearbeitet und dann in ein für sendmail lesbares
Datenbankformat konvertiert. Alle diese Dateien befinden sich bei Suse
unter /etc/mail.
Wichtig ist, daß die Einträge durch Tabulatoren und nicht
durch Leerzeichen getrennt werden!
3.3.1 Die Datei 'genericstable'
Die Datei
genericstable
sorgt
dafür, daß die Mail eines Users beim Senden an eine
externe Zieladresse eine andere
Absenderadresse erhält (
Maskierung, siehe auch
Kapitel
6.2.4
Der Useraccount).
Wenn nicht die Funktion 'MASQUERADE_AS' (siehe
Beispiel-Makro)
benutzt wird, muß hier
jeder
User eingetragen werden, da sie ansonsten bei externen Mails ihre
interne Mailadresse behalten - und die ist ja im Internet nicht
bekannt.
#
# map outgoing sender addresse from bar to foo@domain.com:
# bar foo@domain.com
#
dirk bender@64-bit.de
dirk@postbote.heimnetz bender@64-bit.de
Die Datei muß nach der Erstellung oder Änderung konvertiert
werden:
makemap hash -f genericstable.db < genericstable
Anm.: wenn möglich sollte die Funktion
'MASQUERADE_AS' benutzt werden. Dies setzt jedoch vorraus, dass der
lokale Username gleich dem Namen der externen Mail ist. Im Beispiel
dürfte also nicht dirk
sondern bender benutzt werden. Hierbei würde dann bender@postbote.heimnetz in bender@64-bit.de maskiert (Ich lege normalerweise für Mails
eigene User - u.a. ohne Login - an). Die genericstablekann
dann für Sonderfälle (wie hier im Beispiel) benutzt werden.
Man spart sich hierdurch das unnötige Eintragen aller User in die genericstable - und das können
in einer Firma ziemlich viele sein.
3.3.2 Die Datei 'genericsdomain'
In der Datei
genericsdomain gibt
man die Domänen an, in denen das Ändern der Absenderadresse
(siehe
genericstable) erfolgen soll. Als
Eintrag
dient der
Fully-Qualified Domain
Name (FQDN
- den Eintrag für die eigene Domäne kann man mit dem
Befehl
hostname -f ermitteln). Wenn
generictable nicht genutzt wird ist
auch diese Datei unnötig.
#
postbote.heimnetz
Diese Datei wird nicht
konvertiert.
Anm.:
Es kann sein dass diese Datei nicht existiert und manuell angelegt
werden muss.
3.3.3 Die Datei 'virtusertable'
Die Datei
virtusertable
übernimmt die Aufgabe, eingehende Mails an einen bestimmten
Anwender in die lokale Adresse umzuwandeln. In der Regel wird diese
Aufgabe von dem Programm übernommen, daß die Mails beim
Provider abholt (Kapitel 4.
Mails
empfangen). Sie kann daher auch leer sein.
#
# map incoming email from foo@domain.com to bar
# foo@domain.com bar
#
# wird bei dieser Howto nicht benötigt!
#bender@64-bit.de dirk
Die Datei muß nach der Erstellung oder Änderung konvertiert
werden:
makemap hash -f virtusertable.db < virtusertable
3.3.4 Die Datei 'mailertable'
In der Datei mailertable
können in Abhängigkeit der Zieladresse bestimmte SMTP-Server
zur Auslieferung angegeben werden. Sie sorgt z.B. auch dafür,
daß Mails an lokale Benutzer auch lokal ausgeliefert werden und
nicht den Umweg über die Onlineverbindung nehmen.
#. smtp:mailhub.domain.com
#
#
# Alle lokalen Mails auch lokal ausliefern:
#
postbote.heimnetz smtp:postbote.heimnetz
#
# Alle anderen nach draussen an den Mailserver im Internet:
#
. mail.64-bit.de
In dieser Datei ist die Reihenfolge der Einträge wichtig. Sie wird
von oben nach unten abgearbeitet.
Auch diese Datei muß nach der Erstellung oder Änderung
konvertiert werden:
makemap hash -f mailertable.db < mailertable
3.3.5 Die Datei 'access'
In der Datei access wird
festgelegt wer auf diesem Rechner Mails ablegen darf und wer nicht (Relaying).
Hier muß das lokale Netzwerk eingetragen werden. Ansonsten kann
niemand Mails die nach draußen gehen sollen an den Mailserver
senden, da er alle ablehnt.
# With this file you can control the access
# to your mailserver, example:
#
# cyberspammer.com 550 We don't accept mail from spammers
# okay.cyberspammer.com OK
# sendmail.org OK
# 128.32 RELAY
#
# Take a look at /usr/share/sendmail/README for a full description
127 RELAY
192.168.0 RELAY
Diese Einträge erlauben allen
Benutzern die am Mailserver angemeldet sind (127 = 127.0.0.1 =
localhost) und den Rechnern des Netzwerkes 192.168.0.0/24 E-Mails
abzulegen.
Diese Datei muß nach der Erstellung oder Änderung
konvertiert werden:
makemap hash -f access.db < access
3.3.6 Die Datei 'service.switch'
Mit der Datei service.switch wird sendmail untersagt,
auf
die Nameserverdienste zurückzugreifen, wenn kein Nameserver zur
Verfügung steht.
aliases files
# ohne DNS-Abfragen
hosts files
# mit DNS-Abfragen:
#hosts files dns
Diese Datei muß nicht mit makemap konvertiert werden.
3.3.7 Die Datei 'aliases'
Die Datei aliases beinhaltet
zusätzliche Namen, die nur bei lokalen Mails Gültigkeit
haben.
Sie dient z.B. dazu, daß Mails für den Postmaster an
root
weitergeleitet werden. Man findet diese Datei unter /etc/aliases.
It is probably best to not work as user root and redirect all
# email to "root" to another account. Then you don't have to check
# for important email too often on the root account.
# The "\root" will make sure that email is also delivered to the
# root-account, but also forwared to the user "joe".
#root: joe, \root
# Basic system aliases that MUST be present.
postmaster: root
mailer-daemon: postmaster
# General redirections for pseudo accounts in /etc/passwd.
daemon: root
lp: root
news: root
Diese Datei muss nicht mit makemap, sondern mit /usr/bin/newaliases konvertiert werden. Hierdurch
werden
die Aliases neu eingelesen. Anm.:
newaliases ist identisch mit
der Befehlszeile
sendmail -bi.
3.3.8 Die Datei 'hosts'
Um ständige Nameserveranfragen
zu unterbinden haben wir bei
sendmail
das FEATURE(`nocanonify') gesetzt. Aber dies verlangt den Eintrag des
externen Mailservers (siehe auch 3.3.4
Die Datei
'mailertable') in der Datei
/etc/hosts.
192.168.0.1 postbote
80.113.1.1 mail.64-bit.de
3.4 Sendmail starten
Um die neuen Einstellungen wirksam
zu
machen, muß sendmail neu gestartet werden. Dazu
benötigt man das Script /etc/init.d/sendmail:
/etc/init.d/sendmail stop
/etc/init.d/sendmail start
oder
/etc/init.d/sendmail restart
3.5 Mails versenden
Alle internen Mails werden von sendmail
sofort weitergegeben. Mails die nach draußen gehen werden (falls
bei der Konfiguration angegeben wurde, daß die Mails nicht sofort
versand werden sollen) unter /var/spool/mqueue gesammelt.
Mit /usr/sbin/sendmail -bp
kann der Inhalt der Queue abgefragt werden. Mit folgendem Befehl werden
die E-Mails gesendet:
/usr/sbin/sendmail -q
Vorraussetzung ist natürlich eine Onlineverbindung. Weitere
Informationen findet man in dem Kapitel 7 Automatisierung.