Mailserver Workshop Konfiguration: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
 
= Zielsetzung =
 
= Zielsetzung =
−
* Einrichtung eines Mailservers mit Postfix, Dovecot und Rspamd
+
* Einrichtung eines Mailservers mit Postfix und Dovecot
−
* Unverschlüsselte Grundkonfiguration der Dienste
+
* Schrittweiser Aufbau der Mailinfrastruktur
−
* Schrittweise Absicherung durch Verschlüsselung
+
* Verständnis der einzelnen Komponenten eines Mailservers
−
* Integration von Rspamd zur Spam- und Virenerkennung
+
* Test der lokalen Mailzustellung
−
* Logging und Fehleranalyse für eine stabile Mailserver-Umgebung
+
* Vorbereitung für spätere Absicherung mit TLS und Spamfilter
  
 
= Voraussetzungen =
 
= Voraussetzungen =
−
* Debian- oder Ubuntu-Server mit Root-Zugriff
+
* Debian oder Ubuntu Server mit Root-Zugriff
−
* Domain '''it113.int''' ist bereits als MX für den Mailserver eingetragen
+
* Domain '''it213.int''' ist bereits als MX für den Mailserver eingetragen
−
* Basiskenntnisse in Linux und Mailserver-Administration
+
* Hostname des Mailservers '''mail.it213.int'''
−
* Internetzugang für Paketinstallation und DNS-Abfragen
+
* Internetzugang für Paketinstallation
  
−
= Postfix: SMTP-Server-Konfiguration =
+
= Ist der MX Record richtig eingetragen? =
−
* Installation und Grundkonfiguration von Postfix
 
−
* Einrichten von Mailboxen mit '''/var/mail'''
 
−
* Konfiguration von '''mydestination''' und '''relay_domains'''
 
−
* Überprüfung der Postfix-Queue und Logs
 
  
−
= Dovecot: IMAP- und POP3-Server =
+
;Verwende eines dieser Tools
−
* Installation von Dovecot mit Unterstützung für Maildir
 
−
* Konfiguration der Authentifizierung mit PAM oder LDAP
 
−
* Anpassung der Konfiguration für unverschlüsselte Verbindungen
 
−
* Überprüfung der Logfiles auf Fehler
 
  
−
= Absicherung der Mailkommunikation =
+
*host -t mx it213.int
−
* Einrichtung von STARTTLS für Postfix
+
*nslookup -q=mx it213.int
−
* Aktivierung von SSL/TLS für Dovecot
+
*dig -t mx it213.int
−
* Erstellung eines selbstsignierten oder Let’s Encrypt-Zertifikats
 
−
* Test der verschlüsselten Kommunikation mit '''openssl s_client'''
 
  
−
= Integration von Rspamd =
+
= Installation der Mailserver-Komponenten =
−
* Installation und Grundkonfiguration von Rspamd
 
−
* Konfiguration der Spam-Filter und Bayes-Trainings
 
−
* Aktivierung von Greylisting zur Spam-Reduzierung
 
−
* Integration mit Postfix für die automatische Filterung
 
−
<!---
 
−
= Mail-Authentifizierung mit SPF, DKIM und DMARC =
 
−
* Einrichtung eines SPF-Records für '''it113.int'''
 
−
* Signierung von ausgehenden E-Mails mit DKIM
 
−
* Einrichtung von DMARC zur Kontrolle der Mail-Zustellung
 
−
* Überprüfung der DNS-Records und Logs auf Probleme
 
−
-->
 
  
−
= Logging und Fehleranalyse =
+
*apt update
−
* Aktivierung detaillierter Logs in Postfix und Dovecot
+
*apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils
−
* Nutzung von '''journalctl''' und '''mail.log''' zur Fehleranalyse
 
−
* Debugging von TLS-Problemen mit '''openssl'''
 
−
* Analyse von Rspamd-Statistiken zur Spam-Erkennung
 
  
−
= Abschluss und Test =
+
Bei der Abfrage '''Internet Site''' wählen.
−
* Test der Mailfunktionalität mit Telnet und Mutt
 
−
* Überprüfung der Spam-Filter mit Test-E-Mails
 
−
* Sicherstellung der korrekten TLS-Verschlüsselung
 
  
 +
= Beschreibung der Pakete =
  
−
=Ist der MX Record richtig eingetragen?=
+
== Postfix ==
−
;Verwende eins diseser Tools
+
* Mail Transport Agent (MTA)
−
*host -t mx  it113.int 127.0.0.1
+
* Verantwortlich für Versand und Empfang von E-Mails
−
*nslookup -q=mx it113.int
+
* Transportiert E-Mails zwischen Mailservern
−
*dig -t mx it113.int
 
−
=Installatation=
 
−
*apt update
 
−
*apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils
 
−
Bei der Abfrage '''''Internet Site''''' wählen.
 
  
−
= Beschreibung der Pakete für den Mailserver = 
+
== Dovecot ==
 +
* IMAP- und POP3-Server
 +
* Ermöglicht Mailclients den Zugriff auf Mailboxen
  
