Ziel ist es ein Mail Server zum senden und empfangen von elektronischen Nachrichten zu installieren. Der Versand erfolgt per Simple Mail Transfer Protocol (SMTP). Die Nachrichten sollten einfach zu sichern sein und je Benutzer getrennt gespeichert. Der Abruf der Nachrichten erfolgt per Internet Message Access Protocol (IMAP). Die Nachrichten bleiben auf dem Server gespeichert. Als Betriebssystem dient Debian 10 (Buster) mit OpenSMTPD und Dovecot.
Andere Message Transfer Agent (MTA) wie Postfix oder Exim sollten zuvor entfernt werden.

Mit der Installation der Pakete geht es los.

sudo apt-get install -y opensmtpd dovecot-imapd dovecot-lmtpd

Die Verbindungen sollte nur verschlüsselt erfolgen. Deshalb brauchen wir ein Zertifikat.

Debian erzeugt automatich ein Zertifikat bei der Installation. Dieses Zertifikat können wir mit unseren Werten für den Common Name (CN) als Beispiel „mail.hostname.de“ ersetzen.

openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/ssl-cert-snakeoil.key \
  -out /etc/ssl/certs/ssl-cert-snakeoil.pem -days 365 \
  -subj "/C=DE/ST=Bundesland/L=Stadt/O=Firma/OU=Abteilung/CN=mail.hostname.de"

Sollten wir ein kostenloses Zertifikat von Letsencrypt haben, so kopieren wir es an die richtig Stelle. Die Erstellung von Zertifikat welche von Letsencrypt signiert werden, finden Sie in einem anderen Artikel.

cd /etc/letsencrypt/live/mail.hostname.de/
sudo cp cert.pem /etc/ssl/certs/ssl-cert-snakeoil.pem
sudo cp privkey.pem /etc/ssl/private/ssl-cert-snakeoil.key

Für das Postfach legen wir einen Benutzer mit „benutzername“ an und geben Ihm das Passwort „password123“. Der Nutzer darf sich nicht an Debian anmelden. Seine Nachrichten sollen im Verzeichnis /home/benutzername/Maildir gespeichert werden.

sudo useradd --create-home --shell /usr/sbin/nologin --groups mail benutzername
echo "benutzername:password123" | chpasswd

Dovecot verwaltet die Nachrichten und überträgt Sie per IMAP an das E-Mail Programm. Für die Speicherung im Benutzerverzeichnis müssen ein paar Einstellungen geändert werden.

sudo vim /etc/dovecot/conf.d/99-mail-stack-delivery.conf

mail_location = maildir:~/Maildir
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
 
# IMAP configuration
protocol imap {
        mail_max_userip_connections = 10
        imap_client_workarounds = delay-newmail
}
 
# Authentication configuration
disable_plaintext_auth = yes
auth_mechanisms = plain login

Im Anschluss ein Neustart von Dienst durchführen.

sudo service dovecot restart

Dovecot überträgt die Daten per IMAP über diese Ports:

TCP/143 StartTLS IMAP client
TCP/993 TLS/SSL IMAP client

Kommen wir jetzt zum Versand (MTA) der Nachrichten per OpenSMTPD.

sudo vim /etc/smtpd.conf

pki letsencrypt certificate "/etc/ssl/certs/ssl-cert-snakeoil.pem"
pki letsencrypt key "/etc/ssl/private/ssl-cert-snakeoil.key"
 
table aliases file:/etc/smtpd_aliases
table users file:/etc/smtpd_users
table authtable file:/etc/smtpd_passwd
 
# Define our listening ports, internal and public
listen on 0.0.0.0 port 25 tls pki letsencrypt auth-optional
listen on 0.0.0.0 port 465 smtps pki letsencrypt auth <users> mask-source
listen on 0.0.0.0 port 587 tls-require pki letsencrypt auth <users> mask-source
 
# Define our rules, evaluated in order of definition
accept from any for domain "mail.hostname.de" alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
accept for local alias <aliases> deliver to maildir
accept for any relay via tls+auth://gmail@smtp.googlemail.com auth <authtable>

Zeile #1,2 definiert die Zertifikate (PKI) mit dem Namen „letsencrypt“.
Zeile #3-5 legt die Tabellen mit dem Namen „aliases“, „users“ und „authtable“ fest.
Zeile #6-8 legt die Netzwerkschnittstellen und Ports 25, 465 und 587 fest.

Über Port 25/TCP erfolgt die Kommunikation von anderen SMTP Servern. Der Versand von Client per SMTP erfolgt über Port 465/TCP mit SSL/TLS oder Port 587/TCP mit StartTLS.

Eswird das Zertifikat „letsencrypt“ verwendet und die Client Benutzer aus Tabelle „users“ müssen sich anmelden.

Zeile #9 empfängt alles für Domain „mail.hostname.de“ und sendet es Dovecot per Socket (lmtp).
Zeile #10 leitet lokalen Nachrichten von Benutzern aus Tabelle „aliases“ in’s MailDir weiter.
Zeile #11 leitet alle Nachrichten an ein Relay per SMTP GMail weiter und verwendet dafür die Zugangsdaten aus Tabelle „authtable“.

Lokale Programme senden Nachrichten an Standartpostfächer welche an den Benutzer „benutzername“ weiter gegeben werden.

sudo vim /etc/smtpd_aliases

# Enter mail aliases below in the format described by aliases(5)
root:		benutzername
 
# RFC 2142 NETWORK OPERATIONS MAILBOX NAMES
abuse:		root
noc:		root
security:	root
 
# RFC 2142 SUPPORT MAILBOX NAMES FOR SPECIFIC INTERNET SERVICES
postmaster:	root
hostmaster:	root
webmaster:	root
www:		webmaster
ftp:		root

Das Kennwort vom Benutzer „benutzername“ wird nur von Dovecot (IMAP) verwendet. Zum versenden per OpenSMTPD wird für SMTP ein extra Kennwort vergeben. Das Kennwort „passwort123“ wird mit einem Programm verschlüsselt.

smtpctl encrypt passwort123

Das Ergebnis der Verschlüsslung wird in der Datei „smtpd_users“ gespeichert.

sudo vim /etc/smtpd_users

benutzername $6$kJ4rRxVfh8qhX5EQ$HO6bg5Ke/jZpZHEOMuq5r88EX2DnCNsNq8JVu02YfNLYgaZ.KFcH7wdfuZBNtZxv7NQ0ssrjv0WrPHUd9cUYe0

Gmail erlaubt den Versand per SMTP auch nur mit Zugangsdaten. Mit dem Label „gmail“ hinterlegen wird den Login „name@gmail.com“ und das Kennwort „passwort“ dafür in einer Datei.

sudo vim /etc/smtpd_passwd

gmail   name@gmail.com:passwort

Im Anschluss ein Neustart von Dienst durchführen.

sudo service opensmtpd restart

Hier noch nützliche Kommandos:

smtpctl show status

Die Warteschlange vom MTA anzeigen und löschen.

smtpctl show queue
smtpctl remove all

Hier eine Alternative zum Kommantor „newaliases“.

sudo smtpctl update table aliases