Postfix auf mehreren Ports „horchen“ lassen

Viele Netzwerke verbieten den Zugriff auf Port 25, um zu verhindern, dass Spam von ihrem Netzwerk aus gesendet wird (wenn auch nicht über ihren eigenen Mailserver). Muss man trotzdem öfter Mails aus einem solchen Netzwerk verschicken, bietet es sich an, Postfix auf dem Mailserver einen zweiten Port zuzuweisen.

Das ginge zwar auch in der master.cf, eventuell müssten dann aber noch einige andere Sachen geändert werden. Einfacher geht es, indem man iptables anweist, vom zweiten Port aus an 25 umzuleiten:

1
iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 25

Mit

1
iptables-save

wird die Änderung auch nach dem Serverneustart direkt wieder übernommen.

Postfix + Courier unter Debian/Ubuntu oder: einen Mailserver aufsetzen

Vor einigen Tagen habe ich mein Ubuntu-System wegen der vielen Neuerungen und Security-Updates auf die Version 10.04 (Lucid Lynx) gebracht. Vorher natürlich ein Vollbackup erstellt (stolze 16 GB, wusste garnicht dass so viel drauf ist *g*), aber glücklicherweise nicht benötigt. Das Upgrade ging einfach und schnell, ein paar Fragen zu Config-Dateien waren schnell beantwortet und nach einem Neustart mit frischem Kernel 2.6.32-22 lief auf den ersten Blick alles super. Auf den zweiten Blick dann ein (kleiner) Schock: Plesk ging nicht mehr. Es war garnicht mehr installiert. Auf der Website von Parallels findet sich nur der Hinweis, dass maximal Ubuntu 8.04 unterstützt wird (nicht mal 9.10 – schwach). Na ja im Grunde genommen waren mir Systeme wie Plesk schon immer suspekt, man hat manchmal mehr Ärger damit als Nutzen davon und so bin ich nicht zurück zu 8.04 gegangen sondern habe im Internet gesucht wie ich am besten einen Mailserver aufsetze – denn der funktionierte nichtmehr.

Eigentlich wollte ich ja das Courier-Gesamtpaket courier-mta + courier-pop und courier-imap einsetzen. Nach langem Herumprobieren inklusive zu Rate ziehen der Mailingliste von Courier (courier-users) musste ich aber leider zum Schluss kommen, dass die zur Zeit im Lucid Lynx vorhandene Version der courier-mta wohl einen Bug aufweist, der die MTA nicht mit dem Authentifizierungsdaemon kommunizieren lässt. So bekam ich immer beim Eingehen einer Mail den Fehler

courieresmtpd: authdaemon: s_connect() failed: Permission denied

Nachdem ich diesen Fehler also nicht lösen konnte (sogar die selbst kompilierte Variante bockte mit dem gleichen Fehler rum) habe ich mich schweren Herzens (ich hasse ungelöste Probleme^^) entschieden, Postfix als MTA einzusetzen und Courier für den IMAP- und POP-Zugriff.

 

Zuallererst müssen natürlich die erforderlichen Programme installiert werden (als root):

1
apt-get install postfix courier-authdaemon courier-authlib courier-authlib-userdb courier-base courier-imap courier-imap-ssl courier-pop courier-pop-ssl sasl2-bin libsasl2-2 libsasl2-modules

Bei der Installation von Postfix wählt man als Betriebsmodus Internet-Site aus.

adduser vmail einen neuen Benutzer an. Dabei wird auch ein Nutzerverzeichnis /home/vmail angelegt, in dem später alle Mails gespeichert werden. Die User- und Gruppenid merken wir uns für später. Jetzt wechseln wir zu dem angelegten Nutzer vmail, z.B. mit su vmail --preserve-environment (preserve-environment verhindert, dass die default-shell des Nutzers vmail zum Einsatz kommt, die ist normalerweise nämlich nicht was wir wollen). Als User vmail erstellen wir jetzt die Unterverzeichnisse für die einzelnen Domains und Nutzer, also z.B. für 2 Nutzer auf the-enlightened.de:

1
2
3
4
5
cd /home/vmail
mkdir -p the-enlightened.de/amras
maildirmake the-enlightened.de/amras/Maildir
mkdir -p the-enlightened.de/aerith
maildirmake the-enlightened.de/aerith/Maildir

