Mailserver Workshop Konfiguration: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Ist der MX Record richtig eingetragen?=
+
= Zielsetzung =
;Verwende eins diseser Tools
+
* Einrichtung eines Mailservers mit Postfix, Dovecot und Rspamd
*host -t mx it113.int 127.0.0.1
+
* Unverschlüsselte Grundkonfiguration der Dienste
*nslookup -q=mx it113.int
+
* Schrittweise Absicherung durch Verschlüsselung
*dig -t mx it113.int
+
* Integration von Rspamd zur Spam- und Virenerkennung
=Installatation=
+
* Logging und Fehleranalyse für eine stabile Mailserver-Umgebung
 +
 
 +
= Voraussetzungen =
 +
* Debian- oder Ubuntu-Server mit Root-Zugriff
 +
* Domain '''it213.int''' ist bereits als MX für den Mailserver eingetragen
 +
* Basiskenntnisse in Linux und Mailserver-Administration
 +
* Internetzugang für Paketinstallation und DNS-Abfragen
 +
 
 +
= 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 =
 
*apt update
 
*apt update
 
*apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils
 
*apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd mailutils
Bei der Abfrage '''''Internet Site''''' wählen.
+
Bei der Abfrage '''Internet Site''' wählen.
  
= Beschreibung der Pakete für den Mailserver =
+
= Beschreibung der Pakete für den Mailserver =
  
== Postfix ==
+
== Postfix ==
* Postfix ist ein Mail-Transport-Agent (MTA)
+
* Postfix ist ein Mail-Transport-Agent (MTA)
* Zuständig für den Versand und Empfang von E-Mails
+
* Zuständig für den Versand und Empfang von E-Mails
* Nimmt E-Mails von lokalen oder entfernten Clients an und leitet sie weiter
+
* Nimmt E-Mails von lokalen oder entfernten Clients an und leitet sie weiter
  
== Dovecot-Core ==
+
== Dovecot-Core ==
* Grundlegende Infrastruktur von Dovecot
+
* Grundlegende Infrastruktur von Dovecot
* Wird für die Bereitstellung von IMAP- und POP3-Diensten genutzt
+
* Wird für die Bereitstellung von IMAP- und POP3-Diensten genutzt
* Enthält noch keine spezifischen Protokolle
+
* Enthält noch keine spezifischen Protokolle
  
== Dovecot-IMAPD ==
+
== Dovecot-IMAPD ==
* Aktiviert den IMAP-Dienst in Dovecot
+
* Aktiviert den IMAP-Dienst in Dovecot
* Ermöglicht den Zugriff auf E-Mails direkt auf dem Server
+
* Ermöglicht den Zugriff auf E-Mails direkt auf dem Server
 
* Standardprotokoll für moderne E-Mail-Clients
 
* Standardprotokoll für moderne E-Mail-Clients
  
== Dovecot-LMTPD ==
+
== Dovecot-LMTPD ==
 
* Aktiviert den LMTP-Dienst (Local Mail Transfer Protocol)
 
* Aktiviert den LMTP-Dienst (Local Mail Transfer Protocol)
* Zuständig für die interne Mail-Zustellung von Postfix an Dovecot
+
* Zuständig für die interne Mail-Zustellung von Postfix an Dovecot
* Effizientere Alternative zu `mailbox_command` für die Mailzustellung
+
* Effizientere Alternative zu mailbox_command für die Mailzustellung
== Mailutils ==
+
 
* Sammlung von Mail-Werkzeugen für Unix/Linux
+
== Mailutils ==
* Enthält Befehle wie `mail` zum Senden und Lesen von E-Mails
+
* Sammlung von Mail-Werkzeugen für Unix/Linux
* Unterstützt verschiedene Mail-Speicherformate wie mbox und Maildir
+
* 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
 
* Nützlich für Tests und Skripte in Mailserver-Umgebungen
  
 +
= Mailformate =
 +
 +
== /var/spool/mail (mbox) ==
 +
* Speichert alle E-Mails eines Nutzers in einer einzigen Datei
 +
* 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 ==
 +
* 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 ==
 +
* 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=
+
= 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 verwendet zwei zentrale Konfigurationsdateien zur Steuerung des Mail-Transports und der Dienste.
+
= Postfix: Einführung in main.cf und master.cf =
== main.cf (Hauptkonfiguration) ==
+
 
* Enthält die grundlegenden Einstellungen für Postfix
+
Postfix verwendet zwei zentrale Konfigurationsdateien zur Steuerung des Mail-Transports und der Dienste.
* Definiert Parameter wie Domain, Relay-Regeln und Authentifizierung
+
 
* Typische Einstellungen
+
== main.cf (Hauptkonfiguration) ==
** myhostname – Hostname des Mailservers
+
* Enthält die grundlegenden Einstellungen für Postfix
** mydestination – Akzeptierte lokale Domains
+
* Definiert Parameter wie Domain, Relay-Regeln und Authentifizierung
** relayhost – Weiterleitungsziel für ausgehende Mails
+
* Typische Einstellungen
** smtpd_recipient_restrictions – Regeln für eingehende E-Mails
+
 
== master.cf (Dienstkonfiguration) ==
+
** myhostname – Hostname des Mailservers
* Steuert, welche Postfix-Dienste aktiv sind
+
** mydestination – Domains für die dieser Server Mails annimmt
* Legt fest, welche Prozesse auf bestimmten Ports lauschen
+
** relayhost – Weiterleitungsziel für ausgehende Mails
* Wird verwendet, um Maildienste wie SMTP, Submission oder LMTP zu aktivieren
+
** smtpd_recipient_restrictions – Regeln für eingehende E-Mails
* Typische Einstellungen: 
+
 
** smtp – Standard-SMTP-Dienst für eingehende Mails 
+
== master.cf (Dienstkonfiguration) ==
** submission – SMTP-Dienst für authentifizierte Clients 
+
* Steuert welche Postfix-Dienste aktiv sind
** lmtp – Local Mail Transfer Protocol zur Zustellung an Dovecot 
+
* Legt fest welche Prozesse auf bestimmten Ports lauschen
=Erklärung der main.cf=
+
* Wird verwendet um Dienste wie SMTP oder SMTPS zu aktivieren
 +
 
 +
= Erklärung der main.cf =
 
=/etc/postfix/main.cf=
 
=/etc/postfix/main.cf=
 +
 
<pre>
 
<pre>
# Siehe /usr/share/postfix/main.cf.dist für eine kommentierte, vollständigere Version
+
# Siehe /usr/share/postfix/main.cf.dist für eine kommentierte 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)
+
# TLS Einstellungen
 
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
+
# Relay Regeln
 
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
+
# Hostname des Mailservers
myhostname = ns.it113.int
+
myhostname = mail.it213.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
+
# Ursprungsdomain
 
myorigin = /etc/mailname
 
myorigin = /etc/mailname
  
# Lokale Domains, für die dieser Server E-Mails annimmt
+
# Domains für die dieser Server Mails annimmt
mydestination = $myhostname, ns.it113.int, localhost.it113.int, , localhost
+
mydestination = $myhostname, localhost.it213.int, it213.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
+
# Vertrauenswürdige Netzwerke
 
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
 +
inet_protocols = all
 +
</pre>
  
# Unterstützte Internetprotokolle (IPv4 und IPv6)
+
== Änderungen ==
inet_protocols = all
+
Wir erweitern Postfix so, dass Mails im '''Maildir''' Format gespeichert werden.
 +
 
 +
== Maildir aktivieren ==
 +
*vi /etc/postfix/main.cf
 +
 
 +
Am Ende der Datei ergänzen
  
 +
<pre>
 +
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.
 
  
 +
Damit speichert Postfix neue Mails direkt im Maildir des Benutzers.
  
 +
= Postfix starten =
 +
;Start des Mailservers
 +
*systemctl start postfix
  
==Maildirformat==
+
= Postfix Handling =
;Wir fügen an
+
==Man kann Postfix über '''systemctl''' steuern==
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 status postfix
 
*systemctl stop postfix
 
*systemctl stop postfix
 
*systemctl restart postfix
 
*systemctl restart postfix
==Man kann Postfix aber auch '''postfix''' steuern==
+
 
 +
==Man kann Postfix auch direkt über das Programm '''postfix''' steuern==
 
*postfix status
 
*postfix status
 
*postfix start
 
*postfix start
Zeile 153: Zeile 176:
 
*postfix reload
 
*postfix reload
 
*postfix check
 
*postfix check
==Logging==
+
 
*journalctl -f -u postfix@-.service
+
= Logging =
 +
*journalctl -f -u postfix
 +
 
 
<pre>
 
