Mailserver Workshop Basis Konfiguration: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 130: Zeile 130:
 
==/etc/postfix/master.cf==
 
==/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 169: Zeile 173:
 
   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 ${nexthop} ${user}
 
</pre>
 
</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
 +
  -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>
 +
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>
 +
==Wo sind wir jetzt und was geht==
 +
*ss -lntp
 +
<pre>
 +
State              Recv-Q              Send-Q                          Local Address:Port                          Peer Address:Port            Process                                                               
 +
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>
 +
==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 
 +
|}

Aktuelle Version vom 16. März 2025, 12:49 Uhr

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 – 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

# 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)

# Deaktiviert Biff, das sonst Benachrichtigungen über neue Mails an lokale Benutzer sendet
biff = no

# Das Anhängen der Domain an lokale E-Mail-Adressen ist Aufgabe des Mail-Clients (MUA)
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

# Siehe http://www.postfix.org/COMPATIBILITY_README.html -- Standard ist 3.6 bei neuen Installationen
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_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may  # TLS wird unterstützt, aber nicht erzwungen

# TLS für ausgehende SMTP-Verbindungen
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may  # TLS wird für ausgehende Verbindungen unterstützt, aber nicht erzwungen
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

# Hostname dieses Mailservers
myhostname = ns.it113.int

# Pfad zur Aliase-Datei, die E-Mail-Aliasnamen speichert
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

# Ursprungsdomain für ausgehende Mails
myorigin = /etc/mailname

# Lokale Domains, für die dieser Server E-Mails annimmt
mydestination = $myhostname, ns.it113.int, localhost.it113.int, , localhost

# Standard-Relay-Host (leer, d.h. keine Weiterleitung an einen anderen Server)
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

# Maximale Postfachgröße (0 bedeutet unbegrenzt)
mailbox_size_limit = 0

# Trennzeichen für Adressvarianten (z.B. user+info@example.com)
recipient_delimiter = +

# Auf welchen Netzwerk-Schnittstellen Postfix lauscht (hier: alle)
inet_interfaces = all

# Unterstützte Internetprotokolle (IPv4 und IPv6)
inet_protocols = all

Ä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.


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 status postfix
  • systemctl stop postfix
  • systemctl restart postfix

Man kann Postfix aber auch postfix steuern

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

Logging

  • journalctl -f -u postfix@-.service
Mar 14 12:51:38 ns.it113.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:56:38 ns.it113.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 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.

Wir legen 2 User an

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

/etc/postfix/master.cf

# ==========================================================================
# 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}

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:

smtps     inet  n       -       y       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes

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
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
...

Wo sind wir jetzt und was geht

  • ss -lntp
State               Recv-Q              Send-Q                           Local Address:Port                           Peer Address:Port             Process                                                                 
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)) 

Wir haben folgendes Dienst laufen

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