Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_archlinux

Postfix ArchLinux

Postfix ist Wietse Venema's Mail-Server, welcher bei „IBM research“ als Alternative zum ehemals weit verbreiteten Programm Sendmail entwickelt wurde. Postfix erhebt den Anspruch ein schneller, einfach zu administrierender und sicherer Mail-Server zu sein.

:!: WICHTIG - Für den erfolgreichen Betrieb eines eigenen MTA (Mail Transport Agent) als
Postfix-öffentlicher MailExchager ist der Besitz einer

  • festen offiziellen IP-Adresse (IPv4)
    • (optional auch eines festen offiziellen IP-Adressen-Bereich (IPv6))

und eines

  • öffentlichen korrekten DNS-Eintrags für die DNS-Forward-Auflösung
  • öffentlichen korrekten DNS-Eintrags für die DNS-Reverse-Auflösung

zwingend erforderlich!

Postfix wird von Wietse Venema entwickelt.

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Installation

Zur Installation des Postfix wird nachfolgendes Paket benötigt:

  • postfix - ist im extra-Repository von ArchLinux enthalten.

Mit nachfolgendem Befehl, wird das Pakete postfix installiert:

# pacman -S --noconfirm postfix

Installationsverlauf

:!: HINWEIS - Nachfolgende warning:-Zeilen sind bei der Installation aufgetreten, geben allerdings nur den Hinweis, dass ein zusätzliches Paket vor der eigentlichen Installation von Postfix erforderlich ist und dieses automatisch davor installiert wird und kann in diesem Fall einfach nur zur Kenntnis genommen werden:

warning: dependency cycle detected:
warning: postfix-lmdb will be installed before its postfix dependency

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket postfix installiert wurden:

# pacman -Qil postfix

Installierte Dateien

Dienst/Daemon-Start einrichten

Um einen Postfix, welcher als Dienst/Daemon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:

systemctl enable postfix.service

Eine Überprüfung, ob beim Neustart des Server der postfix-Dienst/Daemon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:

# systemctl list-unit-files --type=service | grep -e postfix.service

bzw.

# systemctl is-enabled postfix.service
enabled

iptables/ip6tables Regeln

Damit der Postfix auch erreichbar ist und nicht der E-Mail-Verkehr vom Paketfilter iptables blockiert werden, müssen nachfolgende Regeln zum iptables-Regelwerk hinzugefügt werden.

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1     1169 2101K ACCEPT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *     *    0.0.0.0/0   0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo    *    0.0.0.0/0   0.0.0.0/0           
4        1    60 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:22
5        0     0 LOG        all  --  *     *    0.0.0.0/0   0.0.0.0/0     LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with tcp-reset
7        0     0 REJECT     udp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-port-unreachable
8        0     0 REJECT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-proto-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Nachfolgende Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 25 -j ACCEPT
  • -A INPUT -p tcp --dport 587 -j ACCEPT

und hier die Befehle:

# iptables -I INPUT 5 -p tcp --dport 25 -j ACCEPT
# iptables -I INPUT 5 -p tcp --dport 587 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -L -nv --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1     1202 2103K ACCEPT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp --  *     *    0.0.0.0/0   0.0.0.0/0           
3        0     0 ACCEPT     all  --  lo    *    0.0.0.0/0   0.0.0.0/0           
4        1    60 ACCEPT     tcp  --  *     *    0.0.0.0/    0.0.0.0/0     tcp dpt:22
5        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:25
6        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:587
7        0     0 LOG        all  --  *     *    0.0.0.0/0   0.0.0.0/0     LOG flags 0 level 5 prefix "REC-INP Defend "
8        0     0 REJECT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with tcp-reset
9        0     0 REJECT     udp  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-port-unreachable
10       0     0 REJECT     all  --  *     *    0.0.0.0/0   0.0.0.0/0     reject-with icmp-proto-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Die neuen Zeilen sind an Position 5 (INPUT) und Position 6 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:25
6        0     0 ACCEPT     tcp  --  *     *    0.0.0.0/0   0.0.0.0/0     tcp dpt:587
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschliessend noch ausgeführt werden:

# /usr/sbin/iptables-save > /etc/iptables/iptables.rules

Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das iptables-Regelwerk auch korrekt gespeichert wurde:

# cat /etc/iptables/iptables.rules
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sat May 04 07:29:23 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:23 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:23 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:23 2024

Um die aktuellen ip6tables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 ACCEPT     all      *     *    ::/0        ::/0          ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *     *    ::/0        ::/0                
3        0     0 ACCEPT     all      lo    *    ::/0        ::/0                
4        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:22
5        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-INP Defend "
6        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
7        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
8        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
3        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Nachfolgende Befehle, fügen folgende ip6tables-Regeln dem ip6tables-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A INPUT -p tcp --dport 25 -j ACCEPT
  • -A INPUT -p tcp --dport 587 -j ACCEPT

und hier die Befehle:

# ip6tables -I INPUT 5 -p tcp --dport 25 -j ACCEPT
# ip6tables -I INPUT 6 -p tcp --dport 587 -j ACCEPT

Ein erneute Abfrage des ip6tables-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# ip6tables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 ACCEPT     all      *     *    ::/0        ::/0          ctstate RELATED,ESTABLISHED
2        0     0 ACCEPT     icmp     *     *    ::/0        ::/0                
3        0     0 ACCEPT     all      lo    *    ::/0        ::/0                
4        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:22
5        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:25
6        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:587
7        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-INP Defend "
8        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
9        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
10       0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         
1        0     0 LOG        all      *     *    ::/0        ::/0          LOG flags 0 level 5 prefix "REC-FWD Defend "
2        0     0 REJECT     tcp      *     *    ::/0        ::/0          reject-with tcp-reset
3        0     0 REJECT     udp      *     *    ::/0        ::/0          reject-with icmp6-port-unreachable
4        0     0 REJECT     all      *     *    ::/0        ::/0          reject-with icmp6-addr-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination         

