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