Als Nächses kommt die Postfix-Config dran. Dafür muss man wieder als root angemeldet sein (neues Terminal oder exit als user vmail). Die Config befindet sich in /etc/postfix/main.cf. Hier muss überprüft werden, dass myhostname auf den Rechnernamen gesetzt ist, ansonsten muss das nachgeholt werden. Das Feld mydestination muss meist nicht geändert werden, hier sollten localhost und ebenfalls der Rechnername eingetragen sein. Schlussendlich sollte inet_interfaces auf all stehen, aber das sollte ebenfalls bereits so sein. Wir springen ans Ende des file und fügen folgende Zeilen ein (die Domains sowie die uid und die gid [die wir uns ja gemerkt haben] sind natürlich entsprechend anzupassen):

1
2
3
4
5
6
7
8
9
10
11
12
13
#virtual domains & smtp auth
virtual_mailbox_domains = the-enlightened.de domain2.tld domain3.tld
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:1006
virtual_gid_maps = static:1001
virtual_alias_maps = hash:/etc/postfix/virtual          
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous 
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options

Dann abspeichern und die in der config gerade angebenen files erzeugen:

1
2
touch /etc/postfix/vmailbox
touch /etc/postfix/virtual

Jetzt wird /etc/postfix/vmailbox editiert. Für jede Adresse wird die virtuelle Mailbox, in dem die Mails später landen sollen, angegeben, bei mir also z.B.

1
2
amras@the-enlightened.de        the-enlightened.de/amras/Maildir/
aerith@the-enlightened.de       the-enlightened.de/aerith/Maildir/

Wichtig ist hier der abschließende Slash, dadurch wird Postfix veranlasst, die Maildir-Struktur statt seiner eigenen zu benutzen. Die Angabe erfolgt also als Mailadresse + Leerzeichen/Tab + Pfad zum Maildir unter /home/vmail. Jetzt speichern und folgende Befehle ausführen:

1
2
3
postmap /etc/postfix/virtual
postmap /etc/postfix/vmailbox 
/etc/init.d/postfix reload

Ankommende Mails werden jetzt schonmal richtig einsortiert. Kommen wir also zum 2. Teil des Tutorials, dem Zugriff auf die Mails via Courier.

 

Hier kommen zuerst die Nutzerpasswörter an die Reihe. Dafür muss man weiter als root angemeldet sein. Wir ändern den Eintrag authmodulelist in /etc/courier/authdaemonrc auf
authmodulelist="authuserdb"

und legen mittels der folgenden Befehle die Nutzerpasswörter an:

1
2
3
4
5
6
7
8
9
userdbpw -md5 | userdb -f /etc/courier/userdb/the-enlightened.de amras@the-enlightened.de set systempw
(Passwort 2x eingeben)
userdb -f /etc/courier/userdb/the-enlightened.de amras@the-enlightened.de set home=/home/vmail/the-enlightened.de/amras/ gid=1001 uid=1006
 
userdbpw -md5 | userdb -f /etc/courier/userdb/the-enlightened.de aerith@the-enlightened.de set systempw
(Passwort 2x eingeben)
userdb -f /etc/courier/userdb/the-enlightened.de aerith@the-enlightened.de set home=/home/vmail/the-enlightened.de/aerith/ gid=1001 uid=1006
 
makeuserdb

Nach einem Neustart von courier-authdaemon (kA ob das nötig ist, schädlich ist es aber keinesfalls)
/etc/init.d/courier-authdaemon restart
können sich die eingetragenen Nutzer per POP oder IMAP (ggf. mit SSL) anmelden.

Um Mails versenden zu können (nicht von localhost sondern mit Anmeldung) erfordert es ein paar weitere Schritte. So muss die Datei /etc/postfix/master.cf editiert werden (als root). Hier wird beim ersten Eintrag (smtp) für den Parameter chroot ein „n“ festgelegt. Mit der chrooted-Umgebung habe ich es nach unzähligen Versuchen nämlich nicht zum Laufen bekommen.

1
2
3
4
5
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd

Als finaler Schritt editieren wir nun die /etc/postfix/sasl/smtpd.conf wie folgt:

1
2
3
4
pwcheck_method: authdaemond
mech_list: PLAIN LOGIN
authdaemond_path: /var/run/courier/authdaemon/socket
#autotransition: true

autotransition:true wird meiner Erfahrung nach nur bei der Benutzung von saslauthd benötigt, authdaemond kommt ohne aus. Bei wem es nicht funktioniert möge trotzdem den Parameter mal testweise anstellen (Mailserver scheinen die verschiedensten Macken zu haben, die sie nicht-deterministisch auf diveren Konfigurationen behindern).

Nach einem Neustart von Postfix und ggf. dem Start von courier-authdaemon via /etc/init.d/courier-authdaemon start sollte der Mailserver nun voll funktionstüchtig sein.