−
== Postfix ==
+
== Dovecot LMTP ==
−
* Postfix ist ein Mail-Transport-Agent (MTA) 
+
* Zustellung von Postfix an Dovecot
−
* Zuständig für den Versand und Empfang von E-Mails 
+
* Effizienter als lokale mailbox_command Zustellung
−
* Nimmt E-Mails von lokalen oder entfernten Clients an und leitet sie weiter 
 
  
−
== Dovecot-Core ==
+
== Mailutils ==
−
* Grundlegende Infrastruktur von Dovecot 
+
* Sammlung von Mailtools für Tests
−
* Wird für die Bereitstellung von IMAP- und POP3-Diensten genutzt 
+
* Enthält z. B. das Programm '''mail'''
−
* Enthält noch keine spezifischen Protokolle 
 
  
−
== Dovecot-IMAPD == 
+
= Mailformate =
−
* Aktiviert den IMAP-Dienst in Dovecot 
 
−
* Ermöglicht den Zugriff auf E-Mails direkt auf dem Server 
 
−
* Standardprotokoll für moderne E-Mail-Clients
 
  
−
== Dovecot-LMTPD == 
+
== mbox (/var/mail) ==
−
* Aktiviert den LMTP-Dienst (Local Mail Transfer Protocol)
+
* Alle Mails eines Benutzers liegen in einer Datei
−
* Zuständig für die interne Mail-Zustellung von Postfix an Dovecot 
+
* Probleme bei parallelem Zugriff möglich
−
* Effizientere Alternative zu `mailbox_command` für die Mailzustellung
+
* Wird historisch verwendet
−
== Mailutils ==
 
−
* Sammlung von Mail-Werkzeugen für Unix/Linux 
 
−
* Enthält Befehle wie `mail` zum Senden und Lesen von E-Mails
 
−
* Unterstützt verschiedene Mail-Speicherformate wie mbox und Maildir 
 
−
* Nützlich für Tests und Skripte in Mailserver-Umgebungen
 
  
 +
== Maildir ==
 +
* Jede Mail ist eine eigene Datei
 +
* Keine Locking-Probleme
 +
* Paralleler Zugriff möglich
 +
* Bessere Backupmöglichkeiten
  
−
== /var/spool/mail (mbox) ==
+
== Empfehlung ==
−
* Speichert alle E-Mails eines Nutzers in einer einzigen Datei 
+
* Maildir wird empfohlen
−
* Zentrale Speicherung unter /var/spool/mail/<benutzer> 
 
−
* Schneller bei sehr kleinen Mailboxen, aber langsamer bei vielen Mails 
 
−
* Probleme mit Dateisperren bei gleichzeitigen Zugriffen möglich 
 
−
* Schwerer zu sichern, da Änderungen in einer einzigen Datei passieren 
 
  
−
== Maildir == 
+
= Maildir vorbereiten =
−
* Speichert jede E-Mail als eine eigene Datei im Benutzerverzeichnis ~/Maildir/ 
 
−
* Bessere Performance, da parallele Zugriffe möglich sind 
 
−
* Kein Locking-Problem, da keine zentrale Datei gesperrt werden muss 
 
−
* Einfaches Backup, da Mails als einzelne Dateien kopiert werden können 
 
−
* Unterstützt von modernen Mailservern und Clients besser 
 
  
−
== Empfehlung == 
+
Jeder neue Benutzer bekommt automatisch ein Maildir.
−
* Maildir wird empfohlen, da es stabiler, moderner und einfacher zu verwalten ist 
 
−
* /var/spool/mail ist nur sinnvoll, wenn eine zentrale Speicherung ohne Benutzer-Home-Verzeichnisse gewünscht ist
 
  
−
=Jeder neue Benutzer bekommt diese Dateien im Homeverzeichnis=
 
 
*mkdir -p /etc/skel/Maildir/{cur,new,tmp}
 
*mkdir -p /etc/skel/Maildir/{cur,new,tmp}
 
*echo 'export MAIL=$HOME/Maildir' >> /etc/skel/.bashrc
 
*echo 'export MAIL=$HOME/Maildir' >> /etc/skel/.bashrc
  
−
= Postfix: Einführung in main.cf und master.cf = 
+
= Postfix Konfiguration =
−
Postfix verwendet zwei zentrale Konfigurationsdateien zur Steuerung des Mail-Transports und der Dienste. 
+
 
−
== main.cf (Hauptkonfiguration) == 
+
== /etc/postfix/main.cf ==
−
* Enthält die grundlegenden Einstellungen für Postfix 
+
 
−
* Definiert Parameter wie Domain, Relay-Regeln und Authentifizierung 
 
−
* Typische Einstellungen: 
 
−
** myhostname – Hostname des Mailservers 
 
−
** mydestination – Akzeptierte lokale Domains 
 
−
** relayhost – Weiterleitungsziel für ausgehende Mails 
 
−
** smtpd_recipient_restrictions – Regeln für eingehende E-Mails 
 
−
== master.cf (Dienstkonfiguration) == 
 
−
* Steuert, welche Postfix-Dienste aktiv sind 
 
−
* Legt fest, welche Prozesse auf bestimmten Ports lauschen 
 