Die neuen Zeilen sind an Position 5 (INPUT) und Postition 6 (INTPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:25 
6        0     0 ACCEPT     tcp      *     *    ::/0        ::/0          tcp dpt:587
...

Um diese ip6tables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im ip6tables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# /usr/sbin/ip6tables-save > /etc/iptables/ip6tables.rules 

Nachfolgender Befehl kann dazu verwendet werden, um zu überprüfen, ob das ip6tables-Regelwerk auch korrekt gespeichert wurde:

# cat /etc/iptables/ip6tables.rules
# Generated by iptables-save v1.8.10 on Sat May 04 07:29:53 2024
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:53 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:59:23 2024
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
-A INPUT -j LOG --log-prefix "REC-INP Defend " --log-level 5
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -j REJECT --reject-with icmp6-port-unreachable
-A INPUT -j REJECT --reject-with icmp6-addr-unreachable
-A FORWARD -j LOG --log-prefix "REC-FWD Defend " --log-level 5
-A FORWARD -p tcp -j REJECT --reject-with tcp-reset
-A FORWARD -p udp -j REJECT --reject-with icmp6-port-unreachable
-A FORWARD -j REJECT --reject-with icmp6-addr-unreachable
COMMIT
# Completed on Sat May 04 07:29:53 2024
# Generated by iptables-save v1.8.10 on Sat May 04 07:59:23 2024
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
# Completed on Sat May 04 07:29:53 2024

IPv4: Port Forwarding

Falls sich der Postfix NICHT auf dem Server befinden sollte, welcher z.B. die offizielle IP-Adressen verwaltet, können auf z.B. Port 25 bzw. Port 587 ankommende TCP/IP-Pakete mit Hilfe von iptables-Regeln auf einen anderen Server umgeleitet werden.

Beispiel:

  • Alle Anfragen kommen auf dem Server 192.168.0.1 auf Port 25 und Port 587 an
  • Alle Anfragen sollen auf den Server 192.168.0.60 auf Port 25 und Port 587 - weitergeleitet werden!

Nachfolgende Regel muss dazu auf dem Server, welche die IP-Adresse 192.168.0.1 inne hat, zum iptables-Regelwerk hinzugefügt werden. Das Ergänzen erfolgt in der iptables-Kette:

  • nat

Um die aktuellen iptables-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

:!: WICHTIG - Bei der MASQUERADE-Regel darf NICHT das Interface enthalten sein, an dessen geFORWARDED wird !!!

Nachfolgender Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 25 -j DNAT --to-dest 192.168.0.60:25
  • -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 587 -j DNAT --to-dest 192.168.0.60:587

und hier die Befehle:

# iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 25 -j DNAT --to-dest 192.168.0.60:25
# iptables -A PREROUTING -t nat -d 192.168.0.1 -p tcp --dport 587 -j DNAT --to-dest 192.168.0.60:587

Ein erneute Abfrage des iptables-Regelwerks, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination
1        0     0 DNAT       tcp  --  *     *    0.0.0.0/0   192.168.0.1   tcp dpt:25 to:192.168.0.60:25
2        0     0 DNAT       tcp  --  *     *    0.0.0.0/0   192.168.0.1   tcp dpt:587 to:192.168.0.60:587

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in    out  source      destination

:!: WICHTIG - Bei der MASQUERADE-Regel darf NICHT das Interface enthalten sein, an dessen geFORWARDED wird !!!

Die neuen Zeilen sind an Position 1 (PREROUTING) und Position 2 (PREROUTING) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
1        0     0 DNAT       tcp  --  *     *    0.0.0.0/0   192.168.0.1   tcp dpt:25 to:192.168.0.60:25
2        0     0 DNAT       tcp  --  *     *    0.0.0.0/0   192.168.0.1   tcp dpt:587 to:192.168.0.60:587
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschliessend noch ausgeführt werden:

# /usr/sbin/iptables-save > /etc/sysconfig/iptables 

Konfigurationsdateien

Die Konfiguration von Postfix findet in verschiedenen Dateien statt, welche alle im Verzeichnis

  • /etc/postfix

enthalten sind.

Standard

Nachfolgende Dateien sind bereits nach der Installation von Postfix unter ArchLinux vorhanden:

Name der Konfigurationsdatei Bedeutung der Konfigurationsdatei
/etc/postfix/main.cf Hauptkonfigurationsdatei.
/etc/postfix/master.cf Dienste-Modul-Konfigurationsdatei
/etc/postfix/aliases Umleiten von E-Mails für lokale Empfänger.
Diese Tabelle wird immer mit dem „localpart“ der E-Mail-Adresse durchsucht (ohne Domänenanteil).
:!: HINWEIS - Unter ArchLinux ist die Datei nicht unter /etc/aliases zu finden !!!
/etc/postfix/access Zugriffskontrolle für Clients, welche sich via „Remote SMTP“ verbinden anhand von
Informationen wie, Hostname, Netzwerkadresse und ENVELOP Absender- und Empfängeradresse.
/etc/postfix/bounce.cf.default Integrierte (Kopier-)Vorlage für Benachrichtigungen über den Zustellstatus (DSN) bei
unzustellbaren Sendungen, verspäteten Sendungen, erfolgreicher Zustellung oder
Anfragen zur Adressüberprüfung.
:!: HINWEIS - Diese Konfigurationsdatei sollte nicht verändert werden !!!
/etc/postfix/canonical Umschreiben von lokalen und nicht-lokale Adressen bei eingehenden E-Mails.
Kann E-Mail-Adressen im ENVELOP und „Header“ ändern.
Dies ist das Gegenteil von generic.
/etc/postfix/dynamicmaps.cf Konfigurationsdatei für Plug-in-Datenbank-Clients.
Die Funktion dynamicmaps.cf ermöglicht es eine Minimalversion von Postfix zu verteilen
und LDAP, *SQL* usw. als Plugins zu unterstützen.
/etc/postfix/dynamicmaps.cf.d Verzeichnis für Konfigurationen zu Plug-in-Datenbank-Clients.
- postfix-lmdb.cf Der Postfix LMDB-Adapter ermöglicht den Zugriff auf einen persistenten Key-Value-Speicher
mit Memory-Mapping.
/etc/postfix/generic Umschreiben der Absender E-Mail-Adresse bei ausgehenden E-Mails.
Dies ist das Gegenteil von canonical.
/etc/postfix/header_checks E-Mail-Behandlung von Clients, anhand von „Header“-Informationen,
welche mit einer Liste von Mustern verglichen werden. (Aktion kann z.B. REJECT sein.)
/etc/postfix/relocated Benachrichtigung bei unzustellbaren E-Mail-Adressen.
E-Mail-Adressen welche als Liste oder als Liste von Mustern abgeglichen werden.
Es wird eine „BOUNCE“-Nachricht mit der neuen E-Mail-Adresse dem Einliefernden zurückgesendet.
/etc/postfix/transport Definition von abweichenden Zustell-Methoden und Next-Hop-Zielen.
Methoden wie local oder smtp werden in der Datei master.cf definiert
und Next-Hop-Ziele sind normalerweise Hosts oder Domänen Namen.
/etc/postfix/virtual Definition von Weiterleitungen für lokalen und nicht-lokale Adressen.
Ändert E-Mail-Adressen nur im ENVELOP.
Kann als zusätzliche aliases-Tabelle angesehen werden.

Minimal-Konfiguration

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
command_directory = /usr/bin
compatibility_level = 3.9
daemon_directory = /usr/lib/postfix/bin
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name 
$process_id & sleep 5
html_directory = no
inet_protocols = ipv4
mail_owner = postfix
mailq_path = /usr/bin/mailq
manpage_directory = /usr/share/man
meta_directory = /etc/postfix
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix
sample_directory = /etc/postfix
sendmail_path = /usr/bin/sendmail
setgid_group = postdrop
shlib_directory = /usr/lib/postfix
unknown_local_recipient_reject_code = 550

Nachfolgende Anpassungen an der Hauptkonfigurationsdatei von Postfix ermöglichen einen ersten minimalen Betrieb von Postfix.

:!: HINWEIS - Nachfolgend soll die Hauptkonfigurationsdatei erst einmal auf das minimalste beschränkt werden !

Dazu soll mit nachfolgendem Befehl, die mit der Installation von Postfix unter ArchLinux Standard-Konfigurationsdatei umbenannt werden:

# mv /etc/postfix/main.cf /etc/postfix/main.cf.orig

Anschliessend soll mit dem folgenden Befehl bzw. Datei-Editor, hier z.B. vim nachfolgender minimalster Inhalt hinzugefügt werden.

# vim /etc/postfix/main.cf
compatibility_level = 3.9
alias_maps = lmdb:/etc/postfix/aliases
alias_database = $alias_maps
debugger_command =
   PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
   ddd $daemon_directory/$process_name $process_id & sleep 5

:!: HINWEIS - Es handelt sich bei dem Inhalt ausschliesslich um nicht default (Standard) Parameter, für ArchLinux !

Zur Kontrolle, ob alle Parameter korrekt gesetzt wurden und keine syntaktischen Fehler in der Hauptkonfigurationsdatei für Postfix unter ArchLinux enthalten sind und sonst immer die Standardwerte zur Anwendung kommen, kann wiederum der nachfolgende Befehl

  • postconf -n

verwendet werden und es sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd$daemon_directory/$process_name 
$process_id & sleep 5

:!: HINWEIS - Falls bei der Ausführung des Befehl postconf -n kein Warn- oder Fehlerhinweis erscheint, ist alles syntaktisch korrekt!

:!: HINWEIS - Das setzen der Parameter

  • alias_maps
  • alias_database

ist nur erforderlich, da unter ArchLinux die Konfigurationsdatei aliases, nicht unter /etc/aliases zu finden ist!

compatibility_level

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#compatibility_level
http://www.postfix.org/COMPATIBILITY_README.html
Defaultwert
compatibility_level = 0
Neuer Wert
compatibility_level = 3.9

:!: HINWEIS - Der Wert sollte bei jeder Major- oder Minor-Versionsänderung angepasst werden !

Beschreibung Ein Sicherheitsnetz, das dafür sorgt, dass Postfix nach einem Upgrade auf eine neuere Postfix-Version mit abwärtskompatiblen Standardeinstellungen läuft.

Wenn die Abwärtskompatibilität eingeschaltet ist (der Wert in /etc/postfix/main.cf Parameter: compatibility_level ungleich dessen Wert der in Postfix gesetzte default (Standard) Wert ist), sucht Postfix nach Einstellungen, die auf dem impliziten Standardwert belassen werden, und gibt eine Meldung im LOG aus, wenn eine abwärtskompatible Standardeinstellung erforderlich ist.

alias_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#alias_maps
http://www.postfix.org/aliases.5.html
http://www.postfix.org/ADDRESS_REWRITING_README.html
Defaultwert
alias_maps = lmdb:/etc/aliases, nis:mail.aliases
Neuer Wert
alias_maps = lmdb:/etc/postfix/aliases
Beschreibung Optionale Nachschlagetabellen, die nur mit einem lokalen Teil der E-Mail-Adresse (ohne Domäne) durchsucht werden und nur für lokale Empfänger gelten. Das Format der alias_maps-Tabelle und die Suchvorgänge sind in aliases dokumentiert.

Einen Überblick über die Adressmanipulationen von Postfix ist unter dem Dokument ADDRESS_REWRITING_README zu finden. Die alias_maps-Tabelle stehen im Gegensatz zu virtual_alias_maps, welche oft auch mit einer vollständigen E-Mail-Adresse (einschliesslich Domäne) durchsucht werden und für alle Empfänger gelten: local, virtual und remote.
Siehe auch Postfix ArchLinux - Minimal-Konfiguration - alias_database
Postfix ArchLinux - Minimal-Konfiguration - /etc/postfix/aliases
Postfix ArchLinux - Minimal-Konfiguration - default_database_type

alias_database

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#alias_database
Defaultwert
alias_database = lmdb:/etc/aliases
Neuer Wert
alias_database = $alias_maps
Beschreibung Die Alias-Datenbanken für die local(e)-Zustellung, die mit postalias erstellt wird und mit newaliases oder früher mit sendmail -bi aktualisiert wird.
Siehe auch Postfix ArchLinux - Minimal-Konfiguration - alias_maps
Postfix ArchLinux - Minimal-Konfiguration - /etc/postfix/aliases
Postfix ArchLinux - Minimal-Konfiguration - default_database_type

debugger_command

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#debugger_command
Defaultwert
debugger_command = 
Neuer Wert
debugger_command =
   PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
   ddd $daemon_directory/$process_name $process_id & sleep 5
Beschreibung Der externe Befehl, der ausgeführt wird, wenn ein Postfix-Daemon-Programm mit der Option -D aufgerufen wird.

Option -D (nur bei Postfix-Start) - Führt jeden Postfix-Daemon unter Kontrolle eines Debuggers aus, der über den Konfigurationsparameter debugger_command angegeben wird.

/etc/postfix/aliases

Nachdem nun die Minimal-Konfigurationen in der Haupt-Konfigurationsdatei von Postfix durchgeführt wurden, ist es zwingend erforderlich die nachfolgende Frage noch zu beantworten:

  • Wer soll die e-Mails, welche an den Benutzer root gerichtet sind, tatsächlich erhalten?

Dies ist aus zwei Gründen sehr wichtig

  1. Verhinderung des Zugriffs durch andere Programme z.B. (Local Delivery agents) wie z.B. procmail
  2. Verhinderung von Ausführung von Schadcode als Benutzer root

Standardmässig verwendet Postfix die Konfigurationsdatei

um Weiterleitungen für lokale Benutzer, hier root zu realisieren.

Innerhalb dieser Konfigurationsdatei ist auch eine Weiterleitung von e-Mails an den lokalen Benutzer root und dessen Weiterleitung an einen mit nicht so umfangreichen Rechten ausgestatteter Benutzer vorbereitet:

(Nur relevanter Ausschnitt)

...
# Person who should get root's mail. Don't receive mail as root!
#root:      you

Hier sollte diese letzte Zeile z.B. wie folgt abgeändert werden:

# Person who should get root's mail. Don't receive mail as root!
# Tachtler
# default: #root:      you
root:      klaus

:!: HINWEIS - Zum jetzigen Konfigurationsstand von Postfix sollte der hier eingesetzte Benutzer, hier z.B. klaus - ein lokaler Benutzer sein, welcher sich auch am Server anmelden kann!

Anschliessend ist sind die Änderungen noch in ein für Postfix besser lesbares Datenbankformat umzuwandeln, was erstmals mit nachfolgendem Befehl durchgeführt werden kann:

# postalias /etc/postfix/aliases

:!: HINWEIS - Weitere Änderungen können dann mit dem Befehl newaliases durchgeführt werden!

:!: HINWEIS - Es erfolgt keine Ausgabe, nach Befehlsausführung!

Abschliessend kann mit nachfolgendem Befehl überprüft werden, ob die Änderungen übernommen wurden:

# ls -l /etc/postfix/aliases*
-rw-r--r-- 1 root root 11084 May  5 10:18 /etc/postfix/aliases
-rw-r--r-- 1 root root 12288 May  5 10:42 /etc/postfix/aliases.lmdb

default_database_type

Bei der Verwendung der Befehle postalias, newaliases und postmap wird, falls nichts anderes angegeben, standardmässig als Datenbank-Typ der Wert aus dem Parameter default_database_type verwendet.

Fall ein abweichender Datenbank-Typ verwendet werden soll oder der Datenbank-Typ explizit angegeben werden soll, kann dies wie folgt bei den Befehlen postalias, newaliases und postmap angewendet werden:

# postalias lmdb:/etc/postfix/aliases
Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#default_database_type
http://www.postfix.org/postalias.1.html
http://www.postfix.org/newaliases.1.html
http://www.postfix.org/postmap.1.html
Defaultwert
default_database_type = lmdb
Beschreibung Der Standard-Datenbanktyp zur Verwendung in den Befehlen newaliases, postalias und postmap. Auf vielen UNIX-Systemen ist der Standardtyp entweder dbm oder hash. Die Standardeinstellung wird bei der Erstellung des Postfix-Systems festgelegt.
Siehe auch Postfix ArchLinux - Minimal-Konfiguration - alias_maps
Postfix ArchLinux - Minimal-Konfiguration - alias_databse
Postfix ArchLinux - Minimal-Konfiguration - /etc/postfix/aliases

Erster Start

Falls vorstehende Änderungen durchgeführt wurden, sollte ein erster Start von Postfix nichts mehr im Wege stehen.

Bevor der der postfix/master-Daemon/Dienst zum ersten mal gestartet werden soll, ist eine Überprüfung der korrekten Konfiguration durch nachfolgenden Befehl, zu empfehlen

  • postconf -n

und es sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name
$process_id & sleep 5

:!: HINWEIS - die Konfiguration des postfix/master-Daemon/Dienst konnte korrekt gelesen werden, wenn die Konfiguration ohne Fehlermeldungen erscheint, was letztendlich zwar nicht bedeutet, das Sie auch korrekt ist, aber zumindest syntaktische Fehler ausschliesst !!!

Danach kann der postfix-Server mit nachfolgendem Befehle gestartet werden:

# systemctl start postfix.service

Mit nachfolgendem Befehl kann der Status des Postfix-Servers abgefragt werden:

# systemctl status postfix.service 
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; preset:>
     Active: active (running) since Sun 2024-05-05 10:50:23 CEST; 4s ago
    Process: 1445 ExecStart=/usr/bin/postfix start (code=exited, status=0/SUCCE>
   Main PID: 1512 (master)
      Tasks: 3 (limit: 2316)
     Memory: 3.7M (peak: 4.3M)
        CPU: 262ms
     CGroup: /system.slice/postfix.service
             ├─1512 /usr/lib/postfix/bin/master -w
             ├─1513 pickup -l -t unix -u
             └─1514 qmgr -l -t unix -u

May 05 10:50:23 server systemd[1]: Starting Postfix Mail Transport Agent...
May 05 10:50:23 server postfix[1510]: postfix/postlog: starting the Postfix mai>
May 05 10:50:23 server postfix/postfix-script[1510]: starting the Postfix mail >
May 05 10:50:23 server postfix/master[1512]: daemon started -- version 3.9, con>
May 05 10:50:23 server systemd[1]: Started Postfix Mail Transport Agent.

Nachfolgender Befehl listet die IP-Adressen und die Ports auf, auf denen der Postfix-Server lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN   0      100      0.0.0.0:25         0.0.0.0:*     users:(("master",pid=1512,fd=13))
ino:11309 sk:1 cgroup:/system.slice/postfix.service <->
tcp   LISTEN   0      100         [::]:25            [::]:*     users:(("master",pid=1512,fd=14))
ino:11310 sk:6 cgroup:/system.slice/postfix.service v6only:1 <->

Erster Test

Anschliessend kann mit einem kleinen Test herausgefunden werden, ob lokal erzeugte e-Mails auch lokal Zugestellt werden können, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet) durchgeführt werden soll:

# echo "Test-E-Mail" | /usr/sbin/sendmail root

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Einträge im systemd-journald
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/spool/mail/klaus

Der Inhalte der Log-Einträge im systemd-journald sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# journalctl -u postfix.service 

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

# journalctl -u postfix.service 
May 05 10:50:23 server systemd[1]: Starting Postfix Mail Transport Agent...
May 05 10:50:23 server postfix[1510]: postfix/postlog: starting the Postfix mail system
May 05 10:50:23 server postfix/postfix-script[1510]: starting the Postfix mail system
May 05 10:50:23 server postfix/master[1512]: daemon started -- version 3.9, configuration /etc/postfix
May 05 10:50:23 server systemd[1]: Started Postfix Mail Transport Agent.
May 05 11:02:16 server postfix/pickup[1513]: 0F2BA8E: uid=0 from=<root>
May 05 11:02:16 server postfix/cleanup[1616]: 0F2BA8E: message-
id=<20240505090216.0F2BA8E@server.localdomain>
May 05 11:02:16 server postfix/qmgr[1514]: 0F2BA8E: from=<root@server.localdomain>, size=260, nrcpt=1 
(queue active)
May 05 11:02:16 server postfix/local[1623]: 0F2BA8E: to=<klaus@server.localdomain>, orig_to=<root>,
relay=local, delay=0.04, delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
May 05 11:02:16 server postfix/qmgr[1514]: 0F2BA8E: removed

Der Inhalt der im mbox-Format angelegten Datei /var/spool/mail/klaus sollte ebenfalls eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# cat /var/spool/mail/klaus

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

# cat /var/spool/mail/klaus
From root@server.localdomain  Sun May  5 11:02:16 2024
Return-Path: <root@server.localdomain>
X-Original-To: root
Delivered-To: root@server.localdomain
Received: by server.localdomain (Postfix, from userid 0)
	id 0F2BA8E; Sun, 05 May 2024 11:02:16 +0200 (CEST)
Message-Id: <20240505090216.0F2BA8E@server.localdomain>
Date: Sun, 05 May 2024 11:02:16 +0200 (CEST)
From: root@server.localdomain

Test-E-Mail
 

:!: HINWEIS - Für weitere Konfigurationen stehen nachfolgende interne Links zur Verfügung - entweder den internen Link:

oder

weiter verfolgen, :!: aber nicht beide Konfigurationsvarianten auf dem selben Server !!! 8-)

Konfiguration: null client

:!: ACHTUNG :!:
Die nachfolgende Dokumentation für einen Postfix als „null client“ enthält zwei Varianten, bitte jeweils nur eine davon durchführen!

Unter nachfolgendem externen Link, befindet sich die Definition für einen Postfix-Server, welcher als sogenannter „null client“ fungieren soll:

Definition laut Dokumentation:
- Postfix Standard Configuration Examples - Postfix on a null client
Ein „null client“ ist ein Server, der nur E-Mails versenden kann. Er empfängt keine E-Mails und stellt „lokal“ auch keine E-Mails an Postfächer zu.
Erklärung eines möglichen Einsatzzweckes
Der Sinn und Zweck eines „null client“ ist es, lokal auf dem Server selbst erzeugte E-Mails, welche z.B. von einem Skript oder einer Web-Anwendung die auf dem Server läuft, entgegen zu nehmen und diese dann an den sich im internen Netzwerk zuständigen „main server“ weiter zu leiten. Das ist immer dann sinnvoll, wenn z.B. das Skript oder die Web-Anwendung auf temporäre E-Mail-Ablehnungen (Code: 4xx) durch den „main server“ nicht reagieren kann. So bleiben die E-Mails in der Queue des „null client“, bis der „main server“ wieder erreichbar ist!

