Mailserver mit Postfix und Dovocot

Betriebssystem: Debian 9, 10 oder Devuan ascii

Eine wichtige Voraussetzung ist die saubere Namensauflösung des Hosts selber; die Datei /etc/hostname darf nur eine einzige Zeile enthalten, nämlich den Short-Name (‚dsrv‘), wobei der Domänenname in der /etc/hosts definiert wird:

root@dsrv:~# ### Bitte in der Datei /etc/hosts wie folgt anpassen (Reihenfolge beachten!):
root@dsrv:~# #  IP-ADRESSE     FQDN DES HOSTS    SHORT-NAME DES HOSTS
root@dsrv:~# #   127.0.1.1     dsrv.dom1.test           dsrv
root@dsrv:~#
root@dsrv:~# head -2 /etc/hosts
127.0.0.1   localhost
127.0.1.1   dsrv.dom1.test    dsrv
root@dsrv:~#
root@dsrv:~#
root@dsrv:~# ### Short-Name live setzen, damit nach einem Re-Login als 'root' alles stimmt:
root@dsrv:~# hostname dsrv
root@dsrv:~#
root@dsrv:~# hostname -f
dsrv.dom1.test
root@dsrv:~#

Darüberhinaus ist es natürlich angeraten, dem Host eine feste IP-Adresse zuzuweisen und sich nicht vom DHCP-Server bedienen zu lassen.

Software installieren, erste Konfiguration

Zuerst installieren wir die erforderliche Software:

root@dsrv:~# apt-get install postfix dovecot-imapd bsd-mailx
...

Währenddessen Postfix installiert wird, stellt uns der Debian-Assistent ein paar Fragen. Wir wählen bzw. hinterlegen folgendes:

  • Modus: „Internet Site“

  • FDQN des Hosts „dsrv.dom1.test“

Mail Transfer Agent „Postfix“ einrichten

Die beiden wichtigsten Dateien sind:

  • /etc/postfix/master.cf (Starten der Postfix-Daemons, ist wie eine klassische inetd-Konfiguration aufgebaut)

  • /etc/postfix/main.cf (die am meisten benötigte Datei)

Mittels des obigen Assistenten wurden diese Einstellungen generiert:

root@dsrv:~# # Syntaycheck der eigenen Konfiguration:
root@dsrv:~# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mydestination = $myhostname, dsrv.dom1.test, dsrv, localhost.localdomain, localhost
myhostname = dsrv.dom1.test
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
root@dsrv:~#

Da wir auch E-Mail für unsere Domäne ‚dom1.test‘ annehmen wollen, editieren wir den wichtigsten Parameter ‚mydestination‘ (Entfernen des Shortnames, laut hostname -s):

root@dsrv:~# postconf -e 'mydestination = dom1.test, localhost.localdomain, localhost'
root@dsrv:~#
root@dsrv:~#
root@dsrv:~# # Zur Kontrolle:
root@dsrv:~# postconf mydestination
mydestination = dom1.test, localhost.localdomain, localhost
root@dsrv:~#
root@dsrv:~#
root@dsrv:~# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
root@dsrv:~#

Remote E-Mail Delivery einrichten

Ziel: Einen Mail Acccess Agent für IMAP einbinden

  1. Postfix veranlassen, vom ‚mbox‘-Format auf das ‚maildir/‘-Format umzuschalten:

DATEI: /etc/postfix/main.cf

# Sofern vorhanden, folg. Zeile auskommentieren (bei Debian Jessie)
#mailbox_command = procmail -a "$EXTENSION"

# Folg. Zeile hinzufügen, der abschließende Slash ist wichtig!
home_mailbox = .maildir/

DIENST neu starten: postfix reload

  1. IMAP-Daemon konfigurieren:

  1. Bei Verwendung des Dovecot-Servers (apt-get install dovecot-imapd)

DATEI: /etc/dovecot/dovecot.conf (bis Debian Squeeze in dieser zentralen Datei, ab Jessie: /etc/dovecot/conf.d/10-mail.conf, Buster: Zeile 30):

# Zeile auf diesen Wert anpassen:
mail_location = maildir:~/.maildir

TLS deaktivieren: In neueren Debian-Releases geht ohne Transportverschlüsselung nichts mehr. Das lässt sich zu Testzwecken abschalten. Mit vi +10 /etc/dovecot/conf.d/10-auth.conf stehen wir in dieser Datei i.d.R. an der richtigen Stelle und erlauben Klartextauthentifizierung:

# Zeile auf diesen Wert anpassen:
disable_plaintext_auth = no

DIENST neu starten: service dovecot restart

  1. Bei Verwendung des Courier-Servers (apt-get install courier-imap)

DATEI: /etc/courier/imapd

# Zeile anpassen:
#MAILDIRPATH=~/.maildir <- Im Maillog: "chdir /root/.maildir: Permission denied", deshalb:
MAILDIRPATH=.maildir

Hinweis: Dieses Verzeichnis wird automatisch von Postfix erzeugt, wenn dem Benutzer eine erste E-Mail gesendet wird.

Ansonsten muss man es vor der ersten Verbindungsaufnahme durch einen MUA manuell anlegen.

DIENST neu starten: /etc/init.d/courier-imap restart

  1. Durchführung von Tests:

Hinweis: Das Verzeichnis ~/.maildir wird automatisch erzeugt,

  1. wenn der Benutzer die erste Mail vom System erhält,

  2. sich das erste Mail über den MUA einloggt und seine Inbox öffnet.

Achtung: Werden jetzt neue Mails versendet, landen sie nunmehr im Verzeichnis ~/.maildir, ungelesene bleiben aber weiterhin unter /var/spool/mail liegen!

=> ALs Benutzer ‚root‘ mit Hilfe der Kommandozeile eine Mail an ‚tux‘ senden:

  1. Senden einer Mail an ‚tux‘: echo Inhalt | mail -s "Mail mit Inhalt" tux@dom1.test

  2. Kontrollmonitor für eingehende Nachrichten: watch -n1 -d ls -la /home/tux/.maildir/new/

=> Als Benutzer ‚tux‘ mit IMAP- und SMTP-Account (nicht authentifizierend) mittels der MUA evolution: Mails abfrufen, …

Mailtransfer mit TLS absichern

MTA Postfix

Der Mail Transfer Agent bietet per Default die gewünschte Transportverschlüsselung via STARTTLS an. Hierfür sind bereits die „snakeoil“-Dateien während der Installation des Debian-Pakets eingebunden worden, siehe hier:

root@dsrv:~# postconf -n | grep -i tls
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
root@dsrv:~#

MAA Dovecot

Bei Dovecot ist es anders, hier muss TLS erst aktiviert werden. Das passiert mit vi +6 /etc/dovecot/conf.d/10-ssl.conf, wo wir ssl = yes setzen. Außerdem müssen wir ein Zertifikat samt Schlüssel einbinden (gleich unterhalb Zeile 12, …). Hier können auch wieder die vorhandenen und bereits in Postfix verwendeten Files /etc/ssl/private/ssl-cert-snakeoil.key und /etc/ssl/certs/ssl-cert-snakeoil.pem zum Einsatz kommen.

Folgerichtig sollte nun die Möglichkeit unsicherer Plaintextauthentifizierung wieder abgeschaltet werden. Dazu führen wir vi +10 /etc/dovecot/conf.d/10-auth.conf aus, setzen disable_plaintext_auth = yes und kontrollieren diese Datei sowie die anderen beiden wichtigen Configs:

root@dsrv:~# grep -v '^\s*#\|^$' /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain
!include auth-system.conf.ext
root@dsrv:~#
root@dsrv:~#
root@dsrv:~# grep -v '^\s*#\|^$' /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
root@dsrv:~#
root@dsrv:~#
root@dsrv:~# grep -v '^\s*#\|^$' /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/.maildir
namespace inbox {
inbox = yes
}
root@dsrv:~#

Und hier sind nochmal alle „non-default values“, also auch unsere Einstellungen:

root@dsrv:~# doveconf -nP
# 2.2.27 (c0f36b0): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.16 (fed8554)
# OS: Linux 4.9.0-6-amd64 x86_64 Debian 9
mail_location = maildir:~/.maildir
namespace inbox {
inbox = yes
location =
mailbox Drafts {
    special_use = \Drafts
}
mailbox Junk {
    special_use = \Junk
}
mailbox Sent {
    special_use = \Sent
}
mailbox "Sent Messages" {
    special_use = \Sent
}
mailbox Trash {
    special_use = \Trash
}
prefix =
}
passdb {
driver = pam
}
protocols = " imap"
ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem
ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key
userdb {
driver = passwd
}
root@dsrv:~#

Zum Abschluss starten wir Dovecot neu und kontrollieren das Port-Listening:

root@dsrv:~# service dovecot restart
[ ok ] Restarting IMAP/POP3 mail server: dovecot.
root@dsrv:~#
root@dsrv:~# lsof -iTCP:25,143,993 -Pn
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
master  1494 root   12u  IPv4  11067      0t0  TCP *:25 (LISTEN)
master  1494 root   13u  IPv6  11068      0t0  TCP *:25 (LISTEN)
dovecot 1765 root   33u  IPv4  26771      0t0  TCP *:143 (LISTEN)
dovecot 1765 root   34u  IPv6  26772      0t0  TCP *:143 (LISTEN)
dovecot 1765 root   35u  IPv4  26773      0t0  TCP *:993 (LISTEN)
dovecot 1765 root   36u  IPv6  26774      0t0  TCP *:993 (LISTEN)
root@dsrv:~#
root@dsrv:~#

Zur Konfiguration des Mail-Clients (MUA) „evolution“ für IMAPS siehe diese Abbildung:

Konfiguration von IMAPS (TCP Port 993)