Inhaltsverzeichnis
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.
Beschreibung | Externer Link |
---|---|
Homepage | http://www.postfix.org |
Dokumentation | http://www.postfix.org/documentation.html |
Ankündigungen | http://www.postfix.org/announcements.html |
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:
Mit nachfolgendem Befehl, wird das Pakete postfix
installiert:
# pacman -S --noconfirm postfix
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
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 definiertund 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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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
- Verhinderung des Zugriffs durch andere Programme z.B. (Local Delivery agents) wie z.B.
procmail
- Verhinderung von Ausführung von Schadcode als Benutzer
root
Standardmässig verwendet Postfix die Konfigurationsdatei
/etc/postfix/aliases
unter ArchLinux
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:
- Die Log-Einträge im
systemd-journald
- 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:
- null client - Postfix ArchLinux - Konfiguration: null client
oder
- main server - Postfix ArchLinux - Konfiguration: main server
weiter verfolgen, aber nicht beide Konfigurationsvarianten auf dem selben Server !!!
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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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ührttachtler.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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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:
- Die Log-Einträge im
systemd-journald
- 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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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:
- Die Log-Einträge im
systemd-journald
- 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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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 !
- Siehe dazu auch den nachfolgenden externen Link: Postfix Virtual Domain Hosting Howto
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 aufpostconf -n
- Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend konfigurierten Werte der Postfix-Konfiguration aufpostconf
- 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:
- Die Log-Einträge im
systemd-journald
- 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 |
- Hier geht es weiter … / To be continued …