FreeBSD und sendmail

FreeBSD Version: 7.2-RELEASE
Sendmail Version:8.14.3
Stand: 21.10.2009

Als Standard ist unter den BSD's sendmail als Mail Dienst installiert. Daher ist es praktisch sich nur mit einem Mail Dienst auskennen zu müssen. In diesem Setup wird der sendmail als Client (SMTP Relay) Konfiguriert der sich an einem SMTP Server per AUTH Anmeldet.

Für die Authentifiezierung wird SASL benötigt. Dieses muß man als erstes aus den ports security/sasl2 installieren. Als nächtes muß man folgendes in der /etc/make.conf eintragen:

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

Danach muß man sendmail neu übersetzen. Hierzu ruft man folgende Kommandos nacheinander auf:

	# cd /usr/src/lib/libsmutil
	# make cleandir && make obj && make
	# cd /usr/src/lib/libsm
	# make cleandir && make obj && make
	# cd /usr/src/usr.sbin/sendmail
	# make cleandir && make obj && make && make install
	

Um zu überprüfen ob Sasl mit eingebaut wurde führt man folgenden Befehl aus:

	$ sendmail -bt -d0.1
	

Danach sollte folgendes erscheinen:

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

	============ SYSTEM IDENTITY (after readcf) ============
	...
	

Wichtig hierbei ist die Ausgabe von SASLv2.
Zusätzlich nützlich ist die Ausgabe von STARTTLS (Ist bei FreeBSD per default aktiviert). Damit werden die Klartext Daten zwischen den SMTP Server verschlüsselt und damit auch das Authentifizierungs Passwort.

Unter /etc/mail befindet sich ein Makefile. Mit diesem läßt sich sendmail sehr einfach per make steuern und Konfigurieren.

Als erstes läßt man sich eine Standard Konfiguration erstellen. Hierzu führt man folgendes aus:

	# cd /etc/mail
	# make
	

Damit werden vier Konfigurationsfiles erstellt die mit dem Hostnamen Anfangen. Zum Beispiel:

	foo.bar.de.cf
	foo.bar.de.mc
	foo.bar.de.submit.cf
	foo.bar.de.submit.mc	
	

Die .mc Dateien sind die M4 Konfigurationsdateien. Die .cf Dateien sind die Konfigurationsdateien die Sendmail Interpretieren kann. Diese werden aus den .mc Konfigurationsdateien erstellt. Nähere Hintergründe siehe sendmail.

Nun wird die Datei [HOSTNAME].mc (nicht die mit der .submit.mc Endung) Konfiguriert. In dieser wird folgende Zeile hinzugefügt:

	...	
	dnl set SASL options
	TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
	define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
	...
	

Diese Zeilen fügt man am besten nach der "virtusertable" Angabe in der Konfiguration ein.

Als nächstes aktiviert man die SMART_HOST Angabe. Hierzu entfernt man das dnl vor der define(`SMART_HOST'... Zeile und gibt einen Mail Host an der die Emails weiter geleitet werden. Siehe Beispiel:

	...
	dnl Dialup users should uncomment and define this appropriately
	define(`SMART_HOST', `esmtp:bla.bar.de')dnl
	...
	

Die esmtp: Angabe ist Optional und gibt an das der Mail Host Empfänger das ESMTP Protokoll versteht.

Damit ist die Konfiguration von sendmail mit SASL erledigt.

Jetzt muß man das Passwort angeben. Dies wird in der access Datei unter /etc/mail abgelegt. Folgende Zeile muß in der access Datei hinzugefügt werden:

	...
	AuthInfo:bla.bar.de "U:ali" "P=ntAgl86Met9="
	...
	

Erläuterung:
AuthInfo: gibt den gleichen Hostname an wie in der SMART_HOST Angabe.
U: gibt den Username für die Authentifizierung an.
P= gibt das Passwort für die Authentifizierung an. Das Passwort ist Base64 Kodiert. Mit P: kann man das Passwort auch in klar Text einfügen.

Fals der Server SMTP Server nicht angibt mit welcher Methode die Authentifizierung nur statt finden kann, dann sollte man diesen Authentifizierungs Mechanismus mit der angabe M: angeben. Zum Beipiel:

	...
	AuthInfo:bla.bar.de "U:ali" "P=ntAgl86Met9=" "M:PLAIN"
	...	
	

Nach dem alle Konfigurationen abgeschlossen sind, können diese übersetzt und aktiviert werden. Dies funktioniert wie folgt:

	# cd /etc/mail
	# make all	
	

Übersetze alle Dateien.

	# make install
	

Installiere die .cf Dateien.

	# make restart
	

Starte sendmail neu.

Emails unterwegs schreiben

Schreibt man von unterwegs Emails, zum Beispiel im Zug wo es kein Netz gibt, könnte man folgende zeile, diesmal in der [HOSTNAME].submit.mc, hinzufügen (am besten nach der letzten define Angabe) um Fehleremails zu vermeiden:

	...
	define(`confDELIVERY_MODE', `deferred')dnl
	...
	

Damit werden alle Emails unterwegs gesammelt und können bei verfügbarem Netz per

	sendmail -qf
	
abgeschickt werden.

Mit

	sendmail -bp
	
kann man sich einen überblick verschaffen welche Emails sich in der Queue befinden.

Links