Tutorial: Postfix + Dovecot unter Debian 7 aufsetzen in 15 Minuten

Einen Server „mal eben“ mit einem funktionierenden Mailing auszustatten ist gar nicht mal so leicht. Es gibt gibt dabei etliche verschiedene Alternativen: postfix, exim, qmail, sendmail, cyrus, dovecot, heirloom mailx und so weiter und weiter… Ich wollte hier eigentlich ein netqmail + dovecot analog zu Uberspace aufsetzen, doch wird vielerorts empfohlen für Debian stattdessen postfix zu nehmen.

Damit ihr nicht so lange rumsuchen und alles mögliche ausprobieren müsst, verweise ich mal auf die für meine Installation funktionierenden Tutorials.

Insgesamt dauert das Einrichten nur ca. 15 bis 30 Minuten; das hängt davon ab, wie gründlich die Hintergrund-Informationen in den verlinkten Blogs gelesen werden.

In diesem Tutorial gehe ich davon aus, dass keine anderen Server für Mail installiert sind bzw. vorher entfernt und beendet wurden.

Installation von Postfix & Dovecot

Wenn man sich jetzt VServer mit Debian installiert, bekommt man sehr wahrscheinlich eines der offiziellen Images von OpenVZ.org. Das ist derzeitig Debian 7.6 („Wheezy“) mit Postfix 2.9 & Dovecot 2.17.
Wenn ihr andere Versionen habt, versucht es gar nicht erst. Ich habe mittlerweile gelernt bei den Tutorials auf die Versions-Nummer zu achten, da die Konfigurations-Einstellungen stark davon abhängig sind; erwartet hier lieber keine Kompatibilität.

Hierbei geht es um ein möglichst einfaches und minimales Setup ohne MySQL.

Einzige funktionierende Anleitung, um Mails anzunehmen:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-postfix-e-mail-server-with-dovecot

Viele andere bestehen aus etlichen Schritten und sind sehr kompliziert. Dabei geht es auch deutlich einfacher – zumindest für das Minimal-Setup.

Mailbox in das Home des Users legen

Eine Änderung nehme ich bei mir trotzdem noch vor: Ich möchte das Maildir lieber im Home der jeweiligen Benutzer haben, damit jene sich dieses selber sichern können.

In der /etc/dovecot/dovecot.conf ändern:

mail_location = maildir:~/Maildir

In der /etc/postfix/main.cf ergänzen:

home_mailbox = Maildir/

SMTP AUTH für Mails nach draußen

Server-intern konnte ich mir jetzt schon mal Mails zustellen. Das ist schon mal gut, da die Server-Dienste wie Apache, MySQL & co auch dieses System verwenden für Problem-Meldungen. Wenn allerdings jetzt eine externe Adresse angeschrieben werden sollte, erhielt ich noch diesen Fehler:

554 5.7.1 <mail@mydomain.com>: Relay access denied

Das lag daran, dass mir der SMTP AUTH fehlte, der heute eine zwingende Voraussetzung ist, wenn man mit irgendeinem fremden SMTP Server sprechen will.

Um das zu lösen, gibt es hier Hilfe: https://workaround.org/ispmail/wheezy/authenticated-smtp
Damit war ich dann schon mal in der Lage Mails an den Uberspace-Server zu übergeben.

Hinweis: Der „submission“-Teil aus der oberen Anleitung muss dafür wieder aus der /etc/postfix/master.cf entfernt werden!

Den Mail-Client richtig einstellen

Die richtigen Einstellungen in Claws Mail waren mir in den Tutorials auch nicht sofort offensichtlich. Also musste ich diese experimentell herausfinden. Hier sind sie:

claws<em>allgemein claws</em>senden claws_ssl

Und wie sende ich Mails an GMail & co?

Mails an GMail-Adressen sind noch schwieriger. Google lehnt die Mail dann immer noch ab:

Our system has detected 550-5.7.1 that this message is likely unsolicited mail.  
To reduce the amount of 550-5.7.1 spam sent to Gmail, this message has been  
blocked. Please visit 550-5.7.1  
http://support.google.com/mail/bin/answer.py?hl=en&answer=188131  
for 550 5.7.1 more information.  
kn5si24189651wjc.75 - gsmtp (in reply to end of DATA command))  

Wenn man Mails versenden will, müssen noch mehr Einstellungen passen. Die Domain braucht einen Reverse-DNS-Eintrag, einen SPF Record und vieles weitere: https://support.google.com/mail/answer/81126?hl=de

In meinem Fall ist mir aufgefallen, dass Postfix eine der IPv6 Adressen meines Servers verwendet hat und für diese eben kein rDNS eingetragen wurde. Mir erschien es am einfachsten, den IPv6-Support zu deaktivieren, damit ich nicht für alle 10 IPv6-Adressen meines Servers überall Einstellungen nachpflegen muss. Dafür muss folgendes in der /etc/postfix/main.cf ergänzt werden:

inet_protocols = ipv4

Einmal mit /etc/init.d/postfix restart neustarten und es läuft. 🙂

Links zu Anleitungen

Für die Ungeduldigen: Die Kurzanleitung

