4. Die Konfiguration
4.1 /etc/mail/host.example.mc
Zu Anfang werden die Standardeinstellungen für das Betriebssystem FreeBSD 5.x gesetzt, bei anderen Betriebssystemen muss diese Einstellung auf jeden Fall angepasst werden.
OSTYPE(freebsd5)
Danach werden noch einmal diverse weitere Voreinstellungen festgelegt.
DOMAIN(generic)
Wenn eine E-Mail nach vier Stunden nicht zugestellt werden kann, wird eine Warnung verschickt. Bei einem Szenario, bei dem der Rechner nicht ständig mit dem Internet verbunden ist, sollte dieser Zeitraum auf 16 Stunden erhöht werden, ansonsten kann diese Anweisung entfallen.
define(`confTO_QUEUEWARN',`16h')
E-Mails, die über einen als teuer („expensive“) gekennzeichneten Mailer verschickt werden, sollen nicht sofort zugestellt, sondern erst in die Warteschlange gestellt und nur auf ausdrücklichen Befehl hin ausgeliefert werden. Bei fast ständiger Verbindung zum Internet ist das nicht nötig.
define(`confCON_EXPENSIVE', `True')
Wenn der Rechner nicht immer mit dem Internet verbunden ist, wird der SMTP-Mailer, der für das Verschicken von E-Mails über das Internet zuständig ist als teuer gekennzeichnet, ansonsten sollte logischerweise auch diese Einstellung entfallen.
define(`SMTP_MAILER_FLAGS', `+e')
Alle E-Mails, die über das Internet verschickt werden, sollen, aus den bereits genannten Gründen über den SMTP-Server des E-Mailanbieters oder des ISPs, den sog. Smarthost, laufen.
define(`SMART_HOST',`mail.example.net')
Der Envelope der E-Mail soll genauso, wie die E-Mail selbst maskiert werden. Die eigentliche Anweisung zum Maskieren wird erst später gegeben.
FEATURE(`masquerade_envelope')
Die lokalen Absenderadressen sollen in gültige Adressen umgeschrieben werden, dies geschieht mit Hilfe einer Tabelle, der sog. genericstable, die üblicherweise aus der Datei genericstable gelesen wird. Durch diesen Vorgang werden gültige Adressen in die from:-Zeile eingesetzt, er ist aber zum erfolgreichen Verschicken der E-Mail im Gegensatz zum Masquerading nicht zwingend erforderlich. Das Format dieser Datei wird später noch gesondert beschrieben.
FEATURE(`genericstable')
Der Rechnername, der in den lokalen Absenderadressen vorkommt, muss hier explizit angegeben werden, damit das Umschreiben der Absenderadressen durch genericstable funktioniert (siehe auch sendmail FAQ Q3.3).
GENERICS_DOMAIN(`host.example')
Beim Versenden lokaler E-Mails kann man in der Regel den Rechnernamen der lokalen E-Mailadresse weglassen, allerdings funktioniert dann das Umschreiben der E-Mailadressen durch genericstable nicht mehr. Deshalb soll der Rechnername immer automatisch zu einer unvollständigen E-Mailadresse hinzugefügt werden (siehe auch cf/README).
FEATURE(`always_add_domain')
Die sog. virtusertable ist eine Tablelle, mit der die gültigen Empfängeradressen wieder lokalen E-Mailadressen zugeordnet werden, so daß diese von sendmail auch zugestellt werden können. Auch diese Datei wird später noch einmal näher besprochen.
FEATURE(`virtusertable')
Die Domainnamen, die in den gültigen Empfängeradressen vorkommen, müssen hier explizit angegeben werden, damit sendmail an diese Empfängeradressen gerichtete E-Mails annimmt. Für eine einzelne Domain wäre dies mit dem Makro VIRTUSER_DOMAIN() möglich, da einzelne Anwender jedoch oft über mehrere E-Mailadressen verfügen, die verschiedene Domainnamen haben, wird hier die Datei virtuserdomains angegeben, die eine Liste dieser Domainnamen enthält.
VIRTUSER_DOMAIN_FILE(`/etc/mail/virtuserdomains')
Zur lokalen Zustellung von E-Mails soll procmail verwendet werden, dies hat den Vorteil, dass E-Mails gleich gefiltert werden können. Eine Beispielskonfiguration für procmail ist auf meiner Download-Seite vorhanden.
FEATURE(`local_procmail')
Wenn keine fast permanente Vebindung zum Internet gegeben ist, sollten DNS-Zugriffe nach Möglichkeit unterbunden werden. Ansonsten können die folgenden beiden Anweisungen entfallen. (siehe auch sendmail FAQ Q3.22).
FEATURE(`accept_unresolvable_domains') FEATURE(`accept_unqualified_senders')
Hier soll nun die eigentliche Maskierung als example.net erfolgen.
MASQUERADE_AS(`example.net')
Der Mailer zur lokalen Zustellung von E-Mails wird standardmäßig eingebunden, die Angabe hier ist redundant.
MAILER(local)
Der SMTP-Mailer wird benötigt, um E-Mails über das Internet auszuliefern und wird an dieser Stelle eingebunden.
MAILER(smtp)
4.2 /etc/mail/genericstable
Die genericstable ist relativ simpel aufgebaut, in einer Zeile wird zunächst die umzuschreibende, lokalen Absenderadresse und dahinter die entsprechende gültigen E-Mailadressen genannt.
bar@host.example foo@example.net
4.3 /etc/mail/virtusertable
Über die virtusertable werden gültige Empfängeradressen den lokalen E-Mailadressen zugeordnet. Hier wird zuerst die gültige Empfängeradresse und dann die zugehörigen lokalen E-Mailadresse angegeben.
foo@example.net bar@host.example
4.4 /etc/mail/virtuserdomains
Diese Datei besteht nur aus einer Liste der Domains, bei denen der Anwender gültige E-Mailadressen besitzt. Es wird je eine Domain pro Zeile angegeben, im Beispielsszenario ist das jedoch nur eine einzige.
example.net
4.5 /etc/mail/local-host-names
Diese Datei muss den vollständigen, lokalen Rechnernamen enthalten. sendmail bestimmt u.a. aus dem Inhalt dieser Datei die Klasse w, also die Hostnamen für die E-Mails entgegengenommen werden, da die Angabe DOMAIN(generic) in der host.example.mc ein FEATURE(`use_cw_file') impliziert, welches nach dieser Datei verlangt.
host.example
4.6 /etc/mail/service.switch
Diese Datei sollte nur angelegt bzw. verändert werden, wenn keine ständige Verbindung zum Internet besteht. Die Angaben in dieser Datei veranlassen u.a. dass sendmail kein DNS benutzt (siehe dazu sendmail FAQ Q3.22 und §5.6 im Installation and Operation Guide)
hosts files aliases files
4.7 /etc/rc.conf
Unter FreeBSD muss die rc.conf noch angepasst werden, so dass sendmail nur noch E-Mails vom lokalen Rechner entgegennimmt.
sendmail_enable="NO"
Wenn keine fast ständige Verbindung zum Internet besteht, wird sendmail mit der folgenden Einstellung gezwungen, die Warteschlange nur auf ausdrücklichen Befehl hin abzuarbeiten.
sendmail_submit_flags="-L sm-mta -bd -ODaemonPortOptions=Addr=localhost"
Bei anderen Betriebssystemen muss die, für den Start von sendmail verantwortliche Konfigurationsdatei, analog hierzu angepasst werden, so dass der sendmail MTA mit den oben der Variable sendmail_submit_flags zugeordneten Argumenten gestartet wird.
4.8 $HOME/.fetchmailrc
Schließlich können die Benutzer in ihren Home-Verzeichnissen jeweils eine .fetchmailrc anlegen, um via fetchmail ihre POP / IMAP-Mailboxen abzufragen. Die manpage zu fetchmail enthält eine ausführliche Anleitung, wie dabei vorzugehen ist.
4.9 $HOME/.procmailrc
Diese Datei, die sich ebenfalls im Home-Verzeichnis des jeweiligen Benutzers befindet kann zum Filtern hereinkommender E-Mails genutzt werden, ist aber nicht zwingend notwendig. Eine Beispielskonfiguration ist unter Downloads zu finden.
4.10 Übernahme der Einstellungen
Wenn die Dateien in /etc/mail entsprechend angepasst bzw. erstellt wurden, muss unter FreeBSD in diesem Verzeichnis erst ein make, dann ein make stop und make install und schließlich ein make start ausgeführt werden. Danach sollte sendmail mit der neuen Konfiguration laufen. Bei anderen Betriebssystemen kann es u.U. erforderlich sein, die sendmail.cf manuell mit dem m4-Makroprozessor zu erstellen, die sog. hashed maps der genericstable und virtusertable ebenfalls manuell zu erzeugen, sowie sendmail von Hand neu zu starten. Wie dabei vorzugehen ist, sollte man der cf/README, dem Installation and Operation Guide, sowie der Dokumentation des jeweiligen Betriebssystems entnehmen können.
Wenn auch fetchmail korrekt eingerichtet wurde und eine Internetverbindung besteht, sollten mit fetchmail E-Mails von den POP / IMAP-Accounts des entsprechenden Benutzers abgerufen werden können. Wenn die Konfiguration für ein System, das nicht ständig über eine Verbindung zum Internet verfügt, gewählt wurde, muss zum Versenden von E-Mails, die nicht lokal zugestellt werden können, als root noch der Befehl sendmail -q ausgeführt werden. Lokale E-Mails werden in jedem Fall sofort zugestellt.