Inhalt

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:

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.


Inhalt