−
* Wird verwendet, um Maildienste wie SMTP, Submission oder LMTP zu aktivieren 
 
−
* Typische Einstellungen: 
 
−
** smtp – Standard-SMTP-Dienst für eingehende Mails 
 
−
** submission – SMTP-Dienst für authentifizierte Clients 
 
−
** lmtp – Local Mail Transfer Protocol zur Zustellung an Dovecot 
 
−
=Erklärung der main.cf=
 
−
=/etc/postfix/main.cf=
 
 
<pre>
 
<pre>
−
# Siehe /usr/share/postfix/main.cf.dist für eine kommentierte, vollständigere Version
 
−
# Debian-spezifisch: Wenn ein Dateiname angegeben wird, wird die erste Zeile dieser Datei
 
−
# als Name verwendet. Der Debian-Standard ist /etc/mailname.
 
−
#myorigin = /etc/mailname
 
−
 
−
# Begrüßungsbanner für SMTP-Verbindungen
 
 
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
 
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
  
−
# Deaktiviert Biff, das sonst Benachrichtigungen über neue Mails an lokale Benutzer sendet
 
 
biff = no
 
biff = no
−
 
−
# Das Anhängen der Domain an lokale E-Mail-Adressen ist Aufgabe des Mail-Clients (MUA)
 
 
append_dot_mydomain = no
 
append_dot_mydomain = no
−
 
−
# Zeit, nach der eine verzögerte Zustellwarnung gesendet wird (auskommentiert)
 
−
#delay_warning_time = 4h
 
−
 
−
# Deaktiviert das README-Verzeichnis für Benutzer
 
 
readme_directory = no
 
readme_directory = no
  
−
# Siehe http://www.postfix.org/COMPATIBILITY_README.html -- Standard ist 3.6 bei neuen Installationen
 
 
compatibility_level = 3.6
 
compatibility_level = 3.6
  
−
# TLS-Parameter (Zertifikate für verschlüsselte Verbindungen)
 
 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
−
smtpd_tls_security_level=may # TLS wird unterstützt, aber nicht erzwungen
+
smtpd_tls_security_level=may
  
−
# TLS für ausgehende SMTP-Verbindungen
 
 
smtp_tls_CApath=/etc/ssl/certs
 
smtp_tls_CApath=/etc/ssl/certs
−
smtp_tls_security_level=may # TLS wird für ausgehende Verbindungen unterstützt, aber nicht erzwungen
+
smtp_tls_security_level=may
 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
  
−
# Regeln für das Relaying (Weiterleiten) von E-Mails
 
 
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
 
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
  
−
# Hostname dieses Mailservers
+
myhostname = mail.it213.int
−
myhostname = ns.it113.int
 
  
−
# Pfad zur Aliase-Datei, die E-Mail-Aliasnamen speichert
 
 
alias_maps = hash:/etc/aliases
 
alias_maps = hash:/etc/aliases
 
alias_database = hash:/etc/aliases
 
alias_database = hash:/etc/aliases
  
−
# Ursprungsdomain für ausgehende Mails
 
 
myorigin = /etc/mailname
 
myorigin = /etc/mailname
  
−
# Lokale Domains, für die dieser Server E-Mails annimmt
+
mydestination = $myhostname, localhost.it213.int, it213.int, localhost
−
mydestination = $myhostname, ns.it113.int, localhost.it113.int, , localhost
 
  
−
# Standard-Relay-Host (leer, d.h. keine Weiterleitung an einen anderen Server)
 
 
relayhost =
 
relayhost =
  
−
# Netzwerke, die ohne Authentifizierung E-Mails über diesen Server senden dürfen
 
 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
  
−
# Maximale Postfachgröße (0 bedeutet unbegrenzt)
 
 
mailbox_size_limit = 0
 
mailbox_size_limit = 0
−
 
−
# Trennzeichen für Adressvarianten (z.B. user+info@example.com)
 
 
recipient_delimiter = +
 
recipient_delimiter = +
  
−
# Auf welchen Netzwerk-Schnittstellen Postfix lauscht (hier: alle)
 
 
inet_interfaces = all
 
inet_interfaces = all
−
 
−
# Unterstützte Internetprotokolle (IPv4 und IPv6)
 
 
inet_protocols = all
 
inet_protocols = all
  
 +
home_mailbox = Maildir/
 +
mailbox_command =
 
</pre>
 
</pre>
−
==Änderungen==
 
−
Wir ändern diese Zeile
 
−
mydestination = $myhostname, ns.it113.int, localhost.it113.int, '''it113.int''', localhost
 
−
Nir so nimmt Postfix auch die Mails für diese Domain an.
 
  
 +
= Postfix starten =
 +
 +
*systemctl start postfix
 +
 +
= Postfix steuern =
  
 +
== über systemctl ==
  
−
==Maildirformat==
 
−
;Wir fügen an
 
−
home_mailbox=Maildir/
 
−
mailbox_command =
 
−
*systemctl start postfix
 
−
=Postfix Handling=
 
−
==Man kann Postfix über '''systemctl''' ganz normal steuern==
 
 
*systemctl start postfix
 
*systemctl start postfix
−
*systemctl status postfix
 
 
*systemctl stop postfix
 
