.. _mailserver: Mailserver mit Postfix und Dovocot ################################## .. highlight:: shell-session **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 ================================= .. highlight:: bash 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`` 2. IMAP-Daemon konfigurieren: a) 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`` b) 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`` 3. Durchführung von Tests: **Hinweis:** Das Verzeichnis ``~/.maildir`` wird automatisch erzeugt, a) wenn der Benutzer die erste Mail vom System erhält, b) 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: a) Senden einer Mail an 'tux': ``echo Inhalt | mail -s "Mail mit Inhalt" tux@dom1.test`` b) 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 ----------- .. highlight:: shell-session 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 =