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 mask-source
listen on 0.0.0.0 port 587 tls-require pki letsencrypt auth mask-source
# Define our rules, evaluated in order of definition
accept from any for domain "mail.hostname.de" alias deliver to lmtp "/var/run/dovecot/lmtp"
accept for local alias deliver to maildir
accept for any relay via tls+auth://gmail@smtp.googlemail.com auth
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
Schreibe einen Kommentar