*systemctl stop postfix
 
*systemctl restart postfix
 
*systemctl restart postfix
−
==Man kann Postfix aber auch '''postfix''' steuern==
+
*systemctl status postfix
−
*postfix status
+
 
 +
== über postfix ==
 +
 
 
*postfix start
 
*postfix start
 
*postfix stop
 
*postfix stop
 
*postfix reload
 
*postfix reload
 +
*postfix status
 
*postfix check
 
*postfix check
−
==Logging==
+
 
 +
= Logging =
 +
 
 
*journalctl -f -u postfix@-.service
 
*journalctl -f -u postfix@-.service
−
<pre>
+
 
−
Mar 14 12:51:38 ns.it113.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
+
= Benutzer anlegen =
−
Mar 14 12:51:38 ns.it113.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
+
 
−
Mar 14 12:56:38 ns.it113.int systemd[1]: postfix.service: Deactivated successfully.
+
*useradd -m -s /bin/bash martha
−
Mar 14 12:56:38 ns.it113.int systemd[1]: Stopped postfix.service - Postfix Mail Transport Agent.
+
*useradd -m -s /bin/bash leroy
−
Mar 14 12:56:38 ns.it113.int systemd[1]: Stopping postfix.service - Postfix Mail Transport Agent...
+
 
−
Mar 14 12:56:39 ns.it113.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
 
−
Mar 14 12:56:39 ns.it113.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
 
−
</pre>
 
−
=Wir legen 2 User an=
 
−
*useradd -m -s /bin/bash martha
 
−
*useradd -m -s /bin/bash leroy
 
 
*passwd martha
 
*passwd martha
 
*passwd leroy
 
*passwd leroy
−
==/etc/postfix/master.cf==
 
−
<pre>
 
−
# ==========================================================================
 
−
# service type  private unpriv  chroot  wakeup  maxproc command + args
 
−
#              (yes)  (yes)  (no)    (never) (100)
 
−
# ==========================================================================
 
−
smtp      inet  n      -      y      -      -      smtpd
 
−
pickup    unix  n      -      y      60      1      pickup
 
−
cleanup  unix  n      -      y      -      0      cleanup
 
−
qmgr      unix  n      -      n      300    1      qmgr
 
−
tlsmgr    unix  -      -      y      1000?  1      tlsmgr
 
−
rewrite  unix  -      -      y      -      -      trivial-rewrite
 
−
bounce    unix  -      -      y      -      0      bounce
 
−
defer    unix  -      -      y      -      0      bounce
 
−
trace    unix  -      -      y      -      0      bounce
 
−
verify    unix  -      -      y      -      1      verify
 
−
flush    unix  n      -      y      1000?  0      flush
 
−
proxymap  unix  -      -      n      -      -      proxymap
 
−
proxywrite unix -      -      n      -      1      proxymap
 
−
smtp      unix  -      -      y      -      -      smtp
 
−
relay    unix  -      -      y      -      -      smtp
 
−
        -o syslog_name=postfix/$service_name
 
−
showq    unix  n      -      y      -      -      showq
 
−
error    unix  -      -      y      -      -      error
 
−
retry    unix  -      -      y      -      -      error
 
−
discard  unix  -      -      y      -      -      discard
 
−
local    unix  -      n      n      -      -      local
 
−
virtual  unix  -      n      n      -      -      virtual
 
−
lmtp      unix  -      -      y      -      -      lmtp
 
−
anvil    unix  -      -      y      -      1      anvil
 
−
scache    unix  -      -      y      -      1      scache
 
−
postlog  unix-dgram n  -      n      -      1      postlogd
 
−
maildrop  unix  -      n      n      -      -      pipe
 
−
  flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
 
−
uucp      unix  -      n      n      -      -      pipe
 
−
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
 
−
ifmail    unix  -      n      n      -      -      pipe
 
−
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
 
−
bsmtp    unix  -      n      n      -      -      pipe
 
−
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
 
−
scalemail-backend unix -      n      n      -      2      pipe
 
−
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
 
−
mailman  unix  -      n      n      -      -      pipe
 
−
  flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
 
−
</pre>
 
−
= Postfix: master.cf (Dienststeuerung) = 
 
  
−
Die Datei '''/etc/postfix/master.cf''' steuert die Dienste, die Postfix starten und verwalten soll. Hier werden die Mail-Transporte und internen Prozesse konfiguriert.
+
= Lokale Mailzustellung testen =
 +
 
 +
Öffne drei SSH-Sitzungen
 +
 
 +
* eine als '''martha'''
 +
* eine als '''leroy'''
 +
* eine als '''root'''
 +
 
 +
Root überwacht die Logs
 +
 
 +
*journalctl -f -u postfix@-.service
 +
 
 +
== Leroy sendet Mails ==
  
−
== Wichtige Dienste in master.cf == 
+
*echo "1. Mail" | mail -s "1. Mail" martha
 +
*echo "2. Mail" | mail -s "2. Mail" martha@mail.it213.int
 +
*echo "3. Mail" | mail -s "3. Mail" martha@it213.int
  