:!: HINWEIS - In nachfolgender Konfiguration wird davon ausgegangen, dass der Internet-Domänenname tachtler.net lautet und dass der Server („null client“) client.idmz.tachtler.net heisst. In der nachfolgenden Konfiguration werden nur Parameter gesetzt, die nicht auf den jeweiligen Standardeinstellungen belassen werden können bzw. sollen.

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name 
$process_id & sleep 5

:!: ACHTUNG - Falls die Konfiguration nicht so minimal aussehen sollte, fehlen die Änderungen unter nachfolgenden internen Links:

inet_interfaces

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#inet_interfaces
Defaultwert
inet_interfaces = all
Neuer Wert Variante: original

inet_interfaces = loopback-only
Variante: minimal

inet_interfaces = loopback-only
Beschreibung Die Adressen der lokalen Netzwerkschnittstellen, über die dieses E-Mail-System E-Mails empfängt. Wenn all angegeben ist, werden E-Mails auf allen Netzwerkschnittstellen empfangen (Standard), loopback-only angegeben wird, werden E-Mails nur auf Loopback-Netzwerkschnittstellen empfangen (Postfix Version 2.2 und später), oder null oder mehr IPv4- oder IPv6-Adressen (IPv6 wird von Postfix Version 2.2 und später unterstützt).

Der Parameter steuert auch, ob Postfix E-Mails für [localpart]@[ip.address] annimmt, und verhindert ebenso, dass Postfix E-Mails an einen Host zustellt, der die gleiche oder eine höhere MX-Präferenz hat.

Ein leeren Wert bewirkt, das Postfix keine E-Mails über das Netzwerk empfängt, oder wenn alle Netzwerk-Listener eine explizite IP-Adresse in master.cf haben.

:!: WICHTIG - Durch das setzen auf einen loopback-only wird verhindert, dass eine E-Mail-Zustellung über das Netzwerk an den „null client“ erfolgt. Somit können nur lokal erstellte E-Mails an den Postfix abgegeben werden!

Fall der Standard all für den Parameter: inet_interfaces gesetzt ist, können mit nachfolgendem Befehl die IP-Adressen und die Ports aufgelistet werden, auf denen der Postfix-Server lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN   0      100      0.0.0.0:25         0.0.0.0:*     users:(("master",pid=1512,fd=13))
ino:11309 sk:1 cgroup:/system.slice/postfix.service <->
tcp   LISTEN   0      100      [::]:25            [::]:*     users:(("master",pid=1512,fd=14))
ino:11310 sk:6 cgroup:/system.slice/postfix.service v6only:1 <->

Fall der loopback-only für den Parameter: inet_interfaces gesetzt ist, können ebenfalls mit nachfolgendem Befehl die IP-Adressen und die Ports aufgelistet werden, auf denen der Postfix-Server jetzt lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN 0      100      127.0.0.1:25         0.0.0.0:*     users:(("master",pid=1390,fd=13))
ino:11438 sk:1001 cgroup:/system.slice/postfix.service <->
tcp   LISTEN 0      100       [::1]:25            [::]:*     users:(("master",pid=1390,fd=14))
ino:11439 sk:1002 cgroup:/system.slice/postfix.service v6only:1 <->

mydestination

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#mydestination
http://www.postfix.org/ADDRESS_CLASS_README.html
Defaultwert
mydestination = $myhostname, localhost.$mydomain, localhost
Neuer Wert Variante: original

mydestination = 
Variante: minimal

mydestination = 
Beschreibung Eine Liste von Domänen, die über den E-Mail-Transport Weg $local_transport zugestellt werden. Standardmässig ist dies der Postfix local Zustellungs Agent, der alle Empfänger in /etc/passwd und /etc/aliases nach schlägt. Der SMTP-Server überprüft die Empfängeradressen mit $local_recipient_maps und weist nicht existierende Empfänger ab. Siehe auch die Klasse local domain unter ADDRESS_CLASS_README.

Der Standardwert mydestination gibt nur Namen für den lokalen Rechner an. Bei einem Mail-Domain-Gateway sollten auch $mydomain hinzugefügt werden.

Die Zustellungsmethode $local_transport wird auch für E-Mails gewählt, die an user@[the.net.work.address] des E-Mail-Systems adressiert sind (die mit den Parametern inet_interfaces und proxy_interfaces angegebenen IP-Adressen).
Siehe auch Postfix ArchLinux - Konfiguration: null client - myhostname
Postfix ArchLinux - Konfiguration: null client - mydomain

:!: WICHTIG - Durch das setzen auf einen leeren Inhalt wird die lokale E-Mail-Zustellung durch Postfix komplett unterbunden.
:!: HINWEIS - Alle Mails gehen an den Postfix „main Server“, der im Parameter relayhost konfiguriert wird!

mydomain

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#mydomain
Defaultwert
mydomain = localdomain
Neuer Wert Variante: original

mydomain = tachtler.net
Variante: minimal

:!: Variable wird nicht konfiguriert :!:

Standardmässig wird $myhostname abzüglich der ersten Komponente oder localdomain (Postfix Version 2.3 und höher) verwendet.

Beschreibung Der Internet-Domänenname dieses E-Mail-Systems. Standardmässig wird $myhostname abzüglich der ersten Komponente oder localdomain (Postfix Version 2.3 und höher) verwendet. $mydomain wird als Standardwert für viele andere Konfigurationsparameter verwendet.
Siehe auch Postfix ArchLinux - Konfiguration: null client - myhostname
Postfix ArchLinux - Konfiguration: null client - myorigin
Postfix ArchLinux - Konfiguration: null client - relayhost

:!: WICHTIG - Wird von Postfix der Standardwert abzüglich der ersten Komponente oder localdomain für den Parameter: mydomain verwendet, kann dies bei E-Mail-Systemen die als „null client“ konfiguriert werden sollen sinnvoll sein, wenn auch noch eine SubDomain (Zone) beim Domänenteil berücksichtigt werden soll!

Variante: original:

Das Standardverhalten von Postfix wenn, mydomain konfiguriert wurde und myhostname auf dem „null client“ nicht gesetzt wurde:

Parameter Postfix ermittelt
mydomain = tachtler.net myhostname = client.tachtler.net

Variante: minimal:

Das Standardverhalten von Postfix wenn, mydomain nicht konfiguriert wurde und myhostname auf den FQDN client.idmz.tachtler.net des „null client“ gesetzt wurde:

Parameter Postfix ermittelt
myhostname = client.idmz.tachtler.net mydomain = idmz.tachtler.net

myhostname

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#myhostname
Defaultwert
myhostname = client.localdomain
Neuer Wert Variante: original

myhostname = client.idmz.$mydomain
Variante: minimal

myhostname = client.idmz.tachtler.net
Beschreibung Der Internet-Hostname dieses E-Mail-Systems. Standardmässig wird der voll qualifizierte Domänenname (FQDN) aus gethostname() verwendet, oder es wird das Nicht-FQDN-Ergebnis aus gethostname() verwendet und .$mydomain angehängt. $myhostname wird als Standardwert für viele andere Konfigurationsparameter verwendet.
Siehe auch Postfix ArchLinux - Konfiguration: null client - mydomain

Variante: original:

Das Standardverhalten von Postfix wenn, mydomain konfiguriert wurde und myhostname auf dem „null client“ nicht gesetzt wurde:

Parameter Postfix ermittelt
mydomain = tachtler.net myhostname = client.tachtler.net

Variante: minimal:

Das Standardverhalten von Postfix wenn, mydomain nicht konfiguriert wurde und myhostname auf den FQDN client.idmz.tachtler.net des „null client“ gesetzt wurde:

Parameter Postfix ermittelt
myhostname = client.idmz.tachtler.net mydomain = idmz.tachtler.net

Der von Postfix verwendete Standardwert für den Parameter: myhostname wird unter ArchLinux durch die Verwendung des Hostnamen aus der Konfigurationsdatei /etc/hostname ermittelt.

In der Konfigurationsdatei /etc/hostname ist der Hostnamen des Servers hinterlegt und kann wie folgt zur Anzeige gebracht werden:

# cat /etc/hostname
client

Aber auch nachfolgender Befehl, ermittelt den Hostnamen wie folgt:

# hostname
client

Falls die Domain bereits gesetzt ist z.B. in der Konfigurationsdatei /etc/resolv.conf oder /etc/systemd/resolved.conf, kann der FQDN mit nachfolgendem Befehl ermittelt werden:

# hostname -f
client.idmz.tachtler.net

:!: WICHTIG - Das setzen von myhostname und mydomain kann dann sinnvoll sein, wenn der Hostname (z.B. ohne Domänenteil) des Servers nicht dem Hostnamen entspricht und eine SubDomain (Zone) ebenfalls von Postfix verwendet werden soll!

myorigin

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#myorigin
Defaultwert
myorigin = $myhostname
Neuer Wert Variante: original

myorigin = $mydomain
Variante: minimal

:!: Variable wird nicht konfiguriert :!:

Der Standardwert ist $myhostname .

