Sendmail für den Hausgebrauch

Ich habe bei mir Zuhause einen eigenen kleinen Mailserver stehen, der sich um die Abwicklung der Mails aus meinem ganzen Netzwerk kümmert. Als der alte Server erste Anzeichen seines baldigen ablebens von sich gab, beschloß ich einen neuen Server aufzusetzten. Als Basis habe ich diesmal FreeBSD 5.3(BETA4) genommen. (Der alte Server lief noch mit FreeBSD 4.5-STABLE)

Vorarbeit

Das bei FreeBSD mitgelieferte Sendmail hat einen kleinen Schönheitsfehler. Es ist ohne SASL kompiliert. Es gibt zwei Wege, diesen Umstand zu beheben. Man installiert aus den Ports Sendmail mit SASL oder linkt das mitgelieferte Sendmail gegen SASL. Ich habe mich für letzteres entschieden. Dafür habe ich zuerst Cyrus-SASL2 installiert. Danach habe ich diese drei Zeilen zur /etc/make.conf hinzugefügt:

SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Nach einem (langwierigen) make buildworld war nun das Sendmail gegen SASL gelinkt. Dies habe ich einfach mit sendmail -d0.1 < /dev/null überprüft. Die Ausgabe von Sendmail sollte dann so aussehen:

Version 8.13.1
 Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
                NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASLv2
                SCANF STARTTLS TCPWRAPPERS USERDB XDEBUG

Damit wäre alles vorbereitet. Ich versende meine Mails in der Regel über GMX. Sendmail wird also die Mails über den SMTP-Server von GMX versenden. Der Server von GMX läßt mich Emails nur dann abliefern, wenn er sich sicher ist, daß ich es auch wirklich bin. Hierzu bietet GMX zwei Alternativen. SMTP-after-POP und SMTP-AUTH. Ich habe mich für letzteres entschieden. SMTP-AUTH funktioniert nur mit SASL, deshalb war die kleine Vorarbeit nötig.

Konfiguration mit m4

Nun muß man Sendmail noch zu verstehen geben, was es tun soll. Dies ist der Inhalt meiner /etc/mail/anubis.shadowrun.not.mc (Das Makefile benutzt als Dateinamen automatisch $(hostname).mc):

divert(0)
VERSIONID(`$Id: anubis.shadowrun.not.mc,v 1.2 2004/09/19 22:47:42 fastjack Exp fastjack $‘)
OSTYPE(freebsd5)
DOMAIN(generic)
FEATURE(access_db, `hash -o -T /etc/mail/access’)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable’)
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable’)
define(`confCW_FILE’, `-o /etc/mail/local-host-names’)
define(`SMART_HOST’, `mail.gmx.net’)
MASQUERADE_AS(`gmx.net’)
FEATURE(`local_no_masquerade’)
MASQUERADE_DOMAIN(`shadowrun.not’)
FEATURE(`masquerade_entire_domain’)
FEATURE(`masquerade_envelope’)
dnl Process login names through the genericstable
FEATURE(`genericstable’)
GENERICS_DOMAIN(`shadowrun.not’)
FEATURE(`generics_entire_domain’)
FEATURE(`authinfo’)
FEATURE(`relay_hosts_only’)
dnl The group needs to be mail in order to read the sasldb2 file
define(`confRUN_AS_USER’,`root:mail’)
define(`confDONT_BLAME_SENDMAIL’,`GroupReadableSASLDBFile’)
dnl Enable for both IPv4 and IPv6 (optional)
DAEMON_OPTIONS(`Name=IPv4, Family=inet’)
DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O’)
define(`confBIND_OPTS’, `WorkAroundBrokenAAAA’)
define(`confNO_RCPT_ACTION’, `add-to-undisclosed’)
define(`confPRIVACY_FLAGS’, `authwarnings,noexpn,novrfy’)
MAILER(local)
MAILER(smtp)

Zusätzliche Konfigurationsdateien

Während mein Login auf allen meinen Rechnern „fastjack“ ist, habe ich bei GMX einen anderen Namen. Das Umschreiben des Benutzernamens übernimmt die genericstable. Der Hostname wird vom Masquerading geändert. In der /etc/mail/genericstable steht bei mir folgendes:

fastjack        mmaciaszek

Nun muß sich Sendmail beim Abliefern der Mails bei GMX noch authentifizieren. Hierzu steht in meiner /etc/mail/authinfo diese Zeile:

AuthInfo:mail.gmx.net “U:123456” “P:sehrgeheim” “M:CRAM-MD5”

Die „123456“ steht für meine GMX-Kundennummer und „sehrgeheim“ ist stellvertretend für mein Paßwort bei GMX. (Beides habe ich natürlich hier geändert)

Fehlen jetzt noch die Hosts, für die Sendmail Emails relayen soll. Ich habe hier bewußt auf SMTP-AUTH innerhalb des Netzwerkes verzichtet, da einige Hosts (z.B.: die NeXTSTEP-Maschine) ein altes Sendmail ohne SASL und SMTP-AUTH fahren. Diese Hosts stehen in der /etc/mail/relay-domains. Pro Zeile sollte ein Host stehen. Meine /etc/mail/relay-domains sieht so aus:

renraku.shadowrun.not
nexus.shadowrun.not
fuchi.shadowrun.not
sprawl.shadowrun.not

Dies wären alle Einstellungen, die nötig sind. Die genericstable und authinfo habe ich dann mit makemap(8) in eine entsprechende Map umgewandelt. Dies geht mit makemap hash genericstable < genericstable (für die authinfo muß man entsprechend die Namen ändern). Da sich in der /etc/mail/authinfo das Paßwort für den SMTP-Server befindet, sollte es nach Möglichkeit nur für root lesbar sein.

Die sendmail.cf habe erzeugt man dann mit make cf und make install in /etc/mail/. Ein beherztes make restart startet Sendmail mit der neuen Konfiguration neu. Nun liefert Sendmail nicht-lokale Mails über GMX aus.

Troubleshooting

Falls etwas schiefgegangen ist und es nicht wie gewünscht klappt, sind hier ein paar Tips zum „Debugging“. Falls das Masquerading/Generics nicht wie erwartet funktioniert, kann man Sendmail anweisen eine Email-Adresse durch seine Regeln zu schicken. Dazu muß man Sendmail mit sendmail -bt im sogenannten „Rule-testing mode“ starten. Da das Umschreiben der Absenderadresse getestet werden soll, muß man dies Sendmail mitteilen. Dies geschieht mit /tryflags HS. Nun können beliebige Absender-Adressen getestet werden. z.B: /try smtp fastjack. Sendmail wird nun genau beschreiben, wie es den Absender umschreiben würde, wenn die Mail über SMTP verschickt würde.

Falls der Fehler weniger genau einzugrenzen ist, kann man Sendmail beim SMTP-Dialog über die Schulter schauen. Dazu muß man Sendmail mit sendmail -Am -v -t starten. Danach erwartet Sendmail, daß man ihm eine Mail incl. Headern zu futtern gibt und mit Strg-D abschließt. Vorausgesetzt der Empfänger der Mail ist über SMTP erreichbar (also nicht lokal), wird Sendmail nun versuchen, diese Mail zuzustellen und gibt dabei die gesamte SMTP-Konversation auf dem Bildschirm aus. Damit sollte man den kniffeligeren Fehlern auf die Spur kommen können.

Eine ähnliche Anleitung für NetBSD hat tecneeq auf Newbie-Net geschrieben.

Leave a Reply

Your email address will not be published.