−
* '''smtp''' – Standard-SMTP-Dienst für den Empfang von E-Mails
+
== Martha liest Mails ==
−
* '''pickup''' – Holt Mails aus der lokalen Warteschlange zur Verarbeitung 
 
−
* '''qmgr''' – Mail-Queue-Manager, der Mails zur Zustellung verwaltet 
 
−
* '''cleanup''' – Bereinigt und formatiert eingehende Mails 
 
−
* '''local''' – Zustellung von Mails an lokale Benutzer 
 
−
* '''virtual''' – Zustellung an virtuelle Domains oder Benutzer 
 
−
* '''lmtp''' – Local Mail Transfer Protocol für die Übergabe an Dovecot 
 
−
* '''relay''' – SMTP-Relay-Dienst für den Versand von Mails 
 
  
−
Ja, Postfix hat ab Version 3.4 die native SMTPS-Unterstützung (Port 465) standardmäßig entfernt. Stattdessen setzt die Postfix-Community weiterhin auf Submission (Port 587) mit STARTTLS als empfohlene Methode für authentifizierte Clients.
+
*mail
  
−
Warum das so gemacht wurde:
+
== Speicherort prüfen ==
 +
 
 +
*find Maildir -type f
  
−
Port 587 mit STARTTLS wird als flexibler angesehen, weil er sowohl unverschlüsselte als auch verschlüsselte Verbindungen erlaubt.
+
= Dovecot =
−
Port 465 (SMTPS) wurde ursprünglich als veraltet betrachtet, weil er nicht standardisiert war (später wieder in RFC 8314 aufgenommen).
 
−
Viele Mailclients und Provider haben sich an Port 587 gewöhnt.
 
−
Allerdings empfiehlt das BSI weiterhin Port 465 (SMTPS) als sicherere Alternative, weil es ausschließlich verschlüsselte Verbindungen erzwingt.
 
−
==Das Dilema==
 
−
*Postfix hat ab Version 3.4 die native SMTPS-Unterstützung (Port 465) standardmäßig entfernt.
 
−
*Stattdessen setzt die Postfix-Community weiterhin auf Submission (Port 587) mit STARTTLS als empfohlene Methode für authentifizierte Clients.
 
−
*Port 587 mit STARTTLS wird als flexibler angesehen, weil er sowohl unverschlüsselte als auch verschlüsselte Verbindungen erlaubt.
 
−
*Port 465 (SMTPS) wurde ursprünglich als veraltet betrachtet, weil er nicht standardisiert war (später wieder in RFC 8314 aufgenommen).
 
−
*Viele Mailclients und Provider haben sich an Port 587 gewöhnt.
 
−
*Allerdings empfiehlt das BSI weiterhin Port 465 (SMTPS) als sicherere Alternative, weil es ausschließlich verschlüsselte Verbindungen erzwingt.
 
−
== Kein Submission, stattdessen SMTPS (Port 465) == 
 
  
−
Das '''BSI empfiehlt SMTPS (Port 465)''' anstelle von Submission (Port 587), da SMTPS eine '''direkte TLS-Verschlüsselung''' erfordert.
+
Dovecot stellt IMAP und POP3 bereit.
  
−
Falls SMTPS genutzt werden soll, kann folgender Eintrag in der master.cf ergänzt werden: 
+
== Mailformat konfigurieren ==
  
−
<pre>
+
*/etc/dovecot/conf.d/10-mail.conf*
−
smtps    inet  n      -       y      -      -      smtpd
 
−
  -o smtpd_tls_wrappermode=yes
 
−
  -o smtpd_sasl_auth_enable=yes
 
−
</pre> 
 
  
−
Damit akzeptiert Postfix sichere Verbindungen über SMTPS mit sofortiger Verschlüsselung.
 
−
==Restart und Check==
 
−
;Restart
 
−
*systemctl restart postfix
 
−
;Welche Ports sind auf
 
−
*ss -lntp | grep master
 
−
LISTEN 0      100          0.0.0.0:25        0.0.0.0:*    users:(("master",pid=6565,fd=13))
 
−
LISTEN 0      100          0.0.0.0:465      0.0.0.0:*    users:(("master",pid=6565,fd=110))
 
−
LISTEN 0      100            [::]:25          [::]:*    users:(("master",pid=6565,fd=14))
 
−
LISTEN 0      100            [::]:465          [::]:*    users:(("master",pid=6565,fd=111))
 
−
;Zertifikatscheck
 
−
Das Zertifikat ist selbstsigniert dies müssen wir später noch austauschen.
 
−
*openssl s_client -host mail.it113.int -port 465
 
 
<pre>
 
<pre>
−
CONNECTED(00000003)
+
mail_driver = maildir
−
depth=0 CN = mail.it113.int
+
mail_home = /home/%{user | username}
−
verify return:1
+
mail_path = %{home}/Maildir
−
---
 
−
Certificate chain
 
−
0 s:CN = mail.it113.int
 
−
  i:CN = mail.it113.int
 
−
  a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA256
 
−
  v:NotBefore: Mar 16 11:36:27 2025 GMT; NotAfter: Mar 14 11:36:27 2035 GMT
 
−
---
 