<pre>
Mar 14 12:51:38 ns.it113.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
+
Mar 14 12:51:38 mail.it213.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
Mar 14 12:51:38 ns.it113.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
+
Mar 14 12:51:38 mail.it213.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
Mar 14 12:56:38 ns.it113.int systemd[1]: postfix.service: Deactivated successfully.
+
Mar 14 12:56:38 mail.it213.int systemd[1]: postfix.service: Deactivated successfully.
Mar 14 12:56:38 ns.it113.int systemd[1]: Stopped postfix.service - Postfix Mail Transport Agent.
+
Mar 14 12:56:38 mail.it213.int systemd[1]: Stopped postfix.service - Postfix Mail Transport Agent.
Mar 14 12:56:38 ns.it113.int systemd[1]: Stopping postfix.service - Postfix Mail Transport Agent...
+
Mar 14 12:56:38 mail.it213.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 mail.it213.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.
+
Mar 14 12:56:39 mail.it213.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
 
</pre>
 
</pre>
=Wir legen 2 User an=
+
 
*useradd -m -s /bin/bash martha
+
= Wir legen zwei Benutzer an =
*useradd -m -s /bin/bash leroy
+
*useradd -m -s /bin/bash martha
 +
*useradd -m -s /bin/bash leroy
 
*passwd martha
 
*passwd martha
 
*passwd leroy
 
*passwd leroy
==/etc/postfix/master.cf==
+
 
 +
= Übung =
 +
*Mach drei SSH-Verbindungen zum Mailserver
 +
*Eine als '''martha'''
 +
*Eine als '''leroy'''
 +
*Eine als '''root'''
 +
*Root beobachtet die Logs
 +
 
 +
*journalctl -f -u postfix@-.service
 +
 
 +
= Mails verschicken auf der Konsole =
 +
 
 +
Wir nutzen das Programm '''mail''' aus den mailutils.
 +
 
 +
== Leroy ==
 +
*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
 +
*echo "4. Mail" | mail -s "4. Mail" technik@xinux.de
 +
 
 +
== Martha ==
 +
*Martha startet das Programm '''mail'''
 +
 
 +
<pre>
 +
"/home/martha/Maildir": 3 messages 3 new
 +
>N  1 leroy@mail.it213.int Sun Mar 16 12:01  13/416  1. Mail
 +
N  2 leroy@mail.it213.int Sun Mar 16 12:01  13/433  2. Mail
 +
N  3 leroy@mail.it213.int Sun Mar 16 12:01  13/418  3. Mail
 +
</pre>
 +
 
 +
== Martha prüft wo die Mails liegen ==
 +
*find Maildir -type f
 +
 
 +
<pre>
 +
Maildir/cur/1742126491.V802I1c001cM284805.mail.it213.int,a=O,u=3:2,
 +
Maildir/cur/1742126491.V802I1c001bM254082.mail.it213.int,a=O,u=2:2,
 +
Maildir/cur/1742126491.V802I1c001aM245928.mail.it213.int,a=O,u=1:2,
 +
Maildir/.mu-prop
 +
</pre>
 +
 
 +
= SASL =
 +
 
 +
*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? ==
 +
* Postfix kennt keine Benutzer und kann sich nicht direkt über PAM oder andere Authentifizierungsmechanismen anmelden
 +
* Die Authentifizierung erfolgt über SASL
 +
* Dovecot stellt eine eigene SASL-Implementierung bereit
 +
* Dovecot kann verschiedene Backend-Methoden nutzen, z. B. PAM, LDAP, SQL oder lokale Benutzer
 +
 
 +
== Warum nutzen wir den Socket von Dovecot? ==
 +
* Dovecot stellt einen Unix-Socket bereit
 +
* Postfix nutzt diesen Socket zur Benutzer-Authentifizierung
 +
* Die Verbindung erfolgt lokal und ist daher sicher
 +
 
 +
= SASL Konfiguration mit Dovecot =
 +
 
 +
;Wir nutzen Dovecot für SASL
 +
 
 +
*vi /etc/dovecot/conf.d/10-master.conf
 +
 
 +
<pre>
 +
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
 +
  }
 +
}
 +
 
 +
service auth-worker {
 +
}
 +
 
 +
</pre>
 +
 
 +
= Postfix Änderung =
 +
*vi /etc/postfix/main.cf
 +
 
 +
<pre>
 +
smtpd_sasl_type = dovecot
 +
smtpd_sasl_path = private/auth
 +
smtpd_sasl_auth_enable = yes
 +
</pre>
 +
 
 +
= Dienste neu starten =
 +
*systemctl restart postfix
 +
*systemctl restart dovecot
 +
 
 +
= Kein Submission, stattdessen SMTPS (Port 465) =
 +
 
 +
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.
 +
 
 +
Viele Administratoren bevorzugen jedoch weiterhin '''SMTPS''' auf Port '''465'''.
 +
 
 +
Der Vorteil von SMTPS ist, dass die Verbindung '''sofort verschlüsselt''' aufgebaut wird.
 +
 
 +
== SMTPS aktivieren ==
 +
*vi /etc/postfix/master.cf
 +
 
 +
<pre>
 +
smtps    inet  n      -      y      -      -      smtpd
 +
  -o smtpd_tls_wrappermode=yes
 +
  -o smtpd_sasl_auth_enable=yes
 +
</pre>
 +
 
 +
== Postfix neu starten ==
 +
*systemctl restart postfix
 +
 
 +
== Kontrolle der offenen Ports ==
 +
*ss -lntp | grep master
 +
 
 +
<pre>
 +
LISTEN 0      100          0.0.0.0:25        0.0.0.0:*    users:(("master",pid=6565))
 +
LISTEN 0      100          0.0.0.0:465      0.0.0.0:*    users:(("master",pid=6565))
 +
</pre>
 +
 
 +
== Test der TLS Verbindung ==
 +
*openssl s_client -host mail.it213.int -port 465
 +
 
 +
= Dovecot =
 +
 
 +
Während '''Postfix''' für den Transport der E-Mails zuständig ist, stellt '''Dovecot''' den Zugriff auf die Mailboxen bereit.
 +
 
 +
Mailclients greifen über '''IMAP''' auf den Server zu.
 +
 
 +
Die wichtigsten Ports sind:
 +
 
 +
{| class="wikitable"
 +
! Dienst !! Zweck !! Port
 +
|-
 +
| '''imap''' || Zugriff auf Mailbox || 143
 +
|-
 +
| '''imaps''' || verschlüsselter Zugriff || 993
 +
|-
 +
| '''pop3''' || Download von Mails || 110
 +
|-
 +
| '''pop3s''' || verschlüsselter Download || 995
 +
|}
 +
 
 +
= Mailformat konfigurieren =
 +
*vi /etc/dovecot/conf.d/10-mail.conf
 +
 
 +
<pre>
 +
mail_driver = maildir
 +
mail_home = /home/%{user | username}
 +
mail_path = %{home}/Maildir
 +
namespace inbox {
 +
inbox = yes
 +
}
 +
mail_privileged_group = mail
 +
protocol !indexer-worker {
 +
}
 +
 
 +
</pre>
 +
 
 +
Damit greift Dovecot auf die Maildir-Verzeichnisse der Benutzer zu.
 +
 
 +
= TLS für Dovecot =
 +
*vi /etc/dovecot/conf.d/10-ssl.conf
 +
 
 +
<pre>
 +
ssl = yes
 +
ssl_server_cert_file = /etc/ssl/own.crt
 +
ssl_server_key_file = /etc/ssl/own.key
 +
ssl_min_protocol = TLSv1.2
 +
</pre>
 +
 
 +
Damit stellt Dovecot verschlüsselte Verbindungen über '''IMAPS''' bereit.
 +
 
 +
= TLS für Postfix =
 +
;Bitte diese Einträge ändern
 +
*cat /etc/postfix/main.cf
 +
smtpd_tls_cert_file=/etc/ssl/own.crt
 +
smtpd_tls_key_file=/etc/ssl/own.key
 +
= Erstellung von Zertifikaten und Private Key=
 +
*Erstellt einen Privkey für mail.it2XX.int
 +
*Erstellt einen Certifikate für mail.it2XX.int
 +
*Erstellt eine Fullchain für mail.it2XX.int
 +
*Plaziert die Fullchain auf mail.it2XX.int
 +
**/etc/ssl/own.crt
 +
*Plaziert dden prickey mail.it2XX.int
 +
**/etc/ssl/own.key
 +
 
 +
= Dovecot und Postfix starten =
 +
*systemctl restart dovecot
 +
*systemctl restart postfix
 +
 
 +
= Kontrolle der offenen Ports =
 +
*ss -lntp | egrep "465|993"
 +
 
 +
<pre>
 +
LISTEN 0 100 0.0.0.0:143
 +
LISTEN 0 100 0.0.0.0:993
 +
</pre>
 +
 
 +
= Test des IMAP Servers =
 +
*openssl s_client -connect mail.it213.int:993
 +
*openssl s_client -connect mail.it213.int:465
 +
 
 +
=Finale Konfiguration=
 +
==Postfix==
 +
===main.cf===
 +
*cat  /etc/postfix/main.cf
 +
<pre>
 +
smtpd_banner =  ESMTP  (Debian/GNU)
 +
biff = no
 +
append_dot_mydomain = no
 +
readme_directory = no
 +
compatibility_level = 3.6
 +
smtpd_tls_cert_file = /etc/ssl/own.crt
 +
smtpd_tls_key_file = /etc/ssl/own.key
 +
smtpd_tls_security_level=may
 +
smtp_tls_CApath=/etc/ssl/certs
 +
smtp_tls_security_level=may
 +
smtp_tls_session_cache_database = btree:/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 =  mail.it213.int, 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 =
 +
 
 +
smtpd_sasl_type = dovecot
 +
smtpd_sasl_path = private/auth
 +
smtpd_sasl_auth_enable = yes
 +
</pre>
 +
===master.cf===
 +
*cat  /etc/postfix/master.cf
 
<pre>
 
<pre>
# ==========================================================================
 
# service type  private unpriv  chroot  wakeup  maxproc command + args
 
#              (yes)  (yes)  (no)    (never) (100)
 
# ==========================================================================
 
 
smtp      inet  n      -      y      -      -      smtpd
 
smtp      inet  n      -      y      -      -      smtpd
 
pickup    unix  n      -      y      60      1      pickup
 
pickup    unix  n      -      y      60      1      pickup
Zeile 190: Zeile 474:
 
smtp      unix  -      -      y      -      -      smtp
 
smtp      unix  -      -      y      -      -      smtp
 
relay    unix  -      -      y      -      -      smtp
 
relay    unix  -      -      y      -      -      smtp
         -o syslog_name=postfix/$service_name
+
         -o syslog_name=postfix/
 
showq    unix  n      -      y      -      -      showq
 
showq    unix  n      -      y      -      -      showq
 
error    unix  -      -      y      -      -      error
 
error    unix  -      -      y      -      -      error
Zeile 202: Zeile 486:
 
postlog  unix-dgram n  -      n      -      1      postlogd
 
postlog  unix-dgram n  -      n      -      1      postlogd
 
maildrop  unix  -      n      n      -      -      pipe
 
maildrop  unix  -      n      n      -      -      pipe
   flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
+
   flags=DRXhu user=vmail argv=/usr/bin/maildrop -d  
 
uucp      unix  -      n      n      -      -      pipe
 
uucp      unix  -      n      n      -      -      pipe
   flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
+
   flags=Fqhu user=uucp argv=uux -r -n -z -a - !rmail ()
 
ifmail    unix  -      n      n      -      -      pipe
 
ifmail    unix  -      n      n      -      -      pipe
   flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
+
   flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r ()
 
bsmtp    unix  -      n      n      -      -      pipe
 
bsmtp    unix  -      n      n      -      -      pipe
   flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
+
   flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t -f  
 
scalemail-backend unix -      n      n      -      2      pipe
 
scalemail-backend unix -      n      n      -      2      pipe
   flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
+
   flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store  
 
mailman  unix  -      n      n      -      -      pipe
 
mailman  unix  -      n      n      -      -      pipe
   flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
+
   flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py   
</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. 
 
 
 
== Wichtige Dienste in master.cf == 
 
 
 
* '''smtp''' – Standard-SMTP-Dienst für den Empfang von E-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.
 
 
 
Warum das so gemacht wurde:
 
 
 
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.
 
==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. 
 
 
 
Falls SMTPS genutzt werden soll, kann folgender Eintrag in der master.cf ergänzt werden: 
 
 
 
<pre>
 
 
smtps    inet  n      -      y      -      -      smtpd
 
smtps    inet  n      -      y      -      -      smtpd
 
   -o smtpd_tls_wrappermode=yes
 
   -o smtpd_tls_wrappermode=yes
 
   -o smtpd_sasl_auth_enable=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>
 
CONNECTED(00000003)
 
depth=0 CN = mail.it113.int
 
verify return:1
 
---
 
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==
+
==Dovecot==
*ss -lntp
+
===master.conf===
 +
*cat /etc/dovecot/conf.d/10-master.conf
 
<pre>
 