Beschreibung Der Domänenname, welcher an eine lokal erzeugte E-Mail - ohne Domänenteil - angehängt wird und wodurch diese E-Mail erst zustellbar wird. Der Standardwert $myhostname könnte für kleine E-Mail-Systeme ausreichend sein. Wenn eine Domäne mit mehreren Rechnern betrieben wird, sollte dies in $mydomain abgeändert werden und eine domänenweite Alias-Datenbank eingerichtet werden, die jedem Benutzer ein Alias für z.B. user@zone.domain.tld zuweist.
Siehe auch Postfix ArchLinux - Konfiguration: null client - mydomain
Postfix ArchLinux - Konfiguration: null client - myhostname

Variante: original:

Wird für den Parameter: myorigin eine Änderung auf $mydomain konfiguriert, so wird für jede lokal auf dem „null client“ erzeugte E-Mail (Absender/Empfänger/Antwort an) der Name des Benutzer (UID) verwendet und $myorigin falls erforderlich als Domänenteil angehängt.

Parameter Postfix ermittelt
myorigin = $mydomain myorigin = tachtler.net = root@tachtler.net

Variante: minimal:

Wird der Standardwert $myhostname für den Parameter: myorigin verwendet, wird für jede lokal auf dem „null client“ erzeugte E-Mail (Absender/Empfänger/Antwort an) der Name des Benutzer (UID) verwendet und $myhostname falls erforderlich als Domänenteil angehängt.

Parameter Postfix ermittelt
myorigin = $myhostname myorigin = client.idmz.tachtler.net = root@client.idmz.tachtler.net

:!: WICHTIG - Die Komponenten

  • Absender (ENVELOP From:)
  • Empfänger (ENVELOP To:)
  • Antwort an (ENVELOP: Reply to:)

der E-Mails werden wie folgt erstellt, in der

  • Variante original als [localpart]@tachtler.net

und in der

  • Variante minimal als [localpart]@client.idmz.tachtler.net

relayhost

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#relayhost
Defaultwert
relayhost = 
Neuer Wert Variante: original

relayhost = $mydomain
Variante: minimal

relayhost = tachtler.net
Beschreibung Der/die nächste(n) Zielort(e) für nicht-lokale E-Mails; hat Vorrang vor nicht-lokalen Domänen in Empfängeradressen. Diese Information wird nicht verwendet, wenn der Absender mit $sender_dependent_relayhost_maps übereinstimmt.

In einer internen Zone (z.B. idmz) kann der Dmänennamen der Organisation angegeben werden. Wenn das internes DNS keine MX-Einträge verwendet, kann stattdessen der Namen des „main server“ oder dessen IP-Adresse(n) angegeben werden.

Bei der SMTP-Zustellung sind ein oder mehrere Ziele in Form eines Domänennamens, Hostnamens, Hostname:Dienst, [Hostname]:Dienst, [Hostadresse] oder [Hostadresse]:Dienst anzugeben, getrennt durch Komma oder Leerzeichen.

Die Form [hostname] schaltet MX- oder SRV-Record-Abfragen aus.

Mehrere Ziele werden ab Postfix Version 3.5 unterstützt. Jedes Ziel wird in der angegebenen Reihenfolge ausprobiert.
Siehe auch Postfix ArchLinux - Konfiguration: null client - mydomain

:!: WICHTIG - Durch das setzen von einen relayhost auf

  • $mydomain - wird eine DNS MX-Record-Abfrage durchgeführt
  • tachtler.net - wird eine DNS MX-Record-Abfrage durchgeführt

Weitere Beispiele könnten wie folgt gesetzt werden:

  • server.idmz.tachtler.net:587, server.edmz.tachtler.net:587 - löst eine DNS MX-Record-Abfrage aus
  • [server.idmz.tachtler.net] - löst eine DNS A- oder AAAA-Record-Abfrage aus
  • [an.ip.add.ress] - verwendet ohne DNS direkt die angegebene IP-Adresse

:!: WICHTIG - Es wird für die lokale E-Mail-Zustellung durch Postfix eine Weiterleitung an den Postfix „main Server“ durchgeführt!

null client - Variante: original

:!: HINWEIS - In nachfolgender Konfiguration wird davon ausgegangen, dass der Internet-Domänenname tachtler.net lautet und dass der Server („null client“) client.idmz.tachtler.net heisst. In der nachfolgenden Konfiguration werden nur Parameter gesetzt, die nicht auf den jeweiligen Standardeinstellungen belassen werden können bzw. sollen.

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name
$process_id & sleep 5
inet_interfaces = loopback-only
mydestination =
mydomain = tachtler.net
myhostname = client.idmz.$mydomain
myorigin = $mydomain
relayhost = $mydomain

Jetzt muss der postfix-Server mit nachfolgendem Befehle am besten neu gestartet werden:

# systemctl restart postfix.service

Mit nachfolgendem Befehl kann der Status des Postfix-Servers abgefragt werden:

# systemctl status postfix.service 
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; preset:>
     Active: active (running) since Wed 2024-05-08 18:27:34 CEST; 15s ago
    Process: 1392 ExecStart=/usr/bin/postfix start (code=exited, status=0/SUCCE>
   Main PID: 1461 (master)
      Tasks: 3 (limit: 2316)
     Memory: 2.6M (peak: 3.8M)
        CPU: 258ms
     CGroup: /system.slice/postfix.service
             ├─1461 /usr/lib/postfix/bin/master -w
             ├─1462 pickup -l -t unix -u
             └─1463 qmgr -l -t unix -u

May 08 18:27:34 client systemd[1]: Starting Postfix Mail Transport Agent...
May 08 18:27:34 client postfix[1459]: postfix/postlog: starting the Postfix mai>
May 08 18:27:34 client postfix/postfix-script[1459]: starting the Postfix mail >
May 08 18:27:34 client postfix/master[1461]: daemon started -- version 3.9, con>
May 08 18:27:34 client systemd[1]: Started Postfix Mail Transport Agent

Nachfolgender Befehl listet die IP-Adressen und die Ports auf, auf denen der Postfix-Server lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN 0      100      127.0.0.1:25         0.0.0.0:*     users:(("master",pid=1461,fd=13))
ino:11633 sk:3 cgroup:/system.slice/postfix.service <->
tcp   LISTEN 0      100          [::1]:25            [::]:*     users:(("master",pid=1461,fd=14))
ino:11634 sk:b cgroup:/system.slice/postfix.service v6only:1 <->

Anschliessend kann mit einem kleinen Test herausgefunden werden, ob lokal erzeugte e-Mails auch lokal Zugestellt werden können, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet) durchgeführt werden soll:

# echo "Test E-Mail - Variante: original" | /usr/sbin/sendmail root

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Einträge im systemd-journald
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/spool/mail/klaus

Der Inhalte der Log-Einträge im systemd-journald sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# journalctl -eu postfix.service 

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

May 08 18:46:05 client postfix/pickup[1462]: A034488: uid=0 from=<root>
May 08 18:46:05 client postfix/cleanup[1619]: A034488: message-id=<20240508064605.A034488@client.idmz.tachtler.net>
May 08 18:46:05 client postfix/qmgr[1463]: A034488: from=<root@tachtler.net>, size=285, nrcpt=1 (queue active)
May 08 18:46:05 client postfix/smtp[1626]: connect to 10.0.0.1[10.0.0.1]:25: Connection refused
May 08 18:46:05 client postfix/smtp[1626]: A034488: to=<root@tachtler.net>, orig_to=<root>, relay=none, delay=0.03, delays=0.02/0.01/0/0, dsn=4.4.1, status=deferred (connect to 10.0.0.1[10.0.0.1]:25: Connection refused)
May 08 18:47:33 client postfix/pickup[1462]: E0B2988: uid=0 from=<root>
May 08 18:47:33 client postfix/cleanup[1619]: E0B2988: message-id=<20240508064733.E0B2988@client.idmz.tachtler.net>
May 08 08:47:33 client postfix/qmgr[1463]: E0B2988: from=<root@tachtler.net>, size=287, nrcpt=1 (queue active)
May 08 08:47:33 client postfix/smtp[1626]: E0B2988: to=<klaus@tachtler.net>, orig_to=<root>, relay=10.0.0.1[10.0.0.1]:25, delay=0.07, delays=0.01/0/0.04/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 981051003D8)
May 08 18:47:33 client postfix/qmgr[1463]: E0B2988: removed 

:!: WICHTIG - Die E-Mail liegt nicht auf dem „null client“, sondern auf dem unter relayhost definierten Ziel!

Auf dem „main server“ kann der Inhalt der im mbox-Format angelegten Datei /var/spool/mail/klaus angesehen werden und sollte ebenfalls eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# cat /var/spool/mail/klaus

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

# cat /var/spool/mail/klaus
From root@tachtler.net  Wed May  8 18:47:34 2024
Return-Path: <root@tachtler.net>
X-Original-To: root@tachtler.net
Delivered-To: root@tachtler.net
Received: from client.idmz.tachtler.net (client.idmz.tachtler.net  [10.0.0.60])
	by server.idmz.tachtler.net  (Postfix) with ESMTP id 981051003D8
	for <root@tachtler.net>; Wed, 08 May 2024 18:47:34 +0200 (CEST)
Received: by client.idmz.tachtler.net (Postfix, from userid 0)
	id E0B2988; Wed, 08 May 2024 18:47:33 +0200 (CEST)
Message-Id: <20240508064733.E0B2988@client.idmz.tachtler.net>
Date: Wed, 08 May 2024 18:47:33 +0200 (CEST)
From: root@tachtler.net