−
Server certificate
 
−
-----BEGIN CERTIFICATE-----
 
−
MIIDBzCCAe+gAwIBAgIUCz+Wk67WtIF1m9KsPKSfJeotN0kwDQYJKoZIhvcNAQEL
 
−
...
 
 
</pre>
 
</pre>
−
==Wo sind wir jetzt und was geht==
+
 
−
*ss -lntp
+
== Authentifizierung ==
 +
 
 +
*/etc/dovecot/conf.d/10-auth.conf*
 +
 
 
<pre>
 
<pre>
−
State              Recv-Q              Send-Q                          Local Address:Port                          Peer Address:Port            Process                                                               
+
auth_mechanisms = plain login
−
LISTEN              0                  100                                    0.0.0.0:993                                0.0.0.0:*                users:(("dovecot",pid=6205,fd=37))                                   
 
−
LISTEN              0                  100                                    0.0.0.0:143                                0.0.0.0:*                users:(("dovecot",pid=6205,fd=35))                                   
 
−
LISTEN              0                  128                                    0.0.0.0:22                                  0.0.0.0:*                users:(("sshd",pid=512,fd=3))                                         
 
−
LISTEN              0                  100                                    0.0.0.0:25                                  0.0.0.0:*                users:(("master",pid=6565,fd=13))                                     
 
−
LISTEN              0                  100                                    0.0.0.0:465                                0.0.0.0:*                users:(("smtpd",pid=6584,fd=6),("master",pid=6565,fd=110))           
 
−
LISTEN              0                  100                                      [::]:993                                    [::]:*                users:(("dovecot",pid=6205,fd=38))                                   
 
−
LISTEN              0                  100                                      [::]:143                                    [::]:*                users:(("dovecot",pid=6205,fd=36))                                   
 
−
LISTEN              0                  128                                      [::]:22                                    [::]:*                users:(("sshd",pid=512,fd=4))                                         
 
−
LISTEN              0                  100                                      [::]:25                                    [::]:*                users:(("master",pid=6565,fd=14))                                     
 
−
LISTEN              0                  100                                      [::]:465                                    [::]:*                users:(("smtpd",pid=6584,fd=7),("master",pid=6565,fd=111))
 
 
</pre>
 
</pre>
−
==Wir haben folgendes Dienst laufen==
 
−
{| class="wikitable" 
 
−
! Dienst  !! Zweck  !! Verschlüsselt  !! Notwendig für Clients  !! Standard-Port 
 
−
|-
 
−
| '''smtp'''  || Versand von E-Mails zwischen Mailservern  || Nein (STARTTLS möglich)  || Ja, für ausgehende Mails  || 25 
 
−
|-
 
−
| '''smtps'''  || Verschlüsselter Versand von E-Mails  || Ja (TLS erzwungen)  || Empfohlen vom BSI für ausgehende Mails  || 465 
 
−
|-
 
−
| '''imap'''  || Zugriff auf Mails auf dem Server  || Nein (STARTTLS möglich)  || Ja, für moderne Mailclients  || 143 
 
−
|-
 
−
| '''imaps'''  || Verschlüsselter Zugriff auf Mails  || Ja (TLS erzwungen)  || Empfohlen für sichere Mailverbindungen  || 993 
 
−
|-
 
−
| '''pop3'''  || Herunterladen von Mails vom Server  || Nein (STARTTLS möglich)  || Selten genutzt, veraltet  || 110 
 
−
|-
 
−
| '''pop3s'''  || Verschlüsseltes Herunterladen von Mails  || Ja (TLS erzwungen)  || Nicht mehr empfohlen, IMAP bevorzugen  || 995 
 
−
|}
 
  
−
=Übung=
+
== Socket für Postfix ==
−
*Mach zwei ssh Verbidungen zum Mailserver
+
 
−
*Eine als '''martha''' und eine als '''leroy'''
+
*/etc/dovecot/conf.d/10-master.conf*
−
*Mahct noch eine dritte als root auf.
+
 
−
*Dort gucken wir was passiert
+
<pre>
−
*journalctl -f -u postfix@-.service
+
service imap-login {
−
*Wir nutzen zum lokalen verschicken das Programm mail aus den mailutils
+
  inet_listener imap {
−
=Kleines Tutorial=
+
  }
−
*[[Mailutils]]
 
−
=Mails verschicken auf der Konsole=
 
−
Root sollte Logs checken und beobachten
 
−
;Leroy
 
−
*echo "1. Mail" | mail -s "1. Mail" martha
 
−
*echo "2. Mail" | mail -s "2. Mail" martha@mail.it113.int
 
−
*echo "3. Mail" | mail -s "3. Mail" martha@it113.int
 
−
*echo "4. Mail" | mail -s "4. Mail" technik@xinux.de
 
−
;Martha
 
−
*ruft '''mail''' auf
 
−
"/home/martha/Maildir": 3 messages 3 new
 
−
>N  1 leroy@mail.it113.i Sun Mar 16 12:01  13/416  1. Mail
 
−
N  2 leroy@mail.it113.i Sun Mar 16 12:01  13/433  2. Mail
 
−
N  3 leroy@mail.it113.i Sun Mar 16 12:01  13/418  3. Mail
 
−
;Martha verlässt mail und guckt wo die Mails wirklich liegen
 
−
*find Maildir -type f
 
−
Maildir/cur/1742126491.V802I1c001cM284805.mail.it113.int,a=O,u=3:2,
 
−
Maildir/cur/1742126491.V802I1c001bM254082.mail.it113.int,a=O,u=2:2,
 
−
Maildir/cur/1742126491.V802I1c001aM245928.mail.it113.int,a=O,u=1:2,
 
−
Maildir/.mu-prop
 
  
−
= SASL = 
+
  inet_listener imaps {
−
*SASL (Simple Authentication and Security Layer) wird verwendet, um die Authentifizierung für den Versand von E-Mails über SMTP zu ermöglichen.
+
  }
−
*Ohne SASL könnte jeder über den Mailserver E-Mails verschicken, was ihn zu einem offenen Relay machen würde. 
+
}
  
−
== Warum nutzen wir Dovecot für SASL? == 
+
service pop3-login {
−
* Postfix kennt keine Benutzer und kann sich nicht direkt über PAM oder andere Authentifizierungsmechanismen anmelden 
+
  inet_listener pop3 {
−
* Die Authentifizierung erfolgt ausschließlich über SASL, das in Postfix eingebunden wird 
+
  }
−
* Dovecot stellt eine eigene SASL-Implementierung bereit, die mit Postfix kompatibel ist 
 
−
* Dovecot kann verschiedene Backend-Methoden nutzen, z. B. **PAM, LDAP, SQL oder lokale Benutzer** 
 
−
* Vermeidet zusätzliche Abhängigkeiten wie Cyrus SASL 
 
  
−
== Warum nutzen wir den Socket von Dovecot? == 
+
  inet_listener pop3s {
−
* Dovecot stellt einen Unix-Socket bereit, den Postfix nutzen kann 
+
  }
−
* Postfix nutzt diesen Socket zur Benutzer-Authentifizierung, ohne eigene Benutzerverwaltung 
+
}
−
* Die Verbindung erfolgt lokal, was sicherer ist als eine Netzwerkverbindung
 
  
−
=SASL Konfiguration mit Dovecot=
+
service lmtp {
−
;Wir nutzen Dovecot für SASL 
+
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
 +
    mode = 0600
 +
    user = postfix
 +
    group = postfix
 +
  }
 +
}
  
−
* vi /etc/dovecot/conf.d/10-master.conf 
 
−
<pre>
 
 
service auth {
 
service auth {
−
      }
 
−
  # Postfix smtp-auth
 
 
   unix_listener /var/spool/postfix/private/auth {
 
   unix_listener /var/spool/postfix/private/auth {
 
     mode = 0660
 
     mode = 0660
Zeile 450: Zeile 231:
 
     group = postfix
 
     group = postfix
 
   }
 
   }
−
...
 
 
}
 
}
−
</pre>
+
</pre>
  
−
* vi /etc/dovecot/conf.d/10-auth.conf 
+
= Dienste starten =
−
  auth_mechanisms = plain login 
 
  
−
=Postfix Änderung= 
+
*systemctl restart dovecot
−
* vi /etc/postfix/main.cf 
+
*systemctl restart postfix
−
  smtpd_sasl_type = dovecot 
 
−
  smtpd_sasl_path = private/auth 
 
−
  smtpd_sasl_auth_enable = yes 
 
  
−
=Dienste neustarten=
+
= Kontrolle der offenen Ports =
−
* systemctl restart postfix 
 
−
* systemctl restart dovecot
 
−
= Kein Submission, stattdessen SMTPS (Port 465) == 
 
−
Das '''BSI empfiehlt SMTPS (Port 465)''' anstelle von Submission (Port 587), da SMTPS eine '''direkte TLS-Verschlüsselung''' erfordert. 
 
  
−
Falls SMTPS genutzt werden soll, kann folgender Eintrag in der master.cf ergänzt werden: 
+
*ss -lntp
  
−
<pre>
+
= Erwartete Dienste =
−
smtps    inet  n      -      y      -      -      smtpd
 
−
  -o smtpd_tls_wrappermode=yes
 
−
  -o smtpd_sasl_auth_enable=yes
 
−
</pre> 
 
  
−
Damit akzeptiert Postfix sichere Verbindungen über SMTPS mit sofortiger Verschlüsselung.
+
{| class="wikitable"
−
=SMTPS aktivieren=
+
! Dienst !! Zweck !! Port
−
=Postfix=
+
|-
−
==Zertifikate kopieren==
+
| SMTP || Mailtransport || 25
−
*cp mail.it113.int.crt mail.it113.int.key /etc/postfix/
+
|-
−
=Vom Nameserver=
+
| SMTPS || verschlüsselter Mailversand || 465
−
;Vorher
+
|-
−
*openssl s_client -host mail.it113.int -port 465
+
| IMAP || Zugriff auf Mailbox || 143
−
==Zertifikate ersetzen==
+
|-
−
# TLS parameters
+
| IMAPS || verschlüsselter Zugriff || 993
−
smtpd_tls_cert_file=/etc/postfix/mail.it113.int.crt
+
|}
−
smtpd_tls_key_file=/etc/postfix/mail.it113.int.key
 
