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.

Emailserver einrichten mit Postfix und Dovecot einrichten

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".

Email-Programm konfigurieren

Sources: