Ubuntu-Server als Emailserver einrichten mit Postfix und Dovecot
Hier wird ein Ubuntu-Server als Multidomain-Emailserver manuell konfiguriert, einschließlich TLS-Verschlüsselung für einen sicheren POP3-Zugang.
Die Konfiguration eines kompletten Mailservers kann auch umgangen werden, indem eingehende Emails einfach zu einer Email-Adresse bei einem Freemail-Anbieter weitergeleitet werden. Das ist relativ einfach einzurichten (siehe erster Abschnitt), und Dinge wie Verschlüsselung und Spam-Filter werden vom Drittanbieter erledigt.
Benötig wird ein Server mit installiertem Ubuntu und root-Zugang. Der Server sollte gegen Angriffe abgesichert sein, eine Anleitung dazu findet sich hier.
Für sichere Emails über eine SSL-Verbindung wird außerdem ein Zertifikat benötigt, das für die Hauptdomain installiert werden sollte. Hier ist eine Anleitung um ein TLS-Zertifikat von LetsEncrypt zu installieren.
Email-Weiterleitung für mehrere Domains und Benutzer
Zunächst wird geprüft, dass der MX-Eintrag der eigenen Domain korrekt eingerichtet ist. Der MX-Eintrag sollte auf die eigene Domain zeigen, und der der A-Eintrag der Domain auf die IP des Servers.
benutzer@server:~$ dig example.com mx
benutzer@server:~$ dig example.com a
Nun werden Postfix (für SMTP) und Dovecot (für POP3-Mailboxen) installiert. Der Netstat-Befehl sollte den Postfix-Prozess "master" auf Port 25 anzeigen.
root@server:~# apt-get install postfix dovecot dovecot-core dovecot-imapd dovecot-pop3d dovecot-lmtpd
root@server:~# service postfix status
root@server:~# netstat -ltnp | grep 25
Die zentrale Postfix-Konfigurationsdatei ist "main.cf", hier wird eingefügt
root@server:~# vim /etc/postfix/main.cf
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_mailbox_domains = /etc/postfix/virtual_mailbox_domains
Die Datei "virtual_mailbox_domains" enthält eine eingfache Liste aller für Email-Adressen zulässigen Domains, in der Datei "virtual" werden dann die einzelnen Email-Adressen für die Weiterleitung konfiguriert.
root@server:~# vim /etc/postfix/virtual_mailbox_domains
example.com OK
example.net OK
example.de OK
root@server:~# vim /etc/postfix/virtual
ich@example.com example@outlook.com
@example.com example@gmail.com
Hier wird als Beispiel in der ersten Zeile wird eine bestimmte Email-Adresse auf eine Outlook-Adresse weitergeleitet. In der zweiten Zeile werden mit einem Catch-all alle Emails an die Domain "example.com" umgeleitet auf eine Gmail-Adresse.
Nach jeder Änderung müssen die Änderungen mit postmap
verarbeitet und dann vom "postfix"-Service neu geladen werden.
root@server:~# postmap /etc/postfix/virtual_mailbox_domains
root@server:~# postmap /etc/postfix/virtual
root@server:~# service postfix reload
Die neuen Einstellungen sollten getestet werden, um sicherzustellen, dass die Emails auch wirklich ankommen.
Email mit POP3 Mailboxen über SSL
Um POP3 Mailboxen einzurichten, muss zunächst Postfix so konfiguriert werden, dass eingehende Emails and Dovecot durchgereicht werden. Dann wird Dovecot entsprechend konfiguriert, um die Emails in empfang zu nehmen, und in Textdateien abzulegen, die später durch ein Email-Programm wie Outlook oder Thunderbird abgerufen werden können.
Zum Schluss wird das ganze noch mit einem SSL/TLS-Zertifikat konfiguriert, damit der Abruf der Emails über POP3 immer verschlüsselt erfolgt.
1. Postfix
Postfix hat zwei zentrale Konfigurationsdateien: "/etc/postfix/main.cf" und "/etc/postfix/master.cf". In der Datei "master.cf" werden lediglich zwei Zeilen unkommentiert (jedoch nicht die dahinter stehenden Parameter).
root@server:~# vim /etc/postfix/master.cf
submission inet n - - - - smtpd
smtps inet n - - - - smptd
In "main.cf" werden folgende Einstellungen angepasst. Eine kurze Erläuterung findet sich unten.
root@server:~# vim /etc/postfix/main.cf
# Domain should have valid XM, A, TXT records.
myhostname = mail.example.com
myorigin = example.com
mydomain = example.com
# References /var/spool/postfix/private/dovecot-lmtp
virtual_transport = lmtp:unix:private/dovecot-lmtp
# Enable SMTP auth and let Dovecot handle it.
smtpd_tls_cert_file = /etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/example.com/privkey.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = no
broken_sasl_auth_clients = yes
smtpd_tls_auth_only = yes
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination, reject_non_fqdn_sender, reject_non_fqdn_recipient
Mit dieser Konfiguration sollten nun Dienste auf folgenden Ports laufen: SMTP auf Port 25, SMTPS auf Port 465, und MSA (Mail Submission Agent) auf Port 587.
Die Felder myhostname
, myorigin
und mydomain
sollten die Hauptdomain enthalten, auf die auch das SSL/TLS-Zertifikat ausgestellt ist. Der öffentliche und der private Schlüssel des Zertifikats werden über die Felder smtpd_tls_cert_file
und smtpd_tls_key_file
referenziert. Hier muss wieder "example.com" durch die eigene Domain ersetzt werden.
Damit sollte Postfix nun alle eingehenden Mails and Dovecot durchreichen, wo sie in POP3-Boxen gespeichert werden.
2. Setup Dovecot
Zunächst wird ein Benutzer für Dovecot erstellt, mit dessen Zugriffsrechten später die POP3-Postfächer gespeichert werden.
root@server:~# mkdir -p /var/mail/vhosts
root@server:~# groupadd -g 5000 vmail
root@server:~# useradd -r -g vmail -u 5000 vmail -d /var/mail/vhosts -c "virtual mail user"
root@server:~# chown -R vmail:vmail /var/mail/vhosts/
Für Dovecot müssen eine Reihe verschiedener Dateien angepasst und Verzeichnisse erstellt werden, um eingehende Emails zu speichern. In der Datei "dovecot.conf" sollte geprüft werden, dass die folgende Zeile unkommentiert ist.
root@server:~# vim /etc/dovecot/dovecot.conf
!include_try /usr/share/dovecot/protocols.d/*.protocol
Dann werden in der Datei "10-mail.conf" die Unterverzeichnisse für alle POP3-Inboxen festgelegt. Dabei sollte die Zeile mit "mbox" auskommentiert sein, und die Zeile mit "maildir" aktiviert.
root@server:~# vim /etc/dovecot/conf.d/10-mail.conf
# mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = maildir:/var/mail/vhosts/%d/%n
Entsprechend der obigen Einstellung werden die Verzeichnisse für die gewünschten Email-Adressen angelegt. Für die Beispiel-Email "benutzer@example.com" wäre das
root@server:~# mkdir -p /var/mail/vhosts/example.com/benutzer
Nun wird in der Datei "10-master.conf" der IMAP- und POP3-Zugang, sowie die Art der Benutzer-Anmeldung konfiguriert.
root@server:~# vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
inet_listener imap {
# port = 143
}
inet_listener imaps {
port = 993
ssl = yes
}
}
service pop3-login {
inet_listener pop3 {
# port = 110
}
inet_listener pop3s {
port = 995
ssl = yes
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0600
user=postfix
group=postfix
}
}
Im gleichen Verzeichnis findet sich die Datei "10-ssl.conf" über die das SSL in Dovecot konfiguriert wird. Die Datei sollte nur die filgenden Zeilen enthalten
root@server:~# vim /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/example.com/cert.pem
ssl_key = </etc/letsencrypt/live/example.com/privkey.pem
ssl_ca = </etc/letsencrypt/live/example.com/fullchain.pem
ssl_dh_parameters_length = 1024
ssl_protocols = !SSLv2
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
In der Datei "10-auth.conf" sollte unter Anderem Folgendes eingestellt sein
root@server:~# vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
# !include auth-system.conf.ext
!include auth-passwdfile.conf.ext
Und im erwähnten "auth-passwdfile.conf.ext" dann
root@server:~# vim /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
driver = passwd-file
args = scheme=PLAIN username_format=%u /etc/dovecot/dovecot-users
}
userdb {
#driver = passwd-file
driver = static
#args = username_format=%u /etc/dovecot/dovecot-users
args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
# Default fields that can be overridden by passwd-file
#default_fields = quota_rule=*:storage=1G
# Override fields from passwd-file
#override_fields = home=/home/virtual/%u
}
Nun werden in der oben referenzierten Datei "dovecot-users" die Benutzer-Logins für den POP3-Zugang eingestellt. Die Passwörter können als plain text oder als Hashwert gespeichert werden, wobei letzteres natürlich ein wenig sicherer ist.
Hashwerte werden mit doveadm
wie folgt erstellt
root@server:~# doveadm pw -s MD5-CRYPT
Enter new password:
Retype new password:
{MD5-CRYPT}$1$JdyRMcO6$qUwKZT30EVp/oIpVfxEXF1
Diese werden dann in "dovecot-users" zeilenweise eingetragen, zusammen mit der jeweiligen Email-Adresse
root@server:~# vim /etc/dovecot/dovecot-users
benutzer@example.com:{plain}abc123
benutzer2@example.com:{MD5-CRYPT}$1$JdyRbcO6$qUwKZT10EVp/oIpVfAEXF1
Abschließend sollte noch eine Logdatei eingestellt werden, um bei Fehlfunktionen das Problem finden zu können.
root@server:~# vim /etc/dovecot/conf.d/10-logging.conf
log_path = /var/log/dovecot.log
Die Logdatei soll vom Logrotate-Service regelmäßig komprimiert werden, dazu erstellt man folgende Konfigurationsdatei
root@server:~# vim /etc/logrotate.d/dovecot
/var/log/dovecot*.log {
missingok
notifempty
delaycompress
sharedscripts
postrotate
doveadm log reopen
endscript
}
Nach einem Neustart von Dovecot sollte es nun möglich sein, eingehende Emails in einer POP3-Inbox zu empfangen und dann über einen "MUA" (Outlook, Thunderbird, o.ä.) abzurufen. Auch Gmail kann so eingestellt werden, dass es Emails von anderen Mailkonten über POP3 abruft und versendet.
root@server:~# service dovecot restart
Nach dem Neustart kann er POP3-Zugang zunächst vom lokalen PC aus getestet werden:
ich@pc:~# openssl s_client -starttls pop3 -crlf -connect mail.example.com:110
Dieser Befehl sollte einen kompletten TLS-Handshake anzeigen und dann in einer POP3-Kommandozeile enden. Diese kann mit quit
wieder beendet werden.
Email-Programm für POP3 konfigurieren
Abschließend noch kurz die Einstellungen am lokalen Email-Programm, um nun Emails abrufen und versenden zu können. Die meisten Email-Anwendungen werden die Server-Einstellunge automatisch erkennen.
Falls nicht, muss die Domain für SMTP und POP3 jeweils auf "mail.example.com" gesetzt werden, und die Standard-Ports 110 und 25 können eingestellt werden. Die Anmeldung erfolgt über STARTTLS mit "normalem Passwort".
Sources:
- http://www.binarytides.com/install-postfix-dovecot-debian/