<pre>
State              Recv-Q              Send-Q                          Local Address:Port                          Peer Address:Port            Process                                                               
+
service imap-login {
LISTEN              0                  100                                    0.0.0.0:993                                0.0.0.0:*                users:(("dovecot",pid=6205,fd=37))                                   
+
  inet_listener imap {
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>
 
==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=
+
   inet_listener imaps {
*Mach zwei ssh Verbidungen zum Mailserver
+
   }
*Eine als '''martha''' und eine als '''leroy'''
+
}
*Mahct noch eine dritte als root auf.
 
*Dort gucken wir was passiert
 
*journalctl -f -u postfix@-.service
 
*Wir nutzen zum lokalen verschicken das Programm mail aus den mailutils
 
=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 = 
+
service pop3-login {
*SASL (Simple Authentication and Security Layer) wird verwendet, um die Authentifizierung für den Versand von E-Mails über SMTP zu ermöglichen.
+
  inet_listener pop3 {
*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? == 
+
  inet_listener pop3s {
* Postfix kennt keine Benutzer und kann sich nicht direkt über PAM oder andere Authentifizierungsmechanismen anmelden 
+
  }
* 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? == 
+
service lmtp {
* Dovecot stellt einen Unix-Socket bereit, den Postfix nutzen kann 
+
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
* Postfix nutzt diesen Socket zur Benutzer-Authentifizierung, ohne eigene Benutzerverwaltung 
+
    mode = 0600
* Die Verbindung erfolgt lokal, was sicherer ist als eine Netzwerkverbindung
+
    user = postfix
 
+
    group = postfix
=SASL Konfiguration mit Dovecot= 
+
  }
;Wir nutzen Dovecot für SASL 
+
}
  
* 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 375: Zeile 535:
 
     group = postfix
 
     group = postfix
 
   }
 
   }
...
 
 
}
 
}
</pre> 
 
 
* vi /etc/dovecot/conf.d/10-auth.conf 
 
  auth_mechanisms = plain login 
 
 
=Postfix Änderung= 
 
* vi /etc/postfix/main.cf 
 
  smtpd_sasl_type = dovecot 
 
  smtpd_sasl_path = private/auth 
 
  smtpd_sasl_auth_enable = yes 
 
 
=Dienste neustarten= 
 
* 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: 
 
  
 +
service auth-worker {
 +
}
 +
</pre>
 +
===ssl.conf===
 +
*cat /etc/dovecot/conf.d/10-ssl.conf
 +
<pre>
 +
ssl = yes
 +
ssl_server_cert_file = /etc/ssl/own.crt
 +
ssl_server_key_file = /etc/ssl/own.key
 +
ssl_min_protocol = TLSv1.2
 +
</pre>
 +
===mail.conf===
 +
*cat /etc/dovecot/conf.d/10-mail.conf
 
<pre>
 
<pre>
smtps    inet  n      -      y      -      -      smtpd
+
mail_driver = maildir
  -o smtpd_tls_wrappermode=yes
+
mail_home = /home/%{user | username}
  -o smtpd_sasl_auth_enable=yes
+
mail_path = %{home}/Maildir
</pre> 
+
namespace inbox {
 
+
inbox = yes
Damit akzeptiert Postfix sichere Verbindungen über SMTPS mit sofortiger Verschlüsselung.
+
}
=SMTPS aktivieren=
+
mail_privileged_group = mail
=Postfix=
+
protocol !indexer-worker {
==Zertifikate kopieren==
+
}
*cp mail.it113.int.crt mail.it113.int.key /etc/postfix/
+
</pre>
=Vom Nameserver=
 
;Vorher
 
*openssl s_client -host mail.it113.int -port 465
 
==Zertifikate ersetzen==
 
# TLS parameters
 
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=
 

Aktuelle Version vom 19. März 2026, 12:50 Uhr

Zielsetzung

  • Einrichtung eines Mailservers mit Postfix, Dovecot und Rspamd
  • Unverschlüsselte Grundkonfiguration der Dienste
  • Schrittweise Absicherung durch Verschlüsselung
  • Integration von Rspamd zur Spam- und Virenerkennung
  • Logging und Fehleranalyse für eine stabile Mailserver-Umgebung

Voraussetzungen

  • Debian- oder Ubuntu-Server mit Root-Zugriff
  • Domain it213.int ist bereits als MX für den Mailserver eingetragen
  • Basiskenntnisse in Linux und Mailserver-Administration
  • Internetzugang für Paketinstallation und DNS-Abfragen

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

  • 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

Postfix

  • Postfix ist ein Mail-Transport-Agent (MTA)
  • Zuständig für den Versand und Empfang von E-Mails
  • Nimmt E-Mails von lokalen oder entfernten Clients an und leitet sie weiter

Dovecot-Core

  • Grundlegende Infrastruktur von Dovecot
  • Wird für die Bereitstellung von IMAP- und POP3-Diensten genutzt
  • Enthält noch keine spezifischen Protokolle

Dovecot-IMAPD

  • 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

  • Aktiviert den LMTP-Dienst (Local Mail Transfer Protocol)
  • Zuständig für die interne Mail-Zustellung von Postfix an Dovecot
  • Effizientere Alternative zu mailbox_command für die Mailzustellung

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

Mailformate

/var/spool/mail (mbox)

  • Speichert alle E-Mails eines Nutzers in einer einzigen Datei
  • 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

  • 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

  • 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}
  • echo 'export MAIL=$HOME/Maildir' >> /etc/skel/.bashrc

Postfix: Einführung in main.cf und master.cf

Postfix verwendet zwei zentrale Konfigurationsdateien zur Steuerung des Mail-Transports und der Dienste.

main.cf (Hauptkonfiguration)

  • Enthält die grundlegenden Einstellungen für Postfix
  • Definiert Parameter wie Domain, Relay-Regeln und Authentifizierung
  • Typische Einstellungen
    • myhostname – Hostname des Mailservers
    • mydestination – Domains für die dieser Server Mails annimmt
    • 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 Dienste wie SMTP oder SMTPS zu aktivieren

Erklärung der main.cf

/etc/postfix/main.cf

# Siehe /usr/share/postfix/main.cf.dist für eine kommentierte Version

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

biff = no
append_dot_mydomain = no
readme_directory = no

compatibility_level = 3.6

# TLS Einstellungen
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

# Relay Regeln
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

# Hostname des Mailservers
myhostname = mail.it213.int

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

# Ursprungsdomain
myorigin = /etc/mailname

# Domains für die dieser Server Mails annimmt
mydestination = $myhostname, localhost.it213.int, it213.int, localhost

relayhost =

# Vertrauenswürdige Netzwerke
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

Änderungen

Wir erweitern Postfix so, dass Mails im Maildir Format gespeichert werden.

Maildir aktivieren

  • vi /etc/postfix/main.cf

Am Ende der Datei ergänzen

home_mailbox = Maildir/
mailbox_command =

Damit speichert Postfix neue Mails direkt im Maildir des Benutzers.

Postfix starten

Start des Mailservers
  • systemctl start postfix

Postfix Handling

Man kann Postfix über systemctl steuern

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

Man kann Postfix auch direkt über das Programm postfix steuern

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

Logging

  • journalctl -f -u postfix
Mar 14 12:51:38 mail.it213.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
Mar 14 12:51:38 mail.it213.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.
Mar 14 12:56:38 mail.it213.int systemd[1]: postfix.service: Deactivated successfully.
Mar 14 12:56:38 mail.it213.int systemd[1]: Stopped postfix.service - Postfix Mail Transport Agent.
Mar 14 12:56:38 mail.it213.int systemd[1]: Stopping postfix.service - Postfix Mail Transport Agent...
Mar 14 12:56:39 mail.it213.int systemd[1]: Starting postfix.service - Postfix Mail Transport Agent...
Mar 14 12:56:39 mail.it213.int systemd[1]: Finished postfix.service - Postfix Mail Transport Agent.

Wir legen zwei Benutzer an

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

Übung

  • Mach drei SSH-Verbindungen zum Mailserver
  • Eine als martha
  • Eine als leroy
  • Eine als root
  • Root beobachtet die Logs
  • journalctl -f -u postfix@-.service

Mails verschicken auf der Konsole

Wir nutzen das Programm mail aus den mailutils.

Leroy

  • 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
  • echo "4. Mail" | mail -s "4. Mail" technik@xinux.de

Martha

  • Martha startet das Programm mail
"/home/martha/Maildir": 3 messages 3 new
>N   1 leroy@mail.it213.int Sun Mar 16 12:01  13/416   1. Mail
 N   2 leroy@mail.it213.int Sun Mar 16 12:01  13/433   2. Mail
 N   3 leroy@mail.it213.int Sun Mar 16 12:01  13/418   3. Mail

Martha prüft wo die Mails liegen

  • find Maildir -type f
Maildir/cur/1742126491.V802I1c001cM284805.mail.it213.int,a=O,u=3:2,
Maildir/cur/1742126491.V802I1c001bM254082.mail.it213.int,a=O,u=2:2,
Maildir/cur/1742126491.V802I1c001aM245928.mail.it213.int,a=O,u=1:2,
Maildir/.mu-prop

SASL

  • 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?

  • Postfix kennt keine Benutzer und kann sich nicht direkt über PAM oder andere Authentifizierungsmechanismen anmelden
  • Die Authentifizierung erfolgt über SASL
  • Dovecot stellt eine eigene SASL-Implementierung bereit
  • Dovecot kann verschiedene Backend-Methoden nutzen, z. B. PAM, LDAP, SQL oder lokale Benutzer

Warum nutzen wir den Socket von Dovecot?

  • Dovecot stellt einen Unix-Socket bereit
  • Postfix nutzt diesen Socket zur Benutzer-Authentifizierung
  • Die Verbindung erfolgt lokal und ist daher sicher

