Obwohl Sendmail in nur vier bis sieben Konfigurationsdateien für die meisten Zwecke sehr einfach eingerichtet werden kann, scheuen viele den Kontakt mit dem betagten Riesen und weichen auf Mail- Transfer-Agents (MTAs) komplizierterer Struktur aus. Dieser Artikel soll den Einsatz von Sendmail jedem möglich machen, der das schon immer mal wollte.
Sendmail besteht aus einem großen Programm und wenigen Konfigurationsdateien. Damit ist es im Gegensatz zu qMail, das aus ungefähr zehn Prozessen und dreißig mir bekannten Konfigurationsdateien besteht, nicht modular aufgebaut. Genau hier liegt aber meiner Meinung nach die Stärke von Sendmail. Jeder, der sich etwas mit DNS, E-Mail-Verkehr und vier bis sieben Konfigurationsdateien auskennt, kann Sendmail ohne große Probleme installieren und für den Alltagsgebrauch konfigurieren.
Die Kontrollinstanz: sendmail.cf
Die Datei sendmail.cf ist das mächtigste Konfigurationsfile von Sendmail, sie wird mit dem Makroprozessor m4 aus dem sendmail.mc-File generiert und schwebt über allen weiteren Konfigurations- und .db-Files. Genauer: Sie bestimmt, ob diese überhaupt befragt werden oder nicht. Für die meisten gängigen Einsatzzwecke kann das von der Distribution mitinstallierte File übernommen werden. Wer Sendmail jedoch zu Hause mit einer Dialup-Verbindung betreiben will, kommt um kleinere Änderungen nicht herum.
Sendmail.cf besteht aus zwei Teilen: Der erste Teil ist gut kommentiert und legt so wichtige Dinge fest wie Konfigurationsfiles, Format, Hostname und die Genauigkeit des Logfiles (Log Level). Dieser Teil muss nur selten geändert werden. Der zweite Teil hingegen ähnelt eher einer chemischen Formelsammlung und jeder, der einen Blick hineinwirft, glaubt sofort, dass damit viel möglich ist. Aber Lebenszeit ist ja auch eine begrenzte Ressource, also …
|
Listing 1: |
|---|
# HOST POLICY # weiterhin moegliche Policies: DISCARD, DENY # default Eintraege localhost RELAY 127.0.0.1 RELAY # eigene Eintraege meinedom.de RELAY fallback.de RELAY spammer.com 550 Wir akzeptieren keine Mails von Dir |
Verzeichnisse und Konfigurationsfiles
Nach der Installation sind folgende Verzeichnisse entstanden:
/var/spool/mail Hierhin werden später alle eingehenden E-Mails im mbox-Format geschrieben. Das heißt: Alle E-Mails für einen Benutzer werden chronologisch aneinander angehängt.
/var/spool/mqueue In diesem Verzeichnis entsteht eine Warteschlange für ausgehende E-Mails, die nicht sofort zugestellt werden können. Aus jeder ausgehenden E-Mail werden zwei Dateien mit ziemlich kryptischem Namen.
/etc/mail Hier stehen alle Konfigurationsdateien und eventuell ein Makefile, das aus den Konfigurationsdateien die zugehörigen *.db-Files erzeugt. Nur diese werden von Sendmail verwendet. Alle Änderungen in den Konfigurationsdateien sind wirkungslos, wenn danach das entsprechende .db-File nicht neu erzeugt wurde. Wenn kein Makefile vorhanden ist, lassen sich .db-Files folgendermaßen generieren:
cat ./Filename | makemap hash Filename
Auch hier bestätigen Ausnahmen die Regel. Die aliases.db wird als einzige mit dem Befehl newaliases generiert. Durch makemap entsteht zwar auch eine aliases.db, die aber ganz Sendmail funktionsunfähig machen kann.
Soll ich oder soll ich nicht: /etc/mail/access
Jedes Mal, wenn versucht wird eine E-Mail zum Versenden oder Empfangen an Sendmail zu übergeben, bestimmt die access.db, ob sich Sendmail dieser Aufgabe annimmt oder seine Dienste verweigert, und spielt auch darüber hinaus bei all diesen Vorgängen mit. Listing 1 zeigt den Aufbau einer Beispieldatei. Sie bestimmt, dass alle Hosts in den Domains meinedom.de und fallback.de E-Mails über den Mailhub versenden dürfen. Also auch exchange.meinedom.de oder somehost.meinedom.de und so weiter. Von der Domain s pammer.com werden dagegen weder eingehende noch zu versendende E-Mails angenommen.
|
Listing 2: |
|---|
joerg.fritsch@meinedom.de joergf heinzpeter@meinedom.de heinzpeter@dieanderedomain.de # weiterhin moeglich # @meinedom.de %1@anderedom.de # hier werden alle Emails für @meinedom.de an # @anderedom.de weitergeleitet, wobei der Namensteil # vor dem @ erhalten bleibt. |
Zustelldienst: virtusertable und sendmail.cw
In Abbildung 1 ist das triviale Szenario dargestellt. Eine für die Adresse joerg@meinedom.de ankommende E-Mail soll akzeptiert und in die entsprechende mbox geschrieben werden. Hierzu müssen zwei weitere Konfigurationsdateien vorhanden sein: virtusertable und sendmail.cw. Letztere ist eine Liste mit Domains, die als lokal betrachtet werden. In unserem Beispiel ist nur ein Eintrag vorhanden: meinedom.de. Ein solches Konfigurationsfile macht Sinn, da bei einem ISP oder einer Hostingplattform ein Mailhub in der Regel für eine große Anzahl verschiedener Domains zuständig ist und sie alle als lokal betrachten muss, auch wenn er selbst zu einer ganz anderen Domain gehört.
Listing 2 zeigt den Aufbau von virtusertable. Es sind drei unterschiedliche Fälle zu erkennen. Die E-Mails für joerg@meinedom.de werden in die mbox joergf geschrieben. Die E-Mails für heinzpeter@meinedom.de werden weitergeleitet an die Adresse heinzpeter@dieanderedomain.de und alle anderen E-Mails für die Domain @meinedom.de werden in die mbox joergf geschrieben. Egal ob info@meinedom.de oder picasso@meinedom.de oder ganz anders. (Kleiner Tipp am Rande: Für Abfragen der E-Mails muss in /etc/inetd.conf noch ein POP3-Daemon definiert sein.)
Abb.2 zeigt den umgekehrten Weg. somehost.meinedom.de hat eine E-Mail für woanders.com geschrieben und will, dass sie von Sendmail zugestellt wird, was mit den besprochenen Settings ohne Probleme verläuft.
|
Listing 3: |
|---|
# Senderaddresse Adresse durch welche # der Sender ersetzt # (maskiert) wird. joergf@localhost.localdomain a.mozart@gmx.de joergf@localhost a.mozart@gmx.de joergf a.mozart@gmx.de |
|
Listing 4: |
|---|
# # Empfaengeraddresse Adresse durch welche # der Empfaenger ersetzt # (maskiert) wird. # joerg: joerg@exchange.meinedom.de # zu einem anderen Standort alexandra: alexandra.s@konstanz.meinedom.de # lokale mboxen, POP3 otto: otto,max |
Mailserver der Reserve: mailertable
Häufig wird im DNS neben dem Hauptmailserver/Hub einer Domain noch ein zweiter MX-Record geringerer Priorität als Fallback definiert. Ist der Mailserver mit der höchsten Priorität nicht zu erreichen, gehen alle E-Mails an den Mailserver der nächsthöchsten Priorität, wobei dieser nicht in der gleichen Domain liegen muss. Abbildung 3 zeigt die Konfiguration. fallback.de ist bereits in der access.db, die für @fallback.de eingehenden E-Mails werden demnach von Sendmail weiterverarbeitet. Da in sendmail.cw nur meinedom.de steht, wird @fallback.de nicht als lokal betrachtet. Jetzt kommt der mailertable ins Spiel. Er enthält den Eintrag:
fallback.de smtp:[IP- Adresse von fallback.de]
Er ist unter Umständen redundant, aber das schadet nichts. Wenn die eckigen Klammern gesetzt sind, kann hier alternativ die IP-Adresse jedes anderen erreichbaren Mailhubs eingetragen sein und die MX-Records bezüglich @fallback.de können vollkommen übergangen werden.
Die für @fallback.de eingehenden E-Mails werden nun in die Queue gestellt und Sendmail versucht es in bestimmten Abständen, sie auszuliefern. Nach fünf Tagen wird die Queue geleert, egal ob eine Zustellung möglich war oder nicht.
|
Tabelle |
||||
|---|---|---|---|---|
|
Filename |
Was wird konfiguriert/geregelt? |
.db-File |
Besonderheiten |
|
|
access |
Nehmen wir E-Mails von diesem SMTP-Partner an? Leiten wir |
ja |
|
|
|
aliases |
Soll die (lokale) Empfängeradresse in eine andere Adresse |
ja |
Wird als einziges .db-File mit dem Befehl |
|
|
mailertable |
Gibt es eine besondere Route zu/für diesen |
ja |
|
|
|
sendmail.cw |
Ist @Empfängerhost.xy eine lokale Domain oder |
nein |
|
|
|
virtusertable |
In welche mbox soll die (lokale) E-Mail geschrieben werden oder |
ja |
|
|
|
generics |
Soll die (lokale) Senderadresse in eine andere Adresse |
nein |
|
|
|
sendmail.cf |
Ort für Files/Queues, Log Level und weitergehende |
nein |
Liegt manchmal unter /etc |
|
Der Verteiler: aliases
Richtig interessant wird mailertable erst zusammen mit der aliases.db, da man dadurch für @meinedom.de ankommende E-Mails an verschiedene Standorte oder Mailhubs im Haus verteilen kann, je nachdem, wer als Empfänger vor dem @ steht. Hier kommen dann auch die eckigen Klammern, die den DNS außer Kraft setzen, voll zur Geltung. Die alias.db ist meiner Meinung nach eines der mächtigsten Features von Sendmail im kommerziellen Einsatz. In ihr wird bestimmt, ob die Empfängeradresse, die Bestandteil der als lokal betrachteten Domain(s) sein muss ( sendmail .cw), in eine andere Adresse übersetzt werden soll. Die neue Adresse kann etwa ein Exchange-Host im Haus sein, die Adresse einer Firmenzweigstelle an einem anderen Ort oder eine Mailingliste. Die Konfiguration wird in Abbildung 4 gezeigt.
In der Praxis hat dieses Setup zwei entscheidende Vorteile. Zum einen können hier Lizenzen für proprietäre Software gespart werden, da die proprietäre Software nur jene Clients bearbeitet, die sie auch wirklich verwenden müssen (die anderen sind beispielsweise POP3-Clients). Zum anderen knallt der SMTP-Verkehr nicht direkt vom Internet auf den Server für die interne Kommunikation durch. War ein Hackangriff auf dieser (per MX-Record bekannten) Maschine erfolgreich, läuft zum Beispiel MS-Exchange auf einer ganz anderen Maschine weiter und so bleibt wenigstens die Hauskommunikation unbeschadet. Listing 4 zeigt ein entsprechendes aliases-File.
Viele Leser haben wahrscheinlich eine Dialup- Verbindung und keine feste IP- Adresse. Ich werde im Folgenden ein paar Tipps zur Konfiguration geben, jedoch muss jeder Leser selbst ausprobieren, mit welchen Einstellungen sein ISP zusammenarbeitet und welche die Mails ins Nirwana schicken.
|
Listing |
|---|
# Der Microsoft SMTP-Host unseres Providers erhielt die Mail von unserem nicht # existentem localhost.localdomain, dessen IP 213.6.138.123 freigeschalten ist.
Received: from localhost.localdomain ([213.6.138.123]) by mail.vi-internet.de with Microsoft SMTPSVC(5.5.1877.537.53);
Thu, 19 Oct 2000 21:46:46 +0200
# unser lokales Sendmail erhielt die Mail von Benutzer joergf
Received: from localhost (joergf@localhost)
by localhost.localdomain (8.9.3/8.9.3) with ESMTP id VAA01189
for <joerg.fritsch@planet-interkom.de>; Thu, 19 Oct 2000 21:52:58 -0400
Date: Thu, 19 Oct 2000 21:52:58 -0400 (EDT)
From: <a.mozart@gmx.de>
To: joerg.fritsch@planet-interkom.de
Subject: Mail 4 LinuxMagazin
Message-ID: <Pine.LNX.4.10.10010192152280.1187-100000@localhost.localdomain>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
Return-Path: a.mozart@gmx.de
|
Denn wer vieles gibt …
Die Provider haben ihren IP-Addresspool zum Versenden von E-Mails freigeschaltet und prüfen meist nur, ob die Informationen im Envelope einer E-Mail stimmig sind und die Nachricht nicht dazu veranlassen können, aufgrund von Unzustellbarkeit zu bouncen. Grundsätzlich gilt, dass im so genannten Envelope keine nicht auflösbaren oder nicht existenten Adressen wie etwa <joergf@localhost.localdomain> oder gar <root> stehen dürfen.
Listing 6 zeigt den Source einer lokal verschickten E-Mail, wobei die Header (blau) und der Envelope (rot) in unterschiedlichen Farben dargestellt sind. Hier muss Sendmail selbst bemüht werden, da Mail-Clients wie Pine, Kmail oder Mutt beim Versenden über lokale MTAs Unzulässigkeiten einbauen, die man nicht wegkonfigurieren kann.
Für das Maskieren der Senderadresse des Envelopes ist bei Sendmail genericstable zuständig (Listing 3 zeigt ein Beispiel). Liegt bei der von der Distribution installierten Sendmail-Kopie noch kein genericstable(.db) in /etc/mail, muss dieses Feature erst aktiviert werden. Weiter ist zu entscheiden, ob man selber lange genug online ist, um jeden seiner Empfängerhosts direkt zu erreichen und an diese auszuliefern. Das kann unter Umständen sehr lange dauern, da manche Hosts schlecht angebunden oder gut ausgelastet sind.
Das Mittel der Wahl ist es, den SMTP-Host des eigenen Providers in sendmail.cf als Smart-Host einzutragen. Alle ausgehenden E-Mails gehen dann zuerst an ihn und er kümmert sich auch um alles Weitere. Tabelle 2 zeigt eine Zusammenfassung der Einstellungen, die beim Versenden mit einer Dialup-Verbindung notwendig werden können, Listing 5 ein entsprechendes sendmail.mc-File. Der Weg von einem neuen sendmail.mc-File zum entsprechenden .cf-File ist einfach:
cp /etc/sendmail.cf /etc/sendmail.cf.old m4 /etc/sendmail.mc > /etc/sendmail.cf /sbin/init.d/sendmail restart
Durch das neue .cf-File kann einiges maskiert werden. Wer möchte, kann die Header seiner E-Mails so aussehen lassen, als käme diese Mail von einer existierenden Domain. Nur eines wird immer im Wege stehen und kann nicht maskiert werden: das Reverse-Lookup.
Die besprochenen Aspekte sind nur ein Bruchteil der möglichen Features, aber vielleicht ausreichend, Sie zum Experimentieren mit Sendmail anzuregen – viel Spaß. (uwo)
|
Listing 5: Beispiel |
|---|
divert(-1) include(`/usr/lib/sendmail-cf/m4/cf.m4') define(`confDEF_USER_ID',``8:12'') OSTYPE(`linux') undefine(`UUCP_RELAY') undefine(`BITNET_RELAY') define(`confAUTO_REBUILD') define(`confTO_CONNECT', `1m') define(`confTRY_NULL_MX_LIST',true) define(`confDONT_PROBE_INTERFACES',true) define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail') dnl # Dieses Intervall auf 24h setzen,w eil man ja nicht dnl # immer online ist. define(`confTO_QUEUEWARN',`24h') dnl # SmartHost = SMTP- Host des Providers dnl # wenn gew$nscht define(`SMART_Host',`mx.deinesproviders.de') FEATURE(`smrsh',`/usr/sbin/smrsh') FEATURE(mailertable) FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable') FEATURE(redirect) FEATURE(`genericstable',`hash -o /etc/mail/genericstable') dnl # wahrscheinlich redundant GENERICS_DOMAIN(localhost) GENERICS_DOMAIN(localhost.localdomain) dnl # Hier die als Senderdomain gewuenscht Domain eintragen MASQUERADE_AS(`senderdomain.de') FEATURE(`masquerade_envelope') FEATURE(always_add_domain) FEATURE(use_cw_file) FEATURE(local_procmail) MAILER(procmail) MAILER(smtp) FEATURE(`access_db') FEATURE(`blacklist_recipients') dnl # Notwendig, da meist kein Kontakt zu DNS vorhanden dnl # und somit alle unresolvable sind FEATURE(`accept_unresolvable_domains') |
|
Tabelle |
||
|---|---|---|
|
Filename |
Was muss konfiguriert werden? |
Besonderheiten |
|
sendmail.cf |
define(‘SMART_HOST’ $) define(`confTO_QUEUEWARN’ $) FEATURE(genericstable, $) FEATURE(masquerade_envelope) GENERICS_DOMAIN(localhost usw.) MASQUERADE_AS |
Über sendmail.mc Eventuell in sendmail.cf-Host eintragen |
|
genericstable |
Alle Addressen, die denkbar sind und nicht auftreten dürfen: benutzer benutzer@localhost benutzer@localhost.localdomain |
Vorsicht! Root gilt als Exposed User und wird nie |
|
Der |
|---|
|
Joerg Fritsch ist 1972 geboren und hat Chemie studiert. Er beschäftigt sich seit 1994 mit Unix/Linux und fand über die Software-Entwicklung einen Quereinstieg in die IT. Er arbeitet als Systemspezialist Internetdienste/Hostmaster bei Tesion. |
Copyright © 2002 Linux New Media AG






nachdem ich mehrere E-Mail Server bei mir zu Hause installiert habe musste ich feststellen, dass ich immer das gleiche Problem hatte – Dynamische IPv4 Adresse. Um das Problem letzendlich lösen zu können habe ich mir mit der Sophos UTM Home Edition ein E-Mail Relay und Spamfilter auf einer VPS gebaut. Eine Anleitung dazu gibt es in meinem Blog:
https://techblog.network