Hier fasse ich die Schritte für eine funktionierende Installation aus den Tutorials oben nochmal zusammen. Wer verstehen möchte, wofür welche Option ist, möge diese bitte lesen. Hier geht es nur um eine schnelle Copy & Paste-Installation. Es müssen hierbei nur die rot markierten Stellen angepasst werden.

Die Installation ist deswegen so einfach, weil bei diesem Standard-Setup jeder Systemuser unter seiner „meinname@domain.de“ erreichbar ist. Es gibt hierbei keine virtuellen Domains. In meinem Use Case sind diese nicht notwendig. Ferner wird nur Imap-Support eingerichtet, da POP3 veraltet ist.

Installation der benötigten Pakete:

aptitude install postfix dovecot-core dovecot-imapd

Bei Nachfrage „Internet Site“ auswählen. Dies ist bereits die Vorauswahl.

Erstellung eines selbst signierten SSL-Zertifikats

openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/ssl/private/mail.key -out /etc/ssl/certs/mailcert.pem

Alles bis auf „Common Name (FQDN)“ ist im Grunde optional, aber desto ausführlicher und ehrlicher hier geantwortet wird, desto eher wird dem Zertifikat von anderen natürlich vertraut. Beim „Common Name“ sollte dann „mail.domain.de“ eingetragen werden. Als „Email Adress“ eine „postmaster@domain.de“ zu hinterlegen, ist sicherlich auch nicht verkehrt.

Postfix-Konfiguration

Die /etc/postfix/main.cfg sieht so aus:
( Annahme ist, dass ein DNS-MX-Record auf mail.domain.de gesetzt ist )

# Basis-Einstellungen
myhostname = mail.domain.de  
myorigin = /etc/mailname  
mydestination = mail.domain.de, domain.de, localhost, localhost.localdomain  
relayhost =  
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128  
mailbox_size_limit = 0  
recipient_delimiter = +  
inet_interfaces = all  
home_mailbox = Maildir/  
# Aliase 
alias_maps = hash:/etc/aliases  
alias_database = hash:/etc/aliases  
# SMTP SSL-Zeugs
smtpd_sasl_type = dovecot  
smtpd_sasl_path = private/auth  
smtpd_sasl_auth_enable = yes  
smtpd_tls_auth_only = yes  
smtpd_use_tls=yes  
smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem  
smtpd_tls_key_file = /etc/ssl/private/mail.key  
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache  
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache  
smtpd_tls_security_level = may  
smtpd_tls_protocols = !SSLv2, !SSLv3  
# Empfangslimitierungen
local_recipient_maps = proxy:unix:passwd.byname $alias_maps  
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination  

Dovecot konfigurieren

Die /etc/dovecot/dovecot.conf sieht so aus:

disable_plaintext_auth = no  
mail_privileged_group = mail  
mail_location = maildir:~/Maildir  
userdb {  
 driver = passwd
}
passdb {  
 args = %s
 driver = pam
}
protocols = " imap"  
protocol imap {  
 mail_plugins = " autocreate"
}
plugin {  
 autocreate = Trash
 autocreate2 = Sent
 autosubscribe = Trash
 autosubscribe2 = Sent
}
service auth {  
 unix_listener /var/spool/postfix/private/auth {
 group = postfix
 mode = 0660
 user = postfix
 }
}
ssl=required  
ssl_cert = </etc/ssl/certs/mailcert.pem  
ssl_key = </etc/ssl/private/mail.key  

Die /etc/aliases sieht so aus (mit Catch-all auf euren Systembenutzer):

mailer-daemon: postmaster  
postmaster: root  
nobody: root  
hostmaster: root  
usenet: root  
news: root  
webmaster: root  
www: root  
ftp: root  
abuse: root  
root: meinsystemuser  

Durchstarten & Testen

newaliases  
postfix start  
service dovecot restart  

Ihr könnt nun testen, ob alles funktioniert, indem ihr in Claws Mail (Downloadlink) die oben beschriebenen Einstellungen vernehmt und am besten an eine GMail-Adresse eine Test-Mail versendet. Wenn diese ankommt, habt ihr alles richtig gemacht und könnt vermutlich auch überall anders hin mailen.

Wenn es noch irgendwo hakt, guckt hier:

tail /var/log/syslog

Ich wünsche viel Spaß. 🙂

Fehlersuche & Tools

Zur Fehlersuche kann ich diese Seite empfehlen: http://www.dnsstuff.com/

Zur Generierung von SPF-Einträgen gibt es hier einen Wizard: http://www.spfwizard.net/

Fazit

Jaha… Einen Mail-Server richtig einzurichten ist wegen den miesen Spammern da draußen schon so richtig kompliziert geworden. So komplex sogar, dass es Tools gibt, die über 30 Voraussetzungen prüfen, damit man nicht auf der Spam Blacklist landet. Echt irre.

Man muss sich dafür eine Menge Zeug anlesen und sich durch Tutorials schlagen, die teilweise gar nicht mehr aktuell sind.

Ich habe den Server aus Spaß und zum Lernen aufgesetzt und durch diese Erfahrung großen Respekt davor bekommen. Ich denke aber eher nicht, dass ich tatsächlich für meinen Produktiv-Betrieb einen selbst gehosteten Mail-Server einsetzen werde. Das überlasse ich dann doch lieber Profis.