SASL Konfiguration mit Dovecot

Wir nutzen Dovecot für SASL
  • vi /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
  }
}

service auth-worker {
}

Postfix Änderung

  • vi /etc/postfix/main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

Dienste neu starten

  • systemctl restart postfix
  • systemctl restart dovecot

Kein Submission, stattdessen SMTPS (Port 465)

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.

Viele Administratoren bevorzugen jedoch weiterhin SMTPS auf Port 465.

Der Vorteil von SMTPS ist, dass die Verbindung sofort verschlüsselt aufgebaut wird.

SMTPS aktivieren

  • vi /etc/postfix/master.cf
smtps     inet  n       -       y       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

Postfix neu starten

  • systemctl restart postfix

Kontrolle der offenen Ports

  • ss -lntp | grep master
LISTEN 0      100          0.0.0.0:25        0.0.0.0:*    users:(("master",pid=6565))
LISTEN 0      100          0.0.0.0:465       0.0.0.0:*    users:(("master",pid=6565))

Test der TLS Verbindung

  • openssl s_client -host mail.it213.int -port 465

Dovecot

Während Postfix für den Transport der E-Mails zuständig ist, stellt Dovecot den Zugriff auf die Mailboxen bereit.

Mailclients greifen über IMAP auf den Server zu.

Die wichtigsten Ports sind:

Dienst Zweck Port
imap Zugriff auf Mailbox 143
imaps verschlüsselter Zugriff 993
pop3 Download von Mails 110
pop3s verschlüsselter Download 995

Mailformat konfigurieren

  • vi /etc/dovecot/conf.d/10-mail.conf
mail_driver = maildir
mail_home = /home/%{user | username}
mail_path = %{home}/Maildir 
namespace inbox {
 inbox = yes
}
mail_privileged_group = mail
protocol !indexer-worker {
}

Damit greift Dovecot auf die Maildir-Verzeichnisse der Benutzer zu.

TLS für Dovecot

  • vi /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_server_cert_file = /etc/ssl/own.crt
ssl_server_key_file = /etc/ssl/own.key
ssl_min_protocol = TLSv1.2

Damit stellt Dovecot verschlüsselte Verbindungen über IMAPS bereit.

TLS für Postfix

Bitte diese Einträge ändern
  • cat /etc/postfix/main.cf
smtpd_tls_cert_file=/etc/ssl/own.crt
smtpd_tls_key_file=/etc/ssl/own.key

Erstellung von Zertifikaten und Private Key

  • Erstellt einen Privkey für mail.it2XX.int
  • Erstellt einen Certifikate für mail.it2XX.int
  • Erstellt eine Fullchain für mail.it2XX.int
  • Plaziert die Fullchain auf mail.it2XX.int
    • /etc/ssl/own.crt
  • Plaziert dden prickey mail.it2XX.int
    • /etc/ssl/own.key

Dovecot und Postfix starten

  • systemctl restart dovecot
  • systemctl restart postfix

Kontrolle der offenen Ports

  • ss -lntp | egrep "465|993"
LISTEN 0 100 0.0.0.0:143
LISTEN 0 100 0.0.0.0:993

Test des IMAP Servers

  • openssl s_client -connect mail.it213.int:993
  • openssl s_client -connect mail.it213.int:465

Finale Konfiguration

Postfix

main.cf

  • cat /etc/postfix/main.cf
smtpd_banner =  ESMTP  (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 3.6
smtpd_tls_cert_file = /etc/ssl/own.crt
smtpd_tls_key_file = /etc/ssl/own.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:/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 =  mail.it213.int, 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 =

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

master.cf

  • cat /etc/postfix/master.cf
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/
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 
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a - !rmail ()
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r  ()
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t -f 
scalemail-backend unix -       n       n       -       2       pipe
  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store   
mailman   unix  -       n       n       -       -       pipe
  flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py  
smtps     inet  n       -       y       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

Dovecot

master.conf

  • cat /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
  }
}

service auth-worker {
}

ssl.conf

  • cat /etc/dovecot/conf.d/10-ssl.conf
ssl = yes
ssl_server_cert_file = /etc/ssl/own.crt
ssl_server_key_file = /etc/ssl/own.key
ssl_min_protocol = TLSv1.2

mail.conf

  • cat /etc/dovecot/conf.d/10-mail.conf
mail_driver = maildir
mail_home = /home/%{user | username}
mail_path = %{home}/Maildir 
namespace inbox {
 inbox = yes
}
mail_privileged_group = mail
protocol !indexer-worker {
}