−
==Neustarten==
 
−
*systemctl restart postfix
 
−
=Vom Nameserver=
 
−
;Nachher
 
−
*openssl s_client -host mail.it113.int -port 465
 
−
=Dovecot=
 

Version vom 11. März 2026, 12:15 Uhr

Zielsetzung

  • Einrichtung eines Mailservers mit Postfix und Dovecot
  • Schrittweiser Aufbau der Mailinfrastruktur
  • Verständnis der einzelnen Komponenten eines Mailservers
  • Test der lokalen Mailzustellung
  • Vorbereitung für spätere Absicherung mit TLS und Spamfilter

Voraussetzungen

  • Debian oder Ubuntu Server mit Root-Zugriff
  • Domain it213.int ist bereits als MX für den Mailserver eingetragen
  • Hostname des Mailservers mail.it213.int
  • Internetzugang für Paketinstallation

Ist der MX Record richtig eingetragen?

Verwende eines dieser Tools
  • host -t mx it213.int
  • nslookup -q=mx it213.int
  • dig -t mx it213.int

Installation der Mailserver-Komponenten

  • apt update
  • apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils

Bei der Abfrage Internet Site wählen.

Beschreibung der Pakete

Postfix

  • Mail Transport Agent (MTA)
  • Verantwortlich für Versand und Empfang von E-Mails
  • Transportiert E-Mails zwischen Mailservern

Dovecot

  • IMAP- und POP3-Server
  • Ermöglicht Mailclients den Zugriff auf Mailboxen

Dovecot LMTP

  • Zustellung von Postfix an Dovecot
  • Effizienter als lokale mailbox_command Zustellung

Mailutils

  • Sammlung von Mailtools für Tests
  • Enthält z. B. das Programm mail

Mailformate

mbox (/var/mail)

  • Alle Mails eines Benutzers liegen in einer Datei
  • Probleme bei parallelem Zugriff möglich
  • Wird historisch verwendet

Maildir

  • Jede Mail ist eine eigene Datei
  • Keine Locking-Probleme
  • Paralleler Zugriff möglich
  • Bessere Backupmöglichkeiten

Empfehlung

  • Maildir wird empfohlen

Maildir vorbereiten

Jeder neue Benutzer bekommt automatisch ein Maildir.

  • mkdir -p /etc/skel/Maildir/{cur,new,tmp}
  • echo 'export MAIL=$HOME/Maildir' >> /etc/skel/.bashrc

Postfix Konfiguration

/etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)

biff = no
append_dot_mydomain = no
readme_directory = no

compatibility_level = 3.6

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may

smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

myhostname = mail.it213.int

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

myorigin = /etc/mailname

mydestination = $myhostname, localhost.it213.int, it213.int, localhost

relayhost =

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0
recipient_delimiter = +

inet_interfaces = all
inet_protocols = all

home_mailbox = Maildir/
mailbox_command =

Postfix starten

  • systemctl start postfix

Postfix steuern

über systemctl

  • systemctl start postfix
  • systemctl stop postfix
  • systemctl restart postfix
  • systemctl status postfix

über postfix

  • postfix start
  • postfix stop
  • postfix reload
  • postfix status
  • postfix check

Logging

  • journalctl -f -u postfix@-.service

Benutzer anlegen

  • useradd -m -s /bin/bash martha
  • useradd -m -s /bin/bash leroy
  • passwd martha
  • passwd leroy

Lokale Mailzustellung testen

Öffne drei SSH-Sitzungen

  • eine als martha
  • eine als leroy
  • eine als root

Root überwacht die Logs

  • journalctl -f -u postfix@-.service

Leroy sendet Mails

  • echo "1. Mail" | mail -s "1. Mail" martha
  • echo "2. Mail" | mail -s "2. Mail" martha@mail.it213.int
  • echo "3. Mail" | mail -s "3. Mail" martha@it213.int

Martha liest Mails

  • mail

Speicherort prüfen

  • find Maildir -type f

Dovecot

Dovecot stellt IMAP und POP3 bereit.

Mailformat konfigurieren

  • /etc/dovecot/conf.d/10-mail.conf*
mail_driver = maildir
mail_home = /home/%{user | username}
mail_path = %{home}/Maildir

Authentifizierung

  • /etc/dovecot/conf.d/10-auth.conf*
auth_mechanisms = plain login

Socket für Postfix

  • /etc/dovecot/conf.d/10-master.conf*
service imap-login {
  inet_listener imap {
  }

  inet_listener imaps {
  }
}

service pop3-login {
  inet_listener pop3 {
  }

  inet_listener pop3s {
  }
}

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
}

Dienste starten

  • systemctl restart dovecot
  • systemctl restart postfix

Kontrolle der offenen Ports

  • ss -lntp

Erwartete Dienste

Dienst Zweck Port
SMTP Mailtransport 25
SMTPS verschlüsselter Mailversand 465
IMAP Zugriff auf Mailbox 143
IMAPS verschlüsselter Zugriff 993