Test E-Mail - Variante: original
 
:!: WICHTIG - Nachfolgende E-Mail-Adressen wurden für den Benutzer root mit dem Domänenteil in der Variante: original dann ergänzt:
From root@tachtler.net
Return-Path: root@tachtler.net
X-Original-To: root@tachtler.net
Delivered-To: root@tachtler.net

:!: ACHTUNG - Falls gewünscht sein sollte, das bei der E-Mail-Adresse des Absenders, im Domänenteil der tatsächliche Server

  • client.idmz.tachtler.net = root@client.idmz.tachtler.net

erscheinen soll, ist die Konfiguration der Variante: minimal zu konfigurieren !!!

recipient_canonical_maps

:!: ACHTUNG :!:
Die nachfolgende Konfiguration des Parameters: recipient_canonical_maps auf dem „null client“ ist nur in der Variante: minimal zwingend erforderlich!
Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#recipient_canonical_maps
http://www.postfix.org/postconf.5.html#sender_canonical_maps
http://www.postfix.org/postconf.5.html#canonical_maps
Defaultwert
recipient_canonical_maps = 
Neuer Wert Variante: original

:!: Variable wird nicht konfiguriert :!:

Optionale Adress-Zuordnungstabellen für ENVELOP- und Header-Emppfänger-Adressen.

Variante: minimal

recipient_canonical_maps = lmdb:/etc/postfix/recipient_canonical_maps
Beschreibung Optionale Adress-Zuordnungstabellen für ENVELOP- und Header-Emppfänger-Adressen. Das Tabellenformat und die Nachschlagemöglichkeiten sind in canonical dokumentiert.

:!: HINWEIS - $recipient_canonical_maps wird vor $canonical_maps verarbeitet.
Siehe auch Postfix ArchLinux - Konfiguration: null client - /etc/postfix/recipient_canonical_maps

/etc/postfix/recipient_canonical_maps

:!: ACHTUNG :!:
Die nachfolgende Konfiguration der Konfigurationsdatei: /etc/postfix/recipient_canonical_maps auf dem „null client“ ist nur in der Variante: minimal zwingend erforderlich!

Mit nachfolgendem Befehl wird die Konfigurationsdatei /etc/postfix/recipient_canonical_maps angelegt und auch gleich mit nachfolgendem Inhalt konfiguriert:

# vim /etc/postfix/recipient_canonical_maps
# vim /etc/postfix/recipient_canonical_maps
@client.idmz.tachtler.net       @tachtler.net
@localhost.idmz.tachtler.net    @tachtler.net
@idmz.tachtler.net              @tachtler.net
@localhost                      @tachtler.net

:!: HINWEIS - In oben gezeigter Konfigurationsdatei wird jeweils nur der Domänenteil umgeschrieben!

Anschliessend ist sind die Änderungen noch in ein für Postfix besser lesbares Datenbankformat umzuwandeln, was erstmals mit nachfolgendem Befehl durchgeführt werden kann:

# postmap lmdb:/etc/postfix/recipient_canonical_maps

:!: HINWEIS - Es erfolgt keine Ausgabe, nach Befehlsausführung!

Abschliessend kann mit nachfolgendem Befehl überprüft werden, ob die Änderungen übernommen wurden:

# ls -l /etc/postfix/recipient_canonical_maps*
-rw-r--r-- 1 root root   184 May  8 19:28 /etc/postfix/recipient_canonical_maps
-rw-r--r-- 1 root root 12288 May  8 19:36 /etc/postfix/recipient_canonical_maps.lmdb

null client - Variante: minimal

:!: HINWEIS - In nachfolgender Konfiguration wird davon ausgegangen, dass der Internet-Domänenname tachtler.net lautet und dass der Server („null client“) client.idmz.tachtler.net heisst. In der nachfolgenden Konfiguration werden nur Parameter gesetzt, die nicht auf den jeweiligen Standardeinstellungen belassen werden können bzw. sollen.

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name
$process_id & sleep 5
inet_interfaces = loopback-only
mydestination =
myhostname = client.idmz.tachtler.net
recipient_canonical_maps = lmdb:/etc/postfix/recipient_canonical_maps
relayhost = tachtler.net

Jetzt muss der postfix-Server mit nachfolgendem Befehle am besten neu gestartet werden:

# systemctl restart postfix.service

Mit nachfolgendem Befehl kann der Status des Postfix-Servers abgefragt werden:

# systemctl status postfix.service 
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled; preset:>
     Active: active (running) since Wed 2024-05-08 19:41:35 CEST; 2s ago
    Process: 2493 ExecStart=/usr/bin/postfix start (code=exited, status=0/SUCCE>
   Main PID: 2561 (master)
      Tasks: 3 (limit: 2316)
     Memory: 2.6M (peak: 4.1M)
        CPU: 240ms
     CGroup: /system.slice/postfix.service
             ├─2561 /usr/lib/postfix/bin/master -w
             ├─2562 pickup -l -t unix -u
             └─2564 qmgr -l -t unix -u

May 08 19:41:35 client systemd[1]: Starting Postfix Mail Transport Agent...
May 08 19:41:35 client postfix[2559]: postfix/postlog: starting the Postfix mai>
May 08 19:41:35 client postfix/postfix-script[2559]: starting the Postfix mail >
May 08 19:41:35 client postfix/master[2561]: daemon started -- version 3.9, con>
May 08 19:41:35 client systemd[1]: Started Postfix Mail Transport Agent

Nachfolgender Befehl listet die IP-Adressen und die Ports auf, auf denen der Postfix-Server lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN 0      100      127.0.0.1:25         0.0.0.0:*     users:(("master",pid=2561,fd=13))
ino:21076 sk:c cgroup:/system.slice/postfix.service <->
tcp   LISTEN 0      100          [::1]:25            [::]:*     users:(("master",pid=2561,fd=14))
ino:21077 sk:d cgroup:/system.slice/postfix.service v6only:1 <->

Anschliessend kann mit einem kleinen Test herausgefunden werden, ob lokal erzeugte e-Mails auch lokal Zugestellt werden können, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet) durchgeführt werden soll:

# echo "Test E-Mail - Variante: minimal" | /usr/sbin/sendmail root

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Einträge im systemd-journald
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/spool/mail/klaus

Der Inhalte der Log-Einträge im systemd-journald sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# journalctl -eu postfix.service 

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

May 08 19:41:35 client postfix[2559]: postfix/postlog: starting the Postfix mail system
May 08 19:41:35 client postfix/postfix-script[2559]: starting the Postfix mail system
May 08 19:41:35 client postfix/master[2561]: daemon started -- version 3.9, configuration /etc/postfix
May 08 19:41:35 client systemd[1]: Started Postfix Mail Transport Agent.
May 08 19:47:12 client postfix/pickup[2562]: 5871D8E: uid=0 from=<root>
May 08 19:47:12 client postfix/cleanup[2656]: 5871D8E: message-id=<20240508114712.5871D8E@client.idmz.tachtler.net>
May 08 19:47:12 client postfix/qmgr[2564]: 5871D8E: from=<root@client.idmz.tachtler.net>, size=298, nrcpt=1 (queue active)
May 08 19:47:12 client postfix/smtp[2663]: 5871D8E: to=<root@tachtler.net>, orig_to=<root>, relay=10.0.0.1[10.0.0.1]:25, delay=0.08, delays=0.03/0.01/0.04/0.01, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 22B95100063)
May 08 19:47:12 client postfix/qmgr[2564]: 5871D8E: removed

:!: WICHTIG - Die E-Mail liegt nicht auf dem „null client“, sondern auf dem unter relayhost definierten Ziel!

Auf dem „main server“ kann der Inhalt der im mbox-Format angelegten Datei /var/spool/mail/klaus angesehen werden und sollte ebenfalls eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# cat /var/spool/mail/klaus

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

# cat /var/spool/mail/klaus
From root@client.idmz.tachtler.net  Wed May  8 19:47:13 2024
Return-Path: <root@client.idmz.tachtler.net>
X-Original-To: root@tachtler.net
Delivered-To: root@tachtler.net
Received: from client.idmz.tachtler.net (client.idmz.tachtler.net [10.0.0.60])
	by server.idmz.tachtler.net (Postfix) with ESMTP id 22B95100063
	for <root@tachtler.net>; Wed, 08 May 2024 19:47:13 +0200 (CEST)
Received: by client.idmz.tachtler.net (Postfix, from userid 0)
	id 5871D8E; Wed, 08 May 2024 19:47:12 +0200 (CEST)
Message-Id: <20240508114712.5871D8E@client.idmz.tachtler.net>
Date: Wed, 08 May 2024 19:47:12 +0200 (CEST)
From: root@client.idmz.tachtler.net

Test E-Mail - Variante: minimal
:!: WICHTIG - Nachfolgende E-Mail-Adressen wurden für den Benutzer root mit dem Domänenteil in der Variante: minimal dann ergänzt:
From root@client.idmz.tachtler.net
Return-Path: root@client.idmz.tachtler.net
X-Original-To: root@tachtler.net
Delivered-To: root@tachtler.net

:!: ACHTUNG - Falls gewünscht sein sollte, das bei der E-Mail-Adresse des Absenders, im Domänenteil nicht der tatsächliche Server

  • tachtler.net = root@tachtler.net

erscheinen soll, ist die Konfiguration der Variante: original zu konfigurieren !!!

Konfiguration: main server

Unter nachfolgendem externen Link, befindet sich die Definition für einen Postfix-Server, welcher als sogenannter „main server“ fungieren soll:

Definition laut einem Zusammenspiel der beiden Dokumentationen:
- Postfix Standard Configuration Examples - Postfix on a stand-alone Internet host
- Postfix Standard Configuration Examples - Postfix on a local network
Ein „main server“ ist ein Server, der in einer lokalen Netzwerkumgebung und in das Internet als Hauptserver an andere Systemen E-Mails senden und aus dem Internet von anderen Systemen E-Mails empfangen kann. Er ist so konfiguriert, dass er E-Mails unter dem Namen [localpart]@tachtler.net senden und empfangen kann.

:!: HINWEIS - In nachfolgender Konfiguration wird davon ausgegangen, dass der Internet-Domänenname tachtler.net lautet und dass der Server (main server)

  • intern - server.idmz.tachtler.net und
  • extern - mx1.tachtler.net

heisst. In der nachfolgenden Konfiguration werden nur Parameter gesetzt, die nicht auf den jeweiligen Standardeinstellungen belassen werden können bzw. sollen.

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name 
$process_id & sleep 5

:!: ACHTUNG - Falls die Konfiguration nicht so minimal aussehen sollte, fehlen die Änderungen unter nachfolgenden internen Links:

mydestination

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#mydestination
http://www.postfix.org/ADDRESS_CLASS_README.html
http://www.postfix.org/VIRTUAL_README.html
Defaultwert
mydestination = $myhostname, localhost.$mydomain, localhost
Neuer Wert
mydestination = $myhostname, localhost.$mydomain, localhost, server.idmz.$mydomain
Temporär
mydestination = $myhostname, localhost.$mydomain, localhost, server.idmz.$mydomain,
                $mydomain
Beschreibung Eine Liste von Domänen, die über den E-Mail-Transport Weg $local_transport zugestellt werden. Standardmässig ist dies der Postfix local Zustellungs Agent, der alle Empfänger in /etc/passwd und /etc/aliases nach schlägt. Der SMTP-Server überprüft die Empfängeradressen mit $local_recipient_maps und weist nicht existierende Empfänger ab. Siehe auch die Klasse local domain unter ADDRESS_CLASS_README.

Der Standardwert mydestination gibt nur Namen für den lokalen Rechner an. Bei einem Mail-Domain-Gateway sollten auch $mydomain hinzugefügt werden.

Die Zustellungsmethode $local_transport wird auch für E-Mails gewählt, die an user@[the.net.work.address] des E-Mail-Systems adressiert sind (die mit den Parametern inet_interfaces und proxy_interfaces angegebenen IP-Adressen).
Siehe auch Postfix ArchLinux - Konfiguration: main server - myhostname
Postfix ArchLinux - Konfiguration: main server - myorigin

:!: HINWEIS - Die Variable $mydomain wird hier NUR temporär mit aufgenommen!

:!: HINWEIS - Der Inhalt von $mydomain ist später Bestandteil von einem virtuellen Domain Hosting !

Ein virtuelles Domain Hosting ist immer dann erforderlich, wenn auch E-Mails für Empfänger angenommen werden sollen, welche kein lokales Benutzerkonto auf dem Server besitzen - sprich es keinen lokalen Benutzer direkt auf dem Server gibt!

myhostname

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#myhostname
Defaultwert
myhostname = server.localdomain
Neuer Wert
myhostname = mx1.tachtler.net
Beschreibung Der Internet-Hostname dieses E-Mail-Systems. Standardmässig wird der voll qualifizierte Domänenname (FQDN) aus gethostname() verwendet, oder es wird das Nicht-FQDN-Ergebnis aus gethostname() verwendet und .$mydomain angehängt. $myhostname wird als Standardwert für viele andere Konfigurationsparameter verwendet.
Siehe auch Postfix ArchLinux - Konfiguration: main server - myorigin

Das Standardverhalten von Postfix wenn, mydomain nicht konfiguriert wurde und myhostname auf den FQDN mx1.tachtler.net des „main server“ gesetzt wurde:

Parameter Postfix ermittelt
myhostname = mx1.tachtler.net mydomain = tachtler.net

Das Standardverhalten von Postfix wenn, mydomain konfiguriert wurde und myhostname auf dem „main server“ nicht gesetzt wurde:

Parameter Postfix ermittelt
mydomain = tachtler.net myhostname = server.tachtler.net

Der von Postfix verwendete Standardwert für den Parameter: myhostname wird unter ArchLinux durch die Verwendung des Hostnamen aus der Konfigurationsdatei /etc/hostname ermittelt.

In der Konfigurationsdatei /etc/hostname ist der Hostnamen des Servers hinterlegt und kann wie folgt zur Anzeige gebracht werden:

# cat /etc/hostname
server

Aber auch nachfolgender Befehl, ermittelt den Hostnamen wie folgt:

# hostname
server

Falls die Domain bereits gesetzt ist z.B. in der Konfigurationsdatei /etc/resolv.conf oder /etc/systemd/resolved.conf, kann der FQDN mit nachfolgendem Befehl ermittelt werden:

# hostname -f
server.idmz.tachtler.net

:!: WICHTIG - Das setzen von myhostname und mydomain kann dann sinnvoll sein, wenn der Hostname (z.B. ohne Domänenteil) des Servers nicht dem Hostnamen entspricht und eine SubDomain (Zone) ebenfalls von Postfix verwendet werden soll!

mynetworks

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#mynetworks
http://www.postfix.org/postconf.5.html#mynetworks_style
http://www.postfix.org/postconf.5.html#smtpd_relay_restrictions
Defaultwert
mynetworks = 127.0.0.0/8 10.0.0.0/24 [::1]/128 [fd00:0:0:10::]/64 [fe80:0:0:10::]/64
Neuer Wert
mynetworks = 127.0.0.0/32 10.0.0.0/24 192.168.0.0/24
             [::1]/128 [fd00:0:0:10::]/64 [fe80:0:0:10::]/64 [fd00:0:0:192::]/64
Beschreibung Liste der „vertrauenswürdigen“ entfernten SMTP-Clients. Insbesondere dürfen „vertrauenswürdige“ SMTP-Clients E-Mails über Postfix weiterleiten.

Es kann eine Liste der „vertrauenswürdigen“ Netzwerkadressen manuell erstellt werden oder Postfix kann dies selbst ermitteln (was die Standardeinstellung ist). Die automatische Ermittlung betrifft nur Netzwerke, in denen der Postfix-Server selbst eine Netzwerkadresse besitzt.

Wenn die Liste manuell erstellt wurde, ignoriert Postfix die Einstellung im Parameter mynetworks_style.

Die Liste wird von links nach rechts abgeglichen, und die Suche endet beim ersten Treffer!

:!: HINWEIS - Dies betrifft nur Weiterleitungen

  • von SMTP-Clients,
  • an Ziele,

für die sich der Postfix „main server“ nicht selbst zuständig fühlt!

myorigin

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#myorigin
Defaultwert
myorigin = $myhostname
Neuer Wert
myorigin = server.idmz.$mydomain
Beschreibung Der Domänenname, welcher an eine lokal erzeugte E-Mail - ohne Domänenteil - angehängt wird und wodurch diese E-Mail erst zustellbar wird. Der Standardwert $myhostname könnte für kleine E-Mail-Systeme ausreichend sein. Wenn eine Domäne mit mehreren Rechnern betrieben wird, sollte dies in $mydomain abgeändert werden und eine domänenweite Alias-Datenbank eingerichtet werden, die jedem Benutzer ein Alias für z.B. user@zone.domain.tld zuweist.
Siehe auch Postfix ArchLinux - Konfiguration: main server - mydestination
Postfix ArchLinux - Konfiguration: main server - myhostname

Wird für den Parameter: myorigin eine Änderung auf $mydomain konfiguriert, so wird für jede lokal auf dem „main server“ erzeugte E-Mail (Absender/Empfänger/Antwort an) der Name des Benutzer (UID) verwendet und $myorigin falls erforderlich als Domänenteil angehängt.

Parameter Postfix ermittelt
myorigin = server.idmz.$mydomain myorigin = server.idmz.tachtler.net = root@server.idmz.tachtler.net

:!: WICHTIG - Die Komponenten

  • Absender (ENVELOP From:)
  • Empfänger (ENVELOP To:)
  • Antwort an (ENVELOP: Reply to:)

der E-Mails werden dann wie folgt erstellt

  • [localpart]@tachtler.net

proxy_interfaces

Information Beschreibung
Dokumentation https://www.postfix.org/postconf.5.html#proxy_interfaces
http://www.postfix.org/BASIC_CONFIGURATION_README.html#proxy_interfaces
Defaultwert
proxy_interfaces =
Neuer Wert
proxy_interfaces = 88.217.171.167
Beschreibung Die Adressen der entfernten Netzwerkschnittstellen, über die dieses E-Mail-System E-Mails mit Hilfe eines Proxys oder einer Network Address Translation (NAT) empfängt.

Es muss/müssen zwingend die „externen“ Proxy-/NAT-Adresse(n) angeben werden, wenn das E-Mail-System als Backup-MX-Host für andere Domänen fungiert, da es sonst zu E-Mail-Zustellungs-Schleifen kommt („loops back to myself“), wenn der primäre MX-Host ausgefallen ist.

:!: HINWEIS - Es ist/sind die offizielle(n) IP-Adresse(n) anzugeben!

recipient_canonical_maps

:!: ACHTUNG :!:
Die nachfolgende Konfiguration der Konfigurationsdatei: /etc/postfix/recipient_canonical_maps auf dem „main server“ ist zwingend erforderlich, damit auch lokal erzeugte E-Mails entsprechend behandelt werden können!
Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#recipient_canonical_maps
http://www.postfix.org/postconf.5.html#sender_canonical_maps
http://www.postfix.org/postconf.5.html#canonical_maps
Defaultwert
recipient_canonical_maps = 
Neuer Wert
recipient_canonical_maps = lmdb:/etc/postfix/recipient_canonical_maps
Beschreibung Optionale Adress-Zuordnungstabellen für ENVELOP- und Header-Emppfänger-Adressen. Das Tabellenformat und die Nachschlagemöglichkeiten sind in canonical dokumentiert.

:!: HINWEIS - $recipient_canonical_maps wird vor $canonical_maps verarbeitet.
Siehe auch Postfix ArchLinux - Konfiguration: main server - /etc/postfix/recipient_canonical_maps

/etc/postfix/recipient_canonical_maps

:!: ACHTUNG :!:
Die nachfolgende Konfiguration der Konfigurationsdatei: /etc/postfix/recipient_canonical_maps auf dem „main server“ ist zwingend erforderlich, damit auch lokal erzeugte E-Mails entsprechend behandelt werden können!

Mit nachfolgendem Befehl wird die Konfigurationsdatei /etc/postfix/recipient_canonical_maps angelegt und auch gleich mit nachfolgendem Inhalt konfiguriert:

# vim /etc/postfix/recipient_canonical_maps
# vim /etc/postfix/recipient_canonical_maps
@server.idmz.tachtler.net       @tachtler.net
@localhost.idmz.tachtler.net    @tachtler.net
@idmz.tachtler.net              @tachtler.net
@localhost                      @tachtler.net
@mx1.tachtler.net               @tachtler.net

:!: HINWEIS - In oben gezeigter Konfigurationsdatei wird jeweils nur der Domänenteil umgeschrieben!

Anschliessend ist sind die Änderungen noch in ein für Postfix besser lesbares Datenbankformat umzuwandeln, was erstmals mit nachfolgendem Befehl durchgeführt werden kann:

# postmap lmdb:/etc/postfix/recipient_canonical_maps

:!: HINWEIS - Es erfolgt keine Ausgabe, nach Befehlsausführung!

Abschliessend kann mit nachfolgendem Befehl überprüft werden, ob die Änderungen übernommen wurden:

# ls -l /etc/postfix/recipient_canonical_maps*
-rw-r--r-- 1 root root   202 Jun  5 17:55 /etc/postfix/recipient_canonical_maps
-rw-r--r-- 1 root root 12288 Jun  5 17:55 /etc/postfix/recipient_canonical_maps.lmdb

main server

:!: HINWEIS - In nachfolgender Konfiguration wird davon ausgegangen, dass der Internet-Domänenname tachtler.net lautet und dass der Server („main server“) server.idmz.tachtler.net heisst. In der nachfolgenden Konfiguration werden nur Parameter gesetzt, die nicht auf den jeweiligen Standardeinstellungen belassen werden können bzw. sollen.

Die Hauptkonfigurationsdatei von Postfix ist die Konfigurationsdatei

  • /etc/postfix/main.cf.

Der Inhalt der Konfigurationsdatei, sollte nur beim Editieren der Konfigurationsdatei relevant sein. Falls der Inhalt aufgelistet werden soll, sind nachfolgende Befehl anzuwenden, da diese die Konfiguration so wiedergeben, wie diese auch von Postfix interpretiert wird.

Nachfolgende Befehle sollten zum Einsatz kommen:

  • postconf -d - Listet die default (Standard) Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration auf
  • postconf - Listet alle aktuellen - inklusive der Standard - konfigurierten Werte der Postfix-Konfiguration auf

Nach dem Ausführen der Befehls

  • postconf -n

sollte eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen:

# postconf -n
alias_database = $alias_maps
alias_maps = lmdb:/etc/postfix/aliases
compatibility_level = 3.9
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name
$process_id & sleep 5
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, server.idmz.$mydomain
myhostname = mx1.tachtler.net
mynetworks = 127.0.0.0/32 10.0.0.0/24 192.168.0.0/24 [::1]/128 [fd00:0:0:10::]/64 [fe80:0:0:10::]/64
[fd00:0:0:192::]/64
myorigin = server.idmz.$mydomain
proxy_interfaces = 88.217.171.167
recipient_canonical_maps = lmdb:/etc/postfix/recipient_canonical_maps

Jetzt muss der postfix-Server mit nachfolgendem Befehle am besten neu gestartet werden:

# systemctl restart postfix.service

Mit nachfolgendem Befehl kann der Status des Postfix-Servers abgefragt werden:

# systemctl status postfix.service 
● postfix.service - Postfix Mail Transport Agent
     Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; preset: >
     Active: active (running) since Wed 2024-06-05 12:44:09 CEST; 6s ago
    Process: 3473 ExecStart=/usr/bin/postfix start (code=exited, status=0/SUCCE>
   Main PID: 3541 (master)
      Tasks: 3 (limit: 2316)
     Memory: 2.6M (peak: 3.9M)
        CPU: 264ms
     CGroup: /system.slice/postfix.service
             ├─3541 /usr/lib/postfix/bin/master -w
             ├─3542 pickup -l -t unix -u
             └─3543 qmgr -l -t unix -u

Jun 05 18:44:08 server systemd[1]: Starting Postfix Mail Transport Agent...
Jun 05 18:44:09 server postfix[3539]: postfix/postlog: starting the Postfix mai>
Jun 05 18:44:09 server postfix/postfix-script[3539]: starting the Postfix mail >
Jun 05 18:44:09 server postfix/master[3541]: daemon started -- version 3.9, con>
Jun 05 18:44:09 server systemd[1]: Started Postfix Mail Transport Agent.

Nachfolgender Befehl listet die IP-Adressen und die Ports auf, auf denen der Postfix-Server lauscht:

# ss -taubenp | grep postfix
tcp   LISTEN 0      100      0.0.0.0:25           0.0.0.0:*     users:(("master",pid=3541,fd=13))
ino:23153 sk:3 cgroup:/system.slice/postfix.service <->
tcp   LISTEN 0      100         [::]:25              [::]:*     users:(("master",pid=3541,fd=14))
ino:23154 sk:9 cgroup:/system.slice/postfix.service v6only:1 <->

Anschliessend kann mit einem kleinen Test herausgefunden werden, ob lokal erzeugte e-Mails auch lokal Zugestellt werden können, was ausnahmsweise mit nachfolgendem Befehl (und nicht mit telnet) durchgeführt werden soll:

# echo "Test E-Mail - Variante: main server" | /usr/sbin/sendmail root

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Einträge im systemd-journald
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/spool/mail/klaus

Der Inhalte der Log-Einträge im systemd-journald sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# journalctl -eu postfix.service 

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

Jun 05 18:44:09 server postfix[3539]: postfix/postlog: starting the Postfix mail system
Jun 05 18:44:09 server postfix/postfix-script[3539]: starting the Postfix mail system
Jun 05 18:44:09 server postfix/master[3541]: daemon started -- version 3.9, configuration /etc/postfix
Jun 05 18:44:09 server systemd[1]: Started Postfix Mail Transport Agent.
Jun 05 18:49:06 server postfix/pickup[3542]: 72663180089: uid=0 from=<root>
Jun 05 18:49:06 server postfix/cleanup[3589]: 72663180089: message-id=<20240605104906.72663180089@mx1.tachtler.net>
Jun 05 18:49:06 server postfix/qmgr[3543]: 72663180089: from=<root@server.idmz.tachtler.net>, size=294, nrcpt=1 (queue active)
Jun 05 18:49:06 server postfix/local[3596]: 72663180089: to=<klaus@server.idmz.tachtler.net>, orig_to=<root>, relay=local, delay=0.04, delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 05 18:49:06 server postfix/qmgr[3543]: 72663180089: removed

:!: WICHTIG - Die E-Mail liegt auf dem „main server“!

Auf dem „main server“ kann der Inhalt der im mbox-Format angelegten Datei /var/spool/mail/klaus angesehen werden und sollte ebenfalls eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# cat /var/spool/mail/klaus

wonach eine Ausgabe, in etwa wie die nachfolgend gezeigte erscheinen sollte:

# cat /var/spool/mail/klaus
From root@server.idmz.tachtler.net  Wed Jun  5 18:49:06 2024
Return-Path: <root@server.idmz.tachtler.net>
X-Original-To: root
Delivered-To: root@tachtler.net
Received: by mx1.tachtler.net (Postfix, from userid 0)
	id 72663180089; Wed, 05 Jun 2024 18:49:06 +0200 (CEST)
Message-Id: <20240605104906.72663180089@mx1.tachtler.net>
Date: Wed, 05 Jun 2024 18:49:06 +0200 (CEST)
From: root@server.idmz.tachtler.net

Test E-Mail - Variante: main server
:!: WICHTIG - Nachfolgende E-Mail-Adressen wurden für den Benutzer root mit dem Domänenteil dann ergänzt bei der Zustellung an den „main server“:
From root@server.idmz.tachtler.net
Return-Path: root@server.idmz.tachtler.net
X-Original-To: root
Delivered-To: root@tachtler.net

:!: FIXME - Hier geht es weiter … / To be continued …

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/postfix_archlinux.txt · Zuletzt geändert: 2024/06/05 21:25 von klaus