Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix_centos_7

Inhaltsverzeichnis

Postfix CentOS 7

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) sollten Sie im Besitz einer festen IP-Adresse sein !!!

:!: WICHTIG - Bei CentOS ab der Version 7.x ist Postfix in der Version 2.10.1 enthalten, was die Nutzung einiger Möglichkeiten neuerer Postfix Versionen verhindert. Deshalb soll Postfix aus nachfolgendem Drittanbieter-Repository installiert werden!

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:

Herunterladen

Nachfolgend soll ein Drittanbieter-Repository, welches von dem mir sehr geschätzten Michael Nausch betrieben wird und eine sichere und verlässliche Quelle für rpm-Pakete darstellt, wie unter nachfolgendem internen Link dargestellt, eingebunden werden:

Deinstallation

Bevor mit der eigentlichen Deinstallation des postfix-Pakets begonnen werden kann, sollte Postfix mit nachfolgendem Befehl gestoppt werden:

# systemctl stop postfix

Dienst/Deamon-Stopp durchführen

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

# systemctl disable postfix.service
rm '/etc/systemd/system/multi-user.target.wants/postfix.service'

Eine Überprüfung, ob beim Neustart des Server der dovecot-Dienst/Deamon wirklich nicht mehr 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
postfix.service                        disabled

bzw.

# systemctl is-enabled postfix.service
disabled

Paket postfix entfernen

Nachdem das Drittanbieter-Repository

erfolgreich eingebunden wurde, kann mit nachfolgenden Befehlen, das alte rpm-Paket - postfix deinstalliert werden:

# yum remove postfix
Loaded plugins: changelog, priorities
Resolving Dependencies
--> Running transaction check
---> Package postfix.x86_64 2:2.10.1-6.el7 will be erased
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package         Arch           Version                 Repository         Size
================================================================================
Removing:
 postfix         x86_64         2:2.10.1-6.el7          @anaconda          12 M

Transaction Summary
================================================================================
Remove  1 Package

Installed size: 12 M
Is this ok [y/N]: y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Erasing    : 2:postfix-2.10.1-6.el7.x86_64                                1/1 
warning: directory /var/spool/postfix: remove failed: Device or resource busy
  Verifying  : 2:postfix-2.10.1-6.el7.x86_64                                1/1 

Removed:
  postfix.x86_64 2:2.10.1-6.el7                                                 

Complete!

:!: HINWEIS - Nachfolgende Warnung

warning: directory /var/spool/postfix: remove failed: Device or resource busy

da sich es bei diesem Verzeichnis um eine eigene Partition, bzw. Mount-Point und diese in Benutzung ist, handelt!

Installation

Nachfolgender interne Link beschreibt die Installation von Postfix unter Verwendung des internen Links zur Einbindung des mailserver.guru - CentOS 7-Repositories:

Paket postfix installieren

Nach erfolgreicher Einbindung des Drittanbieter-Repository

sind nachfolgende Anpassungen in den Konfigurationsdateien

  • /etc/yum.repos.d/CentOS-Base.repo

noch erforderlich, um die Installation des Postfix aus dem mailserver.guru-Repository durchführen zu können.

/etc/yum.repos.d/CentOS-Base.repo

(Nur relevanter Ausschnitt)

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
priority=1
exclude=postfix,postfix-*,dovecot

Erklärungen zur Anpassung:

  • exclude=postfix,postfix-*

Herausnehmen des Pakets postfix und alle damit Verbundenen Pakete aus dem CentOS-Base-Repository.

Nachdem das Drittanbieter-Repository

erfolgreich eingebunden und konfiguriert wurde, kann mit nachfolgendem Befehl, das neuere rpm-Paket - postfix installiert werden:

# yum install postfix
Loaded plugins: changelog, priorities
128 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package postfix.x86_64 2:2.11.5-1.el7.centos will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package     Arch       Version                    Repository              Size
================================================================================
Installing:
 postfix     x86_64     2:2.11.5-1.el7.centos      mailserver.guru-os     2.5 M

Transaction Summary
================================================================================
Install  1 Package

Total download size: 2.5 M
Installed size: 12 M
Is this ok [y/d/N]: y
Downloading packages:
postfix-2.11.5-1.el7.centos.x86_64.rpm                     | 2.5 MB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 2:postfix-2.11.5-1.el7.centos.x86_64                         1/1 
  Verifying  : 2:postfix-2.11.5-1.el7.centos.x86_64                         1/1 

Installed:
  postfix.x86_64 2:2.11.5-1.el7.centos                                          

Complete!

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

# rpm -qil postfix
Name        : postfix
Epoch       : 2
Version     : 2.11.5
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Tue 14 Jul 2015 09:18:27 AM CEST
Group       : System Environment/Daemons
Size        : 13030777
License     : IBM and GPLv2+
Signature   : RSA/SHA1, Tue 05 May 2015 01:51:43 PM CEST, Key ID 60ecfb9e8195aea0
Source RPM  : postfix-2.11.5-1.el7.centos.src.rpm
Build Date  : Tue 05 May 2015 01:51:19 PM CEST
Build Host  : vml000200.dmz.nausch.org
Relocations : (not relocatable)
Packager    : Django <django@mailserver.guru>
Vendor      : Django
URL         : http://www.postfix.org
Summary     : Postfix Mail Transport Agent
Description :
Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH (SASL),
TLS
/etc/pam.d/smtp
/etc/pam.d/smtp.postfix
/etc/postfix
/etc/postfix/access
/etc/postfix/canonical
/etc/postfix/generic
/etc/postfix/header_checks
/etc/postfix/main.cf
/etc/postfix/master.cf
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual
/etc/sasl2/smtpd.conf
/usr/bin/mailq
/usr/bin/mailq.postfix
/usr/bin/newaliases
/usr/bin/newaliases.postfix
/usr/bin/rmail
/usr/bin/rmail.postfix
/usr/lib/sendmail
/usr/lib/sendmail.postfix
/usr/lib/systemd/system/postfix.service
/usr/libexec/postfix
/usr/libexec/postfix/aliasesdb
/usr/libexec/postfix/anvil
/usr/libexec/postfix/bounce
/usr/libexec/postfix/chroot-update
/usr/libexec/postfix/cleanup
/usr/libexec/postfix/discard
/usr/libexec/postfix/dnsblog
/usr/libexec/postfix/error
/usr/libexec/postfix/flush
/usr/libexec/postfix/lmtp
/usr/libexec/postfix/local
/usr/libexec/postfix/main.cf
/usr/libexec/postfix/master
/usr/libexec/postfix/master.cf
/usr/libexec/postfix/nqmgr
/usr/libexec/postfix/oqmgr
/usr/libexec/postfix/pickup
/usr/libexec/postfix/pipe
/usr/libexec/postfix/post-install
/usr/libexec/postfix/postfix-files
/usr/libexec/postfix/postfix-script
/usr/libexec/postfix/postfix-wrapper
/usr/libexec/postfix/postmulti-script
/usr/libexec/postfix/postscreen
/usr/libexec/postfix/proxymap
/usr/libexec/postfix/qmgr
/usr/libexec/postfix/qmqpd
/usr/libexec/postfix/scache
/usr/libexec/postfix/showq
/usr/libexec/postfix/smtp
/usr/libexec/postfix/smtpd
/usr/libexec/postfix/spawn
/usr/libexec/postfix/tlsmgr
/usr/libexec/postfix/tlsproxy
/usr/libexec/postfix/trivial-rewrite
/usr/libexec/postfix/verify
/usr/libexec/postfix/virtual
/usr/sbin/postalias
/usr/sbin/postcat
/usr/sbin/postconf
/usr/sbin/postdrop
/usr/sbin/postfix
/usr/sbin/postkick
/usr/sbin/postlock
/usr/sbin/postlog
/usr/sbin/postmap
/usr/sbin/postmulti
/usr/sbin/postqueue
/usr/sbin/postsuper
/usr/sbin/sendmail
/usr/sbin/sendmail.postfix
/usr/sbin/smtp-sink
/usr/sbin/smtp-source
/usr/share/doc/postfix-2.11.5
/usr/share/doc/postfix-2.11.5/COMPATIBILITY
/usr/share/doc/postfix-2.11.5/LICENSE
/usr/share/doc/postfix-2.11.5/README-Postfix-SASL-RedHat.txt
/usr/share/doc/postfix-2.11.5/README_FILES
/usr/share/doc/postfix-2.11.5/README_FILES/AAAREADME
/usr/share/doc/postfix-2.11.5/README_FILES/ADDRESS_CLASS_README
/usr/share/doc/postfix-2.11.5/README_FILES/ADDRESS_REWRITING_README
/usr/share/doc/postfix-2.11.5/README_FILES/ADDRESS_VERIFICATION_README
/usr/share/doc/postfix-2.11.5/README_FILES/BACKSCATTER_README
/usr/share/doc/postfix-2.11.5/README_FILES/BASIC_CONFIGURATION_README
/usr/share/doc/postfix-2.11.5/README_FILES/BUILTIN_FILTER_README
/usr/share/doc/postfix-2.11.5/README_FILES/CDB_README
/usr/share/doc/postfix-2.11.5/README_FILES/CONNECTION_CACHE_README
/usr/share/doc/postfix-2.11.5/README_FILES/CONTENT_INSPECTION_README
/usr/share/doc/postfix-2.11.5/README_FILES/DATABASE_README
/usr/share/doc/postfix-2.11.5/README_FILES/DB_README
/usr/share/doc/postfix-2.11.5/README_FILES/DEBUG_README
/usr/share/doc/postfix-2.11.5/README_FILES/DSN_README
/usr/share/doc/postfix-2.11.5/README_FILES/ETRN_README
/usr/share/doc/postfix-2.11.5/README_FILES/FILTER_README
/usr/share/doc/postfix-2.11.5/README_FILES/FORWARD_SECRECY_README
/usr/share/doc/postfix-2.11.5/README_FILES/INSTALL
/usr/share/doc/postfix-2.11.5/README_FILES/IPV6_README
/usr/share/doc/postfix-2.11.5/README_FILES/LDAP_README
/usr/share/doc/postfix-2.11.5/README_FILES/LINUX_README
/usr/share/doc/postfix-2.11.5/README_FILES/LMDB_README
/usr/share/doc/postfix-2.11.5/README_FILES/LOCAL_RECIPIENT_README
/usr/share/doc/postfix-2.11.5/README_FILES/MAILDROP_README
/usr/share/doc/postfix-2.11.5/README_FILES/MEMCACHE_README
/usr/share/doc/postfix-2.11.5/README_FILES/MILTER_README
/usr/share/doc/postfix-2.11.5/README_FILES/MULTI_INSTANCE_README
/usr/share/doc/postfix-2.11.5/README_FILES/MYSQL_README
/usr/share/doc/postfix-2.11.5/README_FILES/NFS_README
/usr/share/doc/postfix-2.11.5/README_FILES/OVERVIEW
/usr/share/doc/postfix-2.11.5/README_FILES/PACKAGE_README
/usr/share/doc/postfix-2.11.5/README_FILES/PCRE_README
/usr/share/doc/postfix-2.11.5/README_FILES/PGSQL_README
/usr/share/doc/postfix-2.11.5/README_FILES/POSTSCREEN_README
/usr/share/doc/postfix-2.11.5/README_FILES/QSHAPE_README
/usr/share/doc/postfix-2.11.5/README_FILES/RELEASE_NOTES
/usr/share/doc/postfix-2.11.5/README_FILES/RESTRICTION_CLASS_README
/usr/share/doc/postfix-2.11.5/README_FILES/SASL_README
/usr/share/doc/postfix-2.11.5/README_FILES/SCHEDULER_README
/usr/share/doc/postfix-2.11.5/README_FILES/SMTPD_ACCESS_README
/usr/share/doc/postfix-2.11.5/README_FILES/SMTPD_POLICY_README
/usr/share/doc/postfix-2.11.5/README_FILES/SMTPD_PROXY_README
/usr/share/doc/postfix-2.11.5/README_FILES/SOHO_README
/usr/share/doc/postfix-2.11.5/README_FILES/SQLITE_README
/usr/share/doc/postfix-2.11.5/README_FILES/STANDARD_CONFIGURATION_README
/usr/share/doc/postfix-2.11.5/README_FILES/STRESS_README
/usr/share/doc/postfix-2.11.5/README_FILES/TLS_LEGACY_README
/usr/share/doc/postfix-2.11.5/README_FILES/TLS_README
/usr/share/doc/postfix-2.11.5/README_FILES/TUNING_README
/usr/share/doc/postfix-2.11.5/README_FILES/ULTRIX_README
/usr/share/doc/postfix-2.11.5/README_FILES/UUCP_README
/usr/share/doc/postfix-2.11.5/README_FILES/VERP_README
/usr/share/doc/postfix-2.11.5/README_FILES/VIRTUAL_README
/usr/share/doc/postfix-2.11.5/README_FILES/XCLIENT_README
/usr/share/doc/postfix-2.11.5/README_FILES/XFORWARD_README
/usr/share/doc/postfix-2.11.5/TLS_ACKNOWLEDGEMENTS
/usr/share/doc/postfix-2.11.5/TLS_LICENSE
/usr/share/doc/postfix-2.11.5/bounce.cf.default
/usr/share/doc/postfix-2.11.5/examples
/usr/share/doc/postfix-2.11.5/examples/chroot-setup
/usr/share/doc/postfix-2.11.5/examples/chroot-setup/LINUX2
/usr/share/doc/postfix-2.11.5/examples/qmail-local
/usr/share/doc/postfix-2.11.5/examples/qmail-local/qmail-local.txt
/usr/share/doc/postfix-2.11.5/examples/smtpd-policy
/usr/share/doc/postfix-2.11.5/examples/smtpd-policy/README.SPF
/usr/share/doc/postfix-2.11.5/examples/smtpd-policy/greylist.pl
/usr/share/doc/postfix-2.11.5/main.cf.default
/usr/share/man/man1/mailq.1.gz
/usr/share/man/man1/mailq.postfix.1.gz
/usr/share/man/man1/newaliases.1.gz
/usr/share/man/man1/newaliases.postfix.1.gz
/usr/share/man/man1/postalias.1.gz
/usr/share/man/man1/postcat.1.gz
/usr/share/man/man1/postconf.1.gz
/usr/share/man/man1/postdrop.1.gz
/usr/share/man/man1/postfix.1.gz
/usr/share/man/man1/postkick.1.gz
/usr/share/man/man1/postlock.1.gz
/usr/share/man/man1/postlog.1.gz
/usr/share/man/man1/postmap.1.gz
/usr/share/man/man1/postmulti.1.gz
/usr/share/man/man1/postqueue.1.gz
/usr/share/man/man1/postsuper.1.gz
/usr/share/man/man1/sendmail.postfix.1.gz
/usr/share/man/man1/smtp-sink.1.gz
/usr/share/man/man1/smtp-source.1.gz
/usr/share/man/man5/access.5.gz
/usr/share/man/man5/aliases.5.gz
/usr/share/man/man5/aliases.postfix.5.gz
/usr/share/man/man5/body_checks.5.gz
/usr/share/man/man5/bounce.5.gz
/usr/share/man/man5/canonical.5.gz
/usr/share/man/man5/cidr_table.5.gz
/usr/share/man/man5/generic.5.gz
/usr/share/man/man5/header_checks.5.gz
/usr/share/man/man5/ldap_table.5.gz
/usr/share/man/man5/lmdb_table.5.gz
/usr/share/man/man5/master.5.gz
/usr/share/man/man5/memcache_table.5.gz
/usr/share/man/man5/mysql_table.5.gz
/usr/share/man/man5/nisplus_table.5.gz
/usr/share/man/man5/pcre_table.5.gz
/usr/share/man/man5/pgsql_table.5.gz
/usr/share/man/man5/postconf.5.gz
/usr/share/man/man5/postfix-wrapper.5.gz
/usr/share/man/man5/regexp_table.5.gz
/usr/share/man/man5/relocated.5.gz
/usr/share/man/man5/socketmap_table.5.gz
/usr/share/man/man5/sqlite_table.5.gz
/usr/share/man/man5/tcp_table.5.gz
/usr/share/man/man5/transport.5.gz
/usr/share/man/man5/virtual.5.gz
/usr/share/man/man8/anvil.8.gz
/usr/share/man/man8/bounce.8.gz
/usr/share/man/man8/cleanup.8.gz
/usr/share/man/man8/defer.8.gz
/usr/share/man/man8/discard.8.gz
/usr/share/man/man8/dnsblog.8.gz
/usr/share/man/man8/error.8.gz
/usr/share/man/man8/flush.8.gz
/usr/share/man/man8/lmtp.8.gz
/usr/share/man/man8/local.8.gz
/usr/share/man/man8/master.8.gz
/usr/share/man/man8/oqmgr.8.gz
/usr/share/man/man8/pickup.8.gz
/usr/share/man/man8/pipe.8.gz
/usr/share/man/man8/postscreen.8.gz
/usr/share/man/man8/proxymap.8.gz
/usr/share/man/man8/qmgr.8.gz
/usr/share/man/man8/qmqpd.8.gz
/usr/share/man/man8/scache.8.gz
/usr/share/man/man8/sendmail.8.gz
/usr/share/man/man8/showq.8.gz
/usr/share/man/man8/smtp.8.gz
/usr/share/man/man8/smtpd.8.gz
/usr/share/man/man8/spawn.8.gz
/usr/share/man/man8/tlsmgr.8.gz
/usr/share/man/man8/tlsproxy.8.gz
/usr/share/man/man8/trace.8.gz
/usr/share/man/man8/trivial-rewrite.8.gz
/usr/share/man/man8/verify.8.gz
/usr/share/man/man8/virtual.8.gz
/var/lib/misc/postfix.aliasesdb-stamp
/var/lib/postfix
/var/spool/postfix
/var/spool/postfix/active
/var/spool/postfix/bounce
/var/spool/postfix/corrupt
/var/spool/postfix/defer
/var/spool/postfix/deferred
/var/spool/postfix/flush
/var/spool/postfix/hold
/var/spool/postfix/incoming
/var/spool/postfix/maildrop
/var/spool/postfix/pid
/var/spool/postfix/private
/var/spool/postfix/public
/var/spool/postfix/saved
/var/spool/postfix/trace

Dienst/Deamon-Start einrichten

Um einen Postfix, welcher als Dienst/Deamon 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

:!: HINWEIS - Sollte keine Ausgabe nach Ausführung des Befehls erfolgen, wurde dieser mit der Installation bereits eingerichtet.

Eine Überprüfung, ob beim Neustart des Server der postfix-Dienst/Deamon 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
postfix.service                        enabled

bzw.

# systemctl is-enabled postfix.service
enabled

iptables Regel

Damit der Postfix als Mail-Server auch erreichbar ist und nicht das Empfangen der IP-Paket vom Paketfilter iptables blockiert wird, muss nachfolgende Regel 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 ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state 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        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22  
5        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

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

Nachfolgender Befehl, fügt 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 465 -j ACCEPT
  • -A INPUT -p tcp --dport 587 -j ACCEPT
  • -A INPUT -p tcp --dport 10025 -j ACCEPT

und hier der Befehl:

# iptables -I INPUT 5 -p tcp --dport 25 -j ACCEPT
# iptables -I INPUT 6 -p tcp --dport 465 -j ACCEPT
# iptables -I INPUT 7 -p tcp --dport 587 -j ACCEPT
# iptables -I INPUT 8 -p tcp --dport 10025 -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 ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state 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        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 state NEW
6        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:465 state NEW
7        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587 state NEW
8        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:10025 state NEW
9        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

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) bis Position 8 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
5        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:25 state NEW
6        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:465 state NEW
7        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:587 state NEW
8        0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:10025 state NEW
...

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

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

Konfigurationsdateien: Postfix

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 CentOS ab der Version 7.x bereits vorhanden:

Name der Konfigurationsdatei Bedeutung der Konfigurationsdatei
/etc/postfix/main.cf Hauptkonfigurationsdatei
/etc/postfix/master.cf Konfiguration der Postfix-Module
/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/canonical Umschreiben von Absender- und Empfängeradressen
/etc/postfix/generic Umschreiben von e-Mails welche via SMTP/LMTP das System verlassende
/etc/postfix/header_checks Zugriffskontrolle für Clients, anhand von „Header“-Informationen
/etc/postfix/relocated „Bounce“ bei Empfänger, Rückmeldungen bei geänderten e-Mail-Adresse
/etc/postfix/transport Abweichende Zustellung der e-Mail über alternatives Mailrouting
/etc/postfix/virtual Alias Definitionen für Domains und e-Mail-Adressen

Basis-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 Werte der aktuellen Postfix-Konfiguration auf
  • postconf -n - Listet die neuen bzw. zur Standardkonfiguration aktuell abweichend 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
postconf: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
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_interfaces = localhost
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.11.5/README_FILES
sample_directory = /usr/share/doc/postfix-2.11.5/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550

:!: HINWEIS - Nachfolgende Warnung

postconf: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

ist zu sehen, da es sich hier um einen Server handelt, welcher kein IPv6 unterstützt!

Nachfolgende Anpassungen an der Hauptkonfigurationsdatei von Postfix ermöglichen einen ersten minimalen und ggf. nur lokalen Betrieb von Postfix.

/etc/postfix/main.cf

:!: WICHTIG - Nachfolgende Konfiguration setzt voraus, dass alle Parameter auf einander aufbauen!

myhostname

Der Hostname des Mail-Servers. Dies muss ein (FQDN) - vollständiger Hostname sein.

Defaultwert Neuer Wert
Standardwert aus der Umgebungsvariable HOSTNAME (server60.idmz.tachtler.net) mx1.tachtler.net

In der Konfigurationsdatei

  • /etc/hostname

wird unter CentOS der hostname gespeichert.

Mit nachfolgendem Befehl, kann der aktuell verwendete hostname abgefragt werden:

# hostnamectl
   Static hostname: server60.idmz.tachtler.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: f664f73a8e034d2b875fdc483e7a0ac2
           Boot ID: fb9597b0a7d7496db37fbc96ec15a729
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-229.7.2.el7.x86_64
      Architecture: x86_64

Das setzen von myhostname oder mydomain ist dann sinnvoll, wenn der hostname des Servers nicht dem hostname entspricht der von Postfix verwendet werden soll, bzw. nicht dem im DNS konfiguriertem und nach außen sichtbaren entspricht bzw. entsprechen soll.

:!: HINWEIS - Es ist nur die Konfiguration von myhostname oder mydomain sinnvoll, da Postfix jeweils die nicht konfigurierte Komponente ermittelt.

Beispiel:

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

mydestination

Domains, für die sich Postfix als Final Destination zuständig fühlt!

Defaultwert Neuer Wert
$myhostname, localhost.$mydomain, localhost $mydomain, server60.idmz.$mydomain, $myhostname, localhost.$mydomain, localhost

Der neue Wert besteht aus dem Standardwert und der Ergänzung: $mydomain und server60.idmz.$mydomain.

Um eine Fehlersituation wie nachfolgend dargestellt zu verhindern, wurden die Werte

  • $mydomain
  • server60.idmz.$mydomain

ebenfalls ergänzt, da es hier bei einer lokalen e-Mail Einlieferung in der Log-Datei

  • /var/log/maillog

zu der Fehlermeldung

  • bounced (mail for … loops back to myself)

kommen könnte.

Beispiel:

Jul 14 15:47:24 server60 postfix/smtpd[3145]: connect from server60.idmz.tachtler.net[192.168.0.60]
Jul 14 15:48:10 server60 postfix/smtpd[3145]: A37FE5F113: client=server60.idmz.tachtler.net[192.168.0.60]
Jul 14 15:48:17 server60 postfix/cleanup[3148]: A37FE5F113: message-id=<20120118144810.A37FE5F113@mx1.tachtler.net>
Jul 14 15:48:17 server60 postfix/qmgr[3143]: A37FE5F113: from=<root@server60.idmz.tachtler.net>, size=415, nrcpt=1 (queue active)
Jul 14 15:48:17 server60 postfix/smtp[3149]: A37FE5F113: to=<root@server60.idmz.tachtler.net>, relay=none, delay=22, delays=22/0.02/0/0, 
dsn=5.4.6, status=bounced (mail for server60.idmz.tachtler.net loops back to myself)
Jul 14 15:48:17 server60 postfix/cleanup[3148]: E44105F115: message-id=<20120118144817.E44105F115@mx1.tachtler.net>
Jul 14 15:48:17 server60 postfix/bounce[3150]: A37FE5F113: sender non-delivery notification: E44105F115
Jul 14 15:48:17 server60 postfix/qmgr[3143]: E44105F115: from=<>, size=2347, nrcpt=1 (queue active)
Jul 14 15:48:17 server60 postfix/qmgr[3143]: A37FE5F113: removed
Jul 14 15:48:18 server60 postfix/smtp[3149]: E44105F115: to=<root@server60.idmz.tachtler.net>, relay=none, delay=0.04, delays=0.03/0/0/0, 
dsn=5.4.6, status=bounced (mail for server60.idmz.tachtler.net loops back to myself)
Jul 14 15:48:18 server60 postfix/qmgr[3143]: E44105F115: removed
Jul 14 15:48:19 server60 postfix/smtpd[3145]: disconnect from server60.idmz.tachtler.net[192.168.0.60]

Postfix wird sich an alle unter mydestination aufgelisteten Domains bzw. (FQDN) als final zuständig fühlen und e-Mails annehmen, ohne diese an andere Mail-Server weiterzuleiten.

myorigin

Ergänzung für lokal erzeugte e-Mails, welche nur an eine User-ID adressiert sind z.B. root. Diese e-Mail's werden z.B. via cron-job erstellt. Dies ist immer dann problematisch, wenn local erzeugte e-Mail, nicht lokal zugestellt/weitergeleitet werden!

Defaultwert Neuer Wert
$myorigin = mx1.tachtler.net server60.idmz.$mydomain

Hier sollen lokal erzeuge e-Mails, nicht pauschal um $mydomain = mx1.tachtler.net erweitert werden, sondern es soll der interne Servername, hier server60.idmz.tachtler.net verwendet werden.

Beispiel:

Parameter Postfix ermittelt
mit Defaultwert root@mx1.tachtler.net
myorigin = server60.idmz.$mydomain root@server60.idmz.tachtler.net

mynetworks

Angabe des vertrauenswürdigen Netzbereich aus dem Postfix es gestatte, e-Mails auch nach außen auch an externe Mail-Server bzw. e-Mail-Adressen, e-Mails zuzustellen.

:!: HINWEIS - Angaben die hier gemacht werden, setzen alle Angaben die unter

  • mynetworks_style

gemacht werden, außer Kraft!

Defaultwert Neuer Wert
127.0.0.0/8 [weitere Netzwerkkarten und deren Netze] 127.0.0.0/8 192.168.0.0/24 192.168.1.0/24

Hier können Ergänzungen gemacht werden, z.B. von Netzen, welche über eine Firewall z.B. aus dem Intranet an den Mail-Server geroutet werden!

inet_interfaces

Netzwerkinterfaces (Netzwerkkarten) auf denen Postfix bereit ist e-Mails zu empfangen.

Defaultwert Neuer Wert
localhost (durch CentOS gesetzt! all (eigentlicher Standardwert)

In diesem Fall wurde durch die Installation von CentOS der Wert auf localhost abgeändert, als Schutz, dass nach der Installation vorerst nur von localhost e-Mails angenommen werden.

Der eigentliche Standardwert ist jedoch all, welcher auch wieder gesetzt werden sollte, damit von allen Netzwerkinterfaces (Netzwerkkarten), auf denen der Mail-Server erreichbar ist, e-Mails angenommen werden können!

Ob Postfix auf allen Netzwerkinterfaces (Netzwerkkarten) lauscht, kann mit nachfolgendem Befehl überprüft werden und sollte eine Ausgabe in etwa wie diese ergeben:

netstat -tulpen | grep master
tcp        0      0 0.0.0.0:25             0.0.0.0:*              LISTEN      0       12036      2788/master

inet_protocols

Netzwerkprotokoll (ipv4, ipv6), die durch Postfix unterstützt werden sollen.

Falls nachfolgende Warnung bei der Ausgabe der Konfiguration mit postconf -n von Postfix erscheinen sollte, oder diese in den LOG-Dateien unter /var/log/maillog erscheinen sollte

postconf: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol

ist diese zu sehen, da es sich hier um einen Server handelt, welcher kein IPv6 unterstützt!

Defaultwert Neuer Wert
all ipv4

Der Standardwert ist all, welcher durch ipv4 ersetzt werden sollte, falls kein ipv6 zum Einsatz kommen soll, wie das hier in diesem Beispiel der Fall ist, damit nur in der Protokollart ipv4 e-Mails angenommen werden!

/etc/aliases

Nachdem nun alle Basis-Konfigurationen in der Haupt-Konfigurationsdatei von Postfix durchgeführt wurden, soll vor dem ersten Start noch der wichtige Punkt behandelt werden: 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 procmail
  2. Verhinderung von Ausführung von Schadcode als Benutzer root

Standardmäßig verwendet Postfix die Konfigurationsdatei

  • /etc/aliases

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 Wiederleitung an einen mit nicht so umfangreichen Rechten ausgestatteter Benutzer vorbereitet:

(Nur relevanter Ausschnitt)

...
# Person who should get root's mail
#root:		marc

Hier kann einfach die letzte Zeile z.B. wie folgt abgeändert werden:

# Person who should get root's mail
# Tachtler
# default: #root:		marc
root:		klaus

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

# newaliases

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

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

# ls -l /etc/aliases*
-rw-r--r--. 1 root root  1518 Jul 14 14:49 /etc/aliases
-rw-r--r--  1 root root 12288 Jul 14 14:50 /etc/aliases.db

Erster Start

Falls vorstehende Änderungen (natürlich an die jeweiligen Bedürfnisse angepasst) durchgeführt wurden, sollte ein erster Start von Postfix nichts mehr im Wege stehen.

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

# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
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_interfaces = all
inet_protocols = ipv4
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $mydomain, server60.idmz.$mydomain, $myhostname, localhost.$mydomain, localhost
myhostname = mx1.tachtler.net
mynetworks = 127.0.0.0/8 192.168.0.0/24
myorigin = server60.idmz.$mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.11.5/README_FILES
sample_directory = /usr/share/doc/postfix-2.11.5/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550

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

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

# systemctl start postfix

Mit nachfolgendem Befehl kann der Status des abgefragt werden:

# systemctl status postfix
postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
   Active: active (running) since Tue 2015-07-14 14:56:36 CEST; 6s ago
  Process: 15397 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 15393 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 15388 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 15470 (master)
   CGroup: /system.slice/postfix.service
           ├─15470 /usr/libexec/postfix/master -w
           ├─15471 pickup -l -t unix -u
           └─15472 qmgr -l -t unix -u

Jul 14 14:56:35 server60.idmz.tachtler.net systemd[1]: Starting Postfix Mail Transport Agent...
Jul 14 14:56:36 server60.idmz.tachtler.net postfix/master[15470]: daemon started -- version 2.11.5...
Jul 14 14:56:36 server60.idmz.tachtler.net systemd[1]: Started Postfix Mail Transport Agent.

Erster Test

Anschließend 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 Testmail | /usr/sbin/sendmail root

Als Ergebnis sollten zwei Dinge kontrolliert werden:

  1. Die Log-Datei /var/log/maillog
  2. Der Inhalt in der (falls nicht schon vorhandenen) neu im mbox-Format erstellten Datei /var/spool/mail/klaus

Der Inhalte der Log-Datei /var/log/maillog sollte eine Ausgabe wie nachfolgend dargestellt ergeben, was mit nachfolgendem Befehl durchgeführt werden kann:

# tail -n 7 /var/log/maillog
Jul 14 14:56:36 server60 postfix/postfix-script[15468]: starting the Postfix mail system
Jul 14 14:56:36 server60 postfix/master[15470]: daemon started -- version 2.11.5, configuration /etc/postfix
Jul 14 14:57:15 server60 postfix/pickup[15471]: F10561800089: uid=0 from=<root>
Jul 14 14:57:16 server60 postfix/cleanup[15478]: F10561800089: message-
id=<20150714125715.F10561800089@mx1.tachtler.net>
Jul 14 14:57:16 server60 postfix/qmgr[15472]: F10561800089: from=<root@server60.idmz.tachtler.net>, size=278,
 nrcpt=1 (queue active)
Jul 14 14:57:16 server60 postfix/local[15480]: F10561800089: to=<klaus@server60.idmz.tachtler.net>, orig_to=
<root>, relay=local, delay=0.13, delays=0.09/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
Jul 14 14:57:16 server60 postfix/qmgr[15472]: F10561800089: 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 
From root@server60.idmz.tachtler.net  Tue Jul 14 14:57:16 2015
Return-Path: <root@server60.idmz.tachtler.net>
X-Original-To: root
Delivered-To: root@server60.idmz.tachtler.net
Received: by mx1.tachtler.net (Postfix, from userid 0)
	id F10561800089; Tue, 14 Jul 2015 14:57:15 +0200 (CEST)
Message-Id: <20150714125715.F10561800089@mx1.tachtler.net>
Date: Tue, 14 Jul 2015 14:57:15 +0200 (CEST)
From: root@server60.idmz.tachtler.net (root)
 
Testmail

Lookup Tables-Konfigurationen

alias_maps

Information Beschreibung
Dokumentation http://www.postfix.org/aliases.5.html
http://www.postfix.org/postconf.5.html#alias_maps
Defaultwert
alias_maps = hash:/etc/aliases, nis:mail.aliases
Neuer Wert
alias_maps = hash:/etc/aliases
Beschreibung Die Map definiert e-Mail-Adressen für die lokale Zustellung und erlaubt es lokale Adressen umzuschreiben.

Die Aliases-Datei /etc/aliases ist für viele MTA's gültig, nicht nur für Postfix. Aus historischen Gründen ist diese Konfigurationsdatei nicht unter /etc/postfix sondern unter /etc zu finden.

Hier werden als Beispiel alle e-Mails welche lokal erstellt werden und an den lokalen Benutzer - root gerichtet sind, an den ebenfalls lokalen Benutzer - klaus weitergeleitet.

Die relevanten Änderungen gegenüber der Standard-Konfiguration, sind mit folgendem Kommentar

# Tachtler

versehen.

#
#  Aliases in this file will NOT be expanded in the header from
#  Mail, but WILL be visible over networks or from /bin/mail.
#
#	>>>>>>>>>>	The program "newaliases" must be run after
#	>> NOTE >>	this file is updated for any changes to
#	>>>>>>>>>>	show through to sendmail.
#
 
# Basic system aliases -- these MUST be present.
mailer-daemon:	postmaster
postmaster:	root
 
# General redirections for pseudo accounts.
bin:		root
daemon:		root
adm:		root
lp:		root
sync:		root
shutdown:	root
halt:		root
mail:		root
news:		root
uucp:		root
operator:	root
games:		root
gopher:		root
ftp:		root
nobody:		root
radiusd:	root
nut:		root
dbus:		root
vcsa:		root
canna:		root
wnn:		root
rpm:		root
nscd:		root
pcap:		root
apache:		root
webalizer:	root
dovecot:	root
fax:		root
quagga:		root
radvd:		root
pvm:		root
amandabackup:		root
privoxy:	root
ident:		root
named:		root
xfs:		root
gdm:		root
mailnull:	root
postgres:	root
sshd:		root
smmsp:		root
postfix:	root
netdump:	root
ldap:		root
squid:		root
ntp:		root
mysql:		root
desktop:	root
rpcuser:	root
rpc:		root
nfsnobody:	root
 
ingres:		root
system:		root
toor:		root
manager:	root
dumper:		root
abuse:		root
 
newsadm:	news
newsadmin:	news
usenet:		news
ftpadm:		ftp
ftpadmin:	ftp
ftp-adm:	ftp
ftp-admin:	ftp
www:		webmaster
webmaster:	root
noc:		root
security:	root
hostmaster:	root
info:		postmaster
marketing:	postmaster
sales:		postmaster
support:	postmaster
 
 
# trap decode to catch security attacks
decode:		root
 
# Person who should get root's mail
# Tachtler
# default: #root:		marc
root:		klaus

Wie in der Konfigurationsdatei /etc/aliases schon zu lesen ist,

#       >>>>>>>>>>      The program "newaliases" must be run after
#       >> NOTE >>      this file is updated for any changes to
#       >>>>>>>>>>      show through to sendmail.

müssen Änderungen an dieser Datei erst noch in ein hash-Format, z.B. mithilfe des Programms newaliases umgewandelt werden!

:!: HINWEIS - Es gibt für Postfix zwei Möglichkeiten die Aliases-Datei /etc/aliases in ein hash-Format umzuwandeln.

Die erste Möglichkeit ist, weiterhin den Befehl

  • newaliases

zu verwenden, oder die zweite Möglichkeit

  • postalias

einzusetzen!

Ein Aufruf zur Umwandlung der Konfigurationsdatei /etc/aliases in das hash-Format, könnte wie folgt aussehen:

# postalias /etc/aliases

Ein Überprüfung, ob der Befehl erfolgreich war, kann anhand des Datums der Datei /etc/aliases.db mit folgendem Befehl nachvollzogen werden (Umwandlung war in diesem Beispiel der 2. Dezember):

# ls -l /etc/aliases*
-rw-r--r-- 1 root root  1553 Jul 14 14:53 /etc/aliases
-rw-r--r-- 1 root root 12288 Jul 14 14:56 /etc/aliases.db

:!: HINWEIS - Es bietet sich an, e-Mail-Weiterleitungen in /etc/aliases für lokale technische Benutzer einzusetzen!

canonical_maps

Information Beschreibung
Dokumentation http://www.postfix.org/canonical.5.html
http://www.postfix.org/postconf.5.html#canonical_maps
Defaultwert
canonical_maps = 
Beschreibung Die Map kann e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen und dies sowohl für den Absender und auch Empfängeradressen. Dabei werden die e-Mail-Adressen nicht nur im SMTP-ENVELOP, sondern auch im e-Mail-HEADER ausgetauscht.
Hinweis :!: ACHTUNG - Ab Version 2.2 wird canonical_maps nur noch auf lokal erzeugte e-Mails angewendet!

Welche Clients als lokal angesehen werden, kann durch nachfolgenden Parameter definiert werden:
local_header_rewrite_clients
interne Links Postfix CentOS 7 - Maps-Konfigurationen - recipient_canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - sender_canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - local_header_rewrite_clients
Postfix CentOS 7 - Maps-Konfigurationen - remote_header_rewrite_domain

:!: HINWEIS - Das ist einer der wenigen Ausnahmen, in denen der MTA Postfix den e-Mail-HEADER verändert!

:!: WICHTIG - Eine mögliche Empfänger e-Mail-Adresse ist nicht nur in canonical_maps einzutragen, sondern auch in z.B. virtual_alias_maps, da sonst die Annahme verweigert werden würde!

:!: HINWEIS - Der Einsatz von canonical_maps soll zugunsten der beiden weiteren Maps

  • recipient_canonical_maps
  • sender_canonical_maps

hier nicht durchgeführt werden!

recipient_canonical_maps

Information Beschreibung
Dokumentation http://www.postfix.org/canonical.5.html
http://www.postfix.org/postconf.5.html#recipient_canonical_maps
Defaultwert
recipient_canonical_maps = 
Neuer Wert
recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps
Beschreibung Die Map kann Empfänger e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen. Dabei werden die e-Mail-Adressen nicht nur im SMTP-ENVELOP, sondern auch im e-Mail-HEADER ausgetauscht.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - local_header_rewrite_clients
Postfix CentOS 7 - Maps-Konfigurationen - remote_header_rewrite_domain

:!: HINWEIS - Das ist einer der wenigen Ausnahmen, in denen der MTA Postfix den e-Mail-HEADER verändert!

:!: WICHTIG - Die Empfänger e-Mail-Adresse ist nicht nur in recipient_canonical_maps einzutragen, sondern auch in z.B. virtual_alias_maps, da sonst die Annahme verweigert werden würde!

Als Beispiel soll die e-Mail-Adresse

  • admin@tachtler.net

nach

  • root@tachtler.net

ausgetauscht werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/recipient_canonical_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/recipient_canonical_maps

Danach sollte der Inhalt wie folgt aussehen:

admin@tachtler.net        root@tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/recipient_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/recipient_canonical_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/recipient_canonical_maps*
-rw-r--r-- 1 root root  112 Jul 24 16:16 /etc/postfix/recipient_canonical_maps
-rw-r--r-- 1 root root 8192 Jul 24 16:17 /etc/postfix/recipient_canonical_maps.db

sender_canonical_maps

Information Beschreibung
Dokumentation http://www.postfix.org/canonical.5.html
http://www.postfix.org/postconf.5.html#sender_canonical_maps
Defaultwert
sender_canonical_maps = 
Neuer Wert
sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps
Beschreibung Die Map kann Absender e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen. Dabei werden die e-Mail-Adressen nicht nur im SMTP-ENVELOP, sondern auch im e-Mail-HEADER ausgetauscht.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - local_header_rewrite_clients
Postfix CentOS 7 - Maps-Konfigurationen - remote_header_rewrite_domain

:!: HINWEIS - Das ist einer der wenigen Ausnahmen, in denen der MTA Postfix den e-Mail-HEADER verändert!

Als Beispiel soll das Absenden von e-Mails mit einer e-Mail-Adresse die auf den Subdomänen-, Domänen- und Top-Level-Domänen-Teil

  • @dokuwiki.tachtler.net

lauten, auf den Absender Domänen- und Top-Level-Domänen-Teil

  • @tachtler.net

ersetzt werden.

Dabei soll es völlig egal sein, welcher Absendername bzw. localpart vor dem „@“-Zeichen steht, dieser wird einfach übernommen. Aus postmaster@dokuwiki.tachtler.net wird dann postmaster@tachtler.net.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/sender_canonical_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/sender_canonical_maps

Danach sollte der Inhalt wie folgt aussehen:

@dokuwiki.tachtler.net        @tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/sender_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/sender_canonical_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/sender_canonical_maps*
-rw-r--r-- 1 root root    0 Jul 24 16:33 /etc/postfix/sender_canonical_maps
-rw-r--r-- 1 root root 8192 Jul 24 16:34 /etc/postfix/sender_canonical_maps.db

local_header_rewrite_clients

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#local_header_rewrite_clients
Defaultwert
local_header_rewrite_clients = permit_inet_interfaces
Beschreibung Der Parameter bestimmt, bei welchen Clients, inklusive der Domain(s) welche in remote_header_rewrite_domain aufgelistet sind, eine Umschreibung und eine Ergänzung bei unvollständigen e-Mail-Adressen um $myorigin oder $mydomain durchgeführt werden soll. Für alle anderen Clients, wird kein Umschreibung oder eine Ergänzung durchgeführt.
interne Links Postfix CentOS 7 - Basis-Konfiguration - mynetworks
Postfix CentOS 7 - Maps-Konfigurationen - canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - recipient_canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - sender_canonical_maps
Postfix CentOS 7 - Maps-Konfigurationen - remote_header_rewrite_domain

Nachfolgende Tabelle stellt eine Auflistung der möglichen Parameter dar:

Parameter Beschreibung
permit_inet_interfaces e-Mails, welche durch den Server selbst erzeugt werden
permit_mynetworks e-Mails, welche durch einen Client aus $mynetworks stammen
permit_sasl_authenticated e-Mails, welche durch einen Client der sich via SMTP-Auth authentifiziert hat eingeliefert werden
permit_tls_clientcerts e-Mails, welche durch einen Client der sich mittels TLS-Zertifikat-Fingerprint oder mit einem Fingerprint eines öffentlichen Schlüssels ausweist
permit_tls_all_clientcerts e-Mails, welche durch einen Client der ein TLS-Zertifikat-Fingerprint präsentiert, welches erfolgreich überprüft werden kann, egal ob dieses dem Server bekannt ist noch ob dies aus einer bestimmten CA (Certificate Authority) stammt
check_address_map e-Mails, welche durch einen Client eingeliefert werden, der in einer Lookup Table enthalten ist

Beispiel:

check_address_map btree:/etc/postfix/pop-before-smtp

217.91.103.190  OK

Beispiel:

Sollen alle e-Mails der Clients umgeschrieben oder Ergänzungen bei fehlenden Domain und Top-Level-Domain angaben gemacht werden, ist nachfolgende Konfiguration ausreichend:

local_header_rewrite_clients = 
 permit_mynetworks, 
 permit_sasl_authenticated, 
 permit_tls_clientcerts, 
 check_address_map btree:/etc/postfix/pop-before-smtp

remote_header_rewrite_domain

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#remote_header_rewrite_domain
Defaultwert
remote_header_rewrite_domain = 
Beschreibung Der Parameter bestimmt, bei welchen remote Clients eine Umschreibung und eine Ergänzung bei unvollständigen e-Mail-Adressen um die hier angegebenen Domain(s) erfolgen soll. Wenn der Parameter leer ist (Standard) erfolgt keine Umschreibung und eine Ergänzung bei unvollständigen e-Mail-Adressen für remote Clients
interne Links Postfix CentOS 7 - Maps-Konfigurationen - local_header_rewrite_clients

smtp_generic_maps lmtp_generic_maps

Information Beschreibung
Dokumentation http://www.postfix.org/generic.5.html
http://www.postfix.org/postconf.5.html#smtp_generic_maps
http://www.postfix.org/postconf.5.html#lmtp_generic_maps
Defaultwert
smtp_generic_maps = 


lmtp_generic_maps = 
Neuer Wert
smtp_generic_maps = btree:/etc/postfix/smtp_generic_maps


lmtp_generic_maps = btree:/etc/postfix/lmtp_generic_maps
Beschreibung Die Map kann Absender e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen. Dabei werden die e-Mail-Adressen nicht nur im SMTP-ENVELOP, sondern auch im e-Mail-HEADER ausgetauscht. Dies jedoch erst beim verlassen von Postfix via smtp oder lmtp-Modul.

:!: HINWEIS - Das ist einer der wenigen Ausnahmen, in denen der MTA Postfix den e-Mail-HEADER verändert!

Als Beispiel soll das Absenden von e-Mails mit einer lokalen e-Mail-Adresse die auf den Subdomänen-, Domänen- und Top-Level-Domänen-Teil

  • @local

lauten, auf den Absender Domänen- und Top-Level-Domänen-Teil

  • @tachtler.net

ersetzt werden.

Dabei soll es völlig egal sein, welcher Absendername bzw. localpart vor dem „@“-Zeichen steht, dieser wird einfach übernommen. Aus postmaster@local wird dann postmaster@tachtler.net.

Dafür können z.B. die neue Konfigurationsdateien

  • /etc/postfix/smtp_generic_maps
  • /etc/postfix/lmtp_generic_maps

mit folgenden Befehlen neu zu erstellen:

# touch /etc/postfix/smtp_generic_maps
# touch /etc/postfix/lmtp_generic_maps

Danach sollte der Inhalt wie folgt aussehen:

@local        @tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss müssen die Konfigurationsdateien in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgende Befehle zeigen:

# postmap btree:/etc/postfix/smtp_generic_maps
# postmap btree:/etc/postfix/lmtp_generic_maps

Anschließend sollte zwei neue Dateien mit den Namen /etc/postfix/smtp_generic_maps.db und /etc/postfix/lmtp_generic_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/*mtp_generic_maps*
-rw-r--r-- 1 root root    0 Aug 19 09:27 /etc/postfix/lmtp_generic_maps
-rw-r--r-- 1 root root 8192 Aug 19 09:27 /etc/postfix/lmtp_generic_maps.db
-rw-r--r-- 1 root root    0 Aug 19 09:27 /etc/postfix/smtp_generic_maps
-rw-r--r-- 1 root root 8192 Aug 19 09:27 /etc/postfix/smtp_generic_maps.db

relocated_maps

Information Beschreibung
Dokumentation http://www.postfix.org/relocated.5.html
http://www.postfix.org/postconf.5.html#relocated_maps
Defaultwert
relocated_maps = 
Neuer Wert
relocated_maps = btree:/etc/postfix/relocated_maps
Beschreibung Die Map kann, falls eine e-Mail mit einem dem eigenen Postfix nicht bekannten Empfänger z.B. verzogen@tachtler.net eingeliefert wird, NICHT wie es in diesem Fall üblich wäre, eine e-Mail mit der Fehlermeldung 554 oder einer Bounce-Mail zu quittieren, sondern eine Nachricht Bounce Meldung senden, die die neue e-Mail-Adresse dem einliefernden, mitteilt.

Als Beispiel wird hier die e-Mail-Adresse verzogen@tachtler.net nicht mit einer Fehlermeldung 554 quittiert

...
<verzogen@tachtler.net>: unknown user: "verzogen"

sondern, wenn die e-Mail-Adresse sich lediglich geändert hat, wird dem Absender die neue e-Mail-Adresse mit einer Bounce-Nachricht mitgeteilt!

...
<verzogen@tachtler.net>: user has moved to neueadresse@tachtler.net

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/relocated_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/relocated_maps

Danach sollte der Inhalt wie folgt aussehen:

verzogen@tachtler.net        neueadresse@tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/relocated_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/relocated_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/relocated_maps*
-rw-r--r-- 1 root root    0 Aug 19 10:41 /etc/postfix/relocated_maps
-rw-r--r-- 1 root root 8192 Aug 19 10:41 /etc/postfix/relocated_maps.db

:!: HINWEIS - Die Konfigurationsdatei /etc/postfix/relocated_maps ist nahezu bedeutungslos, da

  1. die wenigsten Nutzer die Bounce-Antwort verstehen, oder gar lesen
  2. da es für die meisten Administratoren ein leichtes ist, die e-Mails einfach über einen Eintrag in der Konfigurationsdatei /etc/postfix/virtual_alias_maps weiterzuleiten!
  3. Auf Bounce-Nachrichten möglichst verzichtet werden sollte, z.B. wegen der „Backscatter“-Problematik

transport_maps

Information Beschreibung
Dokumentation http://www.postfix.org/transport.5.html
http://www.postfix.org/postconf.5.html#transport_maps
Defaultwert
transport_maps = 
Neuer Wert
transport_maps = btree:/etc/postfix/transport_maps
Beschreibung Die Map kann ein vom Standard abweichendes Mailrouting realisieren. Relevant ist dies z.B. dann, wenn Postfix als Relay-Host vor einem anderen e-Mail-Server zum Einsatz kommt und dafür ein besonderes Routing erforderlich ist, welche vom DNS abweichend sind.
interne Links Postfix Echo-Mailer-Script installieren

Als Beispiel soll der Transportweg von e-Mails mit einer e-Mail-Adresse

  • echo@tachtler.net

lautet, auf den Transportweg

  • echo:

umgeleitet werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/transport_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/transport_maps

Danach sollte der Inhalt wie folgt aussehen:

echo@tachtler.net        echo:

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/transport_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/transport_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/transport_maps*
-rw-r--r-- 1 root root   24 Aug 19 09:51 /etc/postfix/transport_maps
-rw-r--r-- 1 root root 8192 Aug 19 09:51 /etc/postfix/transport_maps.db

virtual_maps

Information Beschreibung
Dokumentation http://www.postfix.org/virtual.5.html
http://www.postfix.org/postconf.5.html#virtual_maps
Defaultwert
virtual_maps = 
Beschreibung Die Map kann als Erweiterung von /etc/aliases durch Postfix gesehen werden, ist aber wesentlich flexibler, da hier nicht nur lokale e-Mail Zuweisungen erfolgen können, sondern auch alle anderen, aus den Maps üblichen Zuweisungen, durchgeführt werden können.
Hinweis :!: ACHTUNG - Ab Version 2.0 wird virtual_maps durch virtual_alias_domains und virtual_alias_maps abgelöst!
interne Links Postfix CentOS 7 - Maps-Konfigurationen - alias_maps
Postfix CentOS 7 - Maps-Konfigurationen - virtual_alias_domains
Postfix CentOS 7 - Maps-Konfigurationen - virtual_alias_maps

:!: HINWEIS - Der Einsatz von virtual_maps soll zugunsten der beiden weiteren Maps

  • virtual_alias_domains
  • virtual_alias_maps

hier nicht durchgeführt werden!

virtual_alias_domains

Information Beschreibung
Dokumentation http://www.postfix.org/virtual.5.html
http://www.postfix.org/postconf.5.html#virtual_alias_domains
Defaultwert
virtual_alias_domains = $virtual_alias_maps
Neuer Wert
virtual_alias_domains = btree:/etc/postfix/virtual_alias_domains
Beschreibung Die Map enthält Domains, für die e-Mails angenommen werden.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - virtual_maps
Postfix CentOS 7 - Maps-Konfigurationen - virtual_alias_maps

Als Beispiel sollen für die Domain

  • @example.com

angenommen werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/virtual_alias_domains

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/virtual_alias_domains

Danach sollte der Inhalt wie folgt aussehen:

example.com        irgendwas

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/virtual_alias_domains

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_alias_domains.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/virtual_alias_domains*
-rw-r--r-- 1 root root    0 Aug 19 12:51 /etc/postfix/virtual_alias_domains
-rw-r--r-- 1 root root 8192 Aug 19 12:51 /etc/postfix/virtual_alias_domains.db

virtual_alias_maps

Information Beschreibung
Dokumentation http://www.postfix.org/virtual.5.html
http://www.postfix.org/postconf.5.html#virtual_alias_maps
Defaultwert
virtual_alias_maps = $virtual_maps
Neuer Wert
virtual_alias_maps = btree:/etc/postfix/virtual_alias_maps
Beschreibung Die Map kann Empfänger e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen. Dabei werden die e-Mail-Adressen nur im SMTP-ENVELOP ausgetauscht.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - virtual_maps
Postfix CentOS 7 - Maps-Konfigurationen - virtual_alias_domains

Als Beispiel soll die e-Mail-Adresse

  • postmaster@tachtler.net

nach

  • root@tachtler.net

ausgetauscht werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/virtual_alias_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/virtual_alias_maps

Danach sollte der Inhalt wie folgt aussehen:

postmaster                     postmaster@tachtler.net
postmaster@tachtler.net        root@tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/virtual_alias_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_alias_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/virtual_alias_maps*
-rw-r--r-- 1 root root    0 Aug 19 13:03 /etc/postfix/virtual_alias_maps
-rw-r--r-- 1 root root 8192 Aug 19 13:03 /etc/postfix/virtual_alias_maps.db

virtual_mailbox_domains

Information Beschreibung
Dokumentation http://www.postfix.org/virtual.5.html
http://www.postfix.org/postconf.5.html#virtual_mailbox_domains
Defaultwert
virtual_mailbox_domains = $virtual_mailbox_maps
Neuer Wert
virtual_mailbox_domains = btree:/etc/postfix/virtual_mailbox_domains
Beschreibung Die Map enthält Domains, für die e-Mails angenommen werden, ohne das ein lokales UNIX-Konto vorhanden sein muss.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - virtual_mailbox_maps

Als Beispiel sollen für die Domain

  • @example.com

angenommen werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/virtual_mailbox_domains

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/virtual_mailbox_domains

Danach sollte der Inhalt wie folgt aussehen:

example.com        irgendwas

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/virtual_mailbox_domains

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_mailbox_domains.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/virtual_mailbox_domains*
-rw-r--r-- 1 root root    0 Aug 19 14:42 /etc/postfix/virtual_mailbox_domains
-rw-r--r-- 1 root root 8192 Aug 19 14:42 /etc/postfix/virtual_mailbox_domains.db

virtual_mailbox_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#virtual_mailbox_maps
Defaultwert
virtual_mailbox_maps = 
Neuer Wert
virtual_mailbox_maps = btree:/etc/postfix/virtual_mailbox_maps
Beschreibung Die Map kann Empfänger e-Mail-Adressen durch andere e-Mail-Adressen ersetzen und austauschen. Dabei werden die e-Mail-Adressen nur im SMTP-ENVELOP ausgetauscht, ohne das ein lokales UNIX-Konto vorhanden sein muss.
interne Links Postfix CentOS 7 - Maps-Konfigurationen - virtual_mailbox_domains

Als Beispiel soll die e-Mail-Adresse

  • postmaster@example.com

nach

  • root@example.com

ausgetauscht werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/virtual_mailbox_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/virtual_mailbox_maps

Danach sollte der Inhalt wie folgt aussehen:

postmaster                     postmaster@example.com
postmaster@example.com         root@example.com

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/virtual_mailbox_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_mailbox_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/virtual_mailbox_maps*
-rw-r--r-- 1 root root    0 Aug 19 14:59 /etc/postfix/virtual_mailbox_maps
-rw-r--r-- 1 root root 8192 Aug 19 14:59 /etc/postfix/virtual_mailbox_maps.db

recipient_bcc_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#recipient_bcc_maps
Defaultwert
recipient_bcc_maps = 
Neuer Wert
recipient_bcc_maps = btree:/etc/postfix/recipient_bcc_maps
Beschreibung Die Map erstellt eine Blindkopie (bcc = blind carbon copy) einer eingehenden e-Mail.

Als Beispiel soll jede eingehende e-Mail für die e-Mail-Adresse

  • postmaster@tachtler.net

ebenfalls als Blindkopie (bcc = blind carbon copy) an

  • klaus@tachtler.net

ebenfalls weitergeleitet werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/recipient_bcc_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/recipient_bcc_maps

Danach sollte der Inhalt wie folgt aussehen:

postmaster@tachtler.net        klaus@tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/recipient_bcc_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/recipient_bcc_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/recipient_bcc_maps*
-rw-r--r-- 1 root root   72 Aug 19 13:42 /etc/postfix/recipient_bcc_maps
-rw-r--r-- 1 root root 8192 Aug 19 13:43 /etc/postfix/recipient_bcc_maps.db

sender_bcc_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#sender_bcc_maps
Defaultwert
sender_bcc_maps = 
Neuer Wert
sender_bcc_maps = btree:/etc/postfix/sender_bcc_maps
Beschreibung Die Map erstellt eine Blindkopie (bcc = blind carbon copy) einer ausgehenden e-Mail.

Als Beispiel soll jede ausgehende e-Mail von der e-Mail-Adresse

  • support@tachtler.net

ebenfalls als Blindkopie (bcc = blind carbon copy) an

  • klaus@tachtler.net

ebenfalls weitergeleitet werden.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/sender_bcc_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/sender_bcc_maps

Danach sollte der Inhalt wie folgt aussehen:

support@tachtler.net        klaus@tachtler.net

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/sender_bcc_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/sender_bcc_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/sender_bcc_maps*
-rw-r--r-- 1 root root   72 Aug 19 13:42 /etc/postfix/sender_bcc_maps
-rw-r--r-- 1 root root 8192 Aug 19 13:49 /etc/postfix/sender_bcc_maps.db

rbl_reply_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#rbl_reply_maps
Defaultwert
rbl_reply_maps = 
Neuer Wert
rbl_reply_maps = btree:/etc/postfix/rbl_reply_maps
Beschreibung Die Map kann individuell angepasste Antworten auf RBL (RealTimeBlacklist) Abfragen anthalten.

Nachfolgende Tabelle zeigt z.B., wie Antworten von der RBL (RealTimeBlacklist) spamhaus.org ausfallen können:

DNSBL Zone to Query Returns
SBL sbl.spamhaus.org 127.0.0.2-3 Statische UBE (Unsolicited Bulk E-Mail = Unverlangte Massen-E-Mail) Quelle, Nachgewiesene SPAM Server (hosting oder support) und ROKSO (Register of Known Spam Operations) Spammer
XBL xbl.spamhaus.org 127.0.0.4-7 Illegale Drittanbieter Exploits, inklusive Proxies, Würmer und Trojaner Exploits
PBL pbl.spamhaus.org 127.0.0.10-11 IP Adressbereich (meist dynamische IP-Adressen), aus denen unautorisierte e-Mail's via SMTP ausgeliefert werden (meist auch SPAM-Bot-Netze)
ZEN zen.spamhaus.org 127.0.0.2-11 Kombinierte Zone aus allen vorhergehenden Zonen (empfohlene Liste zur Verwendung) inkludiert SBL, XBL und PBL

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/rbl_reply_maps

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/rbl_reply_maps

Bei Verwendung von Restrcitions wie z.B. smtpd_recipient_restrictions, in der Konfigurationsdatei /etc/postfix/main.cf wie nachfolgendes Beispiel zeigt:

(Nur relevanter Ausschnitt):

...
smtpd_recipient_restrictions =
        reject_rbl_client zen.spamhaus.org=127.0.0.10,
        reject_rbl_client zen.spamhaus.org=127.0.0.11,
        reject_rbl_client zen.spamhaus.org,
...

kann anschließend der Inhalt wie folgt aussehen:

zen.spamhaus.org=127.0.0.10 521 4.7.1 Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}
zen.spamhaus.org=127.0.0.11 521 4.7.1 Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}

:!: HINWEIS - Das Standard-Template für RBL (RealTimeBlacklist) ist im Parameter

  • default_rbl_reply

definiert und kann mit nachfolgendem Befehl abgefragt werden:

# postconf -d default_rbl_reply
default_rbl_reply = $rbl_code Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/rbl_reply_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/rbl_reply_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/rbl_reply_maps*
-rw-r--r-- 1 root root  270 Aug 20 11:29 /etc/postfix/rbl_reply_maps
-rw-r--r-- 1 root root 8192 Aug 20 11:30 /etc/postfix/rbl_reply_maps.db

:!: HIWNEIS - Siehe hierzu aus den externen Link: http://www.postfix.org/STRESS_README.html#hangup

Restrictions: Grundlagen

Mit der Definition von Restrictions (Einschränkungen), wird Postfix in die Lage versetzt, Entscheidungen zu treffen, was mit e-Mails passieren soll, die dem Mail-Server durchlaufen.

Für die Annahme von e-Mails via SMTP ist das Postfix-Modul

  • smtpd

zuständig.

Für jeden Schritt den der Client beim Einlieferungsprozess durchläuft, besitzt smtpd eine eigene Restriction, die Postfix durchläuft, um entweder zu einem positiven oder negativen Ergebnis zu kommen.

Nachfolgende Tabelle zeigt eine Übersicht der Restrictions:

Name der Restriction Beschreibung der Restriction
smtpd_client_restrictions Prüfung, nach dem Connect
smtpd_helo_restrictions Prüfung, nach dem HELO/EHLO
smtpd_sender_restrictions Prüfung, nach MAIL FROM:…
smtpd_relay_restrictions Prüfung, vor RCPT TO:…
smtpd_recipient_restrictions Prüfung, nach RCPT TO:…
smtpd_data_restrictions Prüfung, nach DATA
smtpd_end_of_data_restrictions Prüfung, nach erfolgter e-Mail Übertragung
smtpd_etrn_restrictions Client leert via ETRN-Kommando die Mail-Queue

:!: WICHTIG - Die Restrictions werden nacheinander durchlaufen und ähnlich wie bei iptables, gilt auch hier, falls ein Restriction einen Treffer erzielt, werden keine weiteren Überprüfungen innerhalb der entsprechenden Restriction mehr durchgeführt!

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - REJECT:

  • Führt innerhalb einer Restriction eine Überprüfung zu einem REJECT, fährt Postfix zunächst im SMTP-Dialog scheinbar weiter fort, um den Client nicht zu verwirren.
  • Erst nach der Angabe von RCPT TO:… würde bei einem vorhergehenden REJECT die Ablehnung der e-Mail erfolgen.

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - OK oder PERMIT:

  • Führt innerhalb einer Restriction eine Überprüfung zu einem OK oder PERMIT, so gilt nur diese Restriction als bestanden und es werden keine weiteren Überprüfung innerhalb dieser Restriction durchgeführt.
  • Anschließend fährt Postfix mit der nächsten Restriction und deren Überprüfung fort.

Beim durchlaufen aller Restrictions gelten nachfolgende Regeln - DUNNO:

  • Führt innerhalb einer Restriction die Überprüfung weder zu einem REJECT noch zu einem OK - sprich zu einem DUNNO, wird die nächste Überprüfung innerhalb der Restriction durchgeführt.

:!: WICHTIG - Erst nach dem der Client die smtpd_recipient_restrictions erfolgreich hinter sich gelassen hat, darf die Übertragung des Inhalts der e-Mail mit dem DATA-Kommando erfolgen.

Falls nun auch die Überprüfungen der

  • header_checks
  • body_checks
  • mime_header_checks
  • nested_header_checks

erfolgreich abgeschlossen werden kann, wird die e-Mail angenommen.

Restrictions: Fazit

Aufgrund des vorhergehend beschrieben Verfahrens der e-Mail Annahme bzw. Ablehnung, sind folgende Erkenntnisse zu beachten und sollten zu nachfolgend dargestellten Ergebnis führen:

  1. Bei genauer Analyse der Prozedur ist festzustellen, dass die nachfolgend genannten ersten drei Restrictions, streng genommen keine Rolle spielen:
    1. smtpd_client_restrictions
    2. smtpd_helo_restrictions
    3. smtpd_sender_restrictions
  2. Ein positives Ergebnis in den ersten drei Restrictions führt nicht automatisch zur Annahme der e-Mail, nur zur positiven Beendigung von einer der jeweiligen ersten drei Restrictions. Jede positive Überprüfung in einer der jeweiligen ersten drei Restrictions müsste in der jeweils nachfolgenden Restriction wiederholt werden - oder gleich in der vierten und fünften Restriction durchgeführt werden.
  3. Ein negatives Ergebnis in den ersten drei Restrictions führt nicht zu einer sofortigen Ablehnung der e-Mail. Es werden weiterhin alle Restrictions bis zur vierten oder fünften Restriction durchlaufen, auch wenn schon klar ist, das die e-Mail nicht angenommen wird ist dies der Fall um einen Client nicht zu verwirren.

:!: WICHTIG - Da in jedem Fall immer bis zur fünften Restriction alle Prüfungen durchgeführt werden, sollten alle Prüfungen NUR in

  • smtpd_relay_restrictions
  • smtpd_recipient_restrictions

und anschließend ggf. noch in

  • smtpd_data_restrictions

statt finden !!!

Restrictions-Konfigurationen

disable_vrfy_command

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#disable_vrfy_command
Defaultwert
disable_vrfy_command = no
Neuer Wert
disable_vrfy_command = yes
Beschreibung Verhindert, das der Befehl SMTP VRFY verwendet werden kann. Dies verhindert die Anwendung einiger Techniken, die zum ermitteln von e-Mail-Adressen in großen Mengen genutzt werden können.

smtpd_helo_required

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_helo_required
Defaultwert
smtpd_helo_required = no
Neuer Wert
smtpd_helo_required = yes
Beschreibung Erzwingt, dass eine Remote-SMTP-Client den Befehl HELO oder EHLO vor dem Senden der E-Mail Befehle oder andere Befehle, zu Beginn einer SMTP-Sitzung sendet.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - check_helo_access

smtpd_relay_restrictions

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_relay_restrictions
http://www.postfix.org/SMTPD_ACCESS_README.html
Defaultwert
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, 
defer_unauth_destination
Neuer Wert
smtpd_relay_restrictions =
# Permit all SASL authenticated users or clients from mynetworks.
        # Tachtler - disabled - permit_sasl_authenticated,
        permit_mynetworks,
# Permit Backup-MX server.
        # Tachtler - disabled - permit_mx_backup,
# Reject relaying all others, to prevent to be an "open relay server".
        reject_unauth_destination
Beschreibung Diese Restrictions (Zugriffsbeschränkungen) dient der e-Mail-Relay-Steuerung, welche von Postfix im Rahmen der RCPT TO-Befehls, vor den smtpd_recipient_restrictions ausgewertet werden.

Nachfolgend werden die einzelnen Parameter innerhalb von smtpd_relay_restrictions erklärt:

  • Tachtler - disabled - permit_sasl_authenticated

Erlaubt allen Remote-SMTP-Clients die weitere Einlieferung von e-Mails, wenn diese sich via SASL authentifiziert haben.

:!: HINWEIS - Abdeckung durch Port submission, siehe auch den internen Link:

  • permit_mynetworks

Erlaubt allen Remote-SMTP-Clients die weitere Einlieferung von e-Mails, wenn diese aus mynetworks stammen.

  • Tachtler - disabled - permit_mx_backup

Erlaubt dem Backup-MX e-Mail-Server die Einlieferung von e-Mails.

:!: HINWEIS - Abdeckung durch die smtpd_recipient_restrictions!

  • reject_unauth_destination

Verweigert allen Remote-SMTP-Clients die weitere Einlieferung von e-Mails, wenn diese nicht in einer der vorhergehenden Gruppen enthalten sind, oder keine Definition in relay_domains vorhanden ist oder Postfix sich nicht selbst als final destination für die einzuliefernde e-Mail sieht.

check_recipient_access_rfc

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
Defaultwert
[nicht definiert]
Neuer Wert
check_recipient_access btree:/etc/postfix/check_recipient_access_rfc
Beschreibung Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Empfänger, um die entsprechende Aktion auszuführen.

Nachfolgend müssen, um die Konformität zu RFC 2821 sicher zu stellen, nachfolgende e-Mail-Adresse immer erreichbar sein:

  • postmaster@
  • abuse@

zusätzlich können auch noch diese e-Mail-Adressen die Servicequalität erhöhen

  • webmaster@
  • hostmaster@

wobei der localpart@ den Domänenpart und den Top-Level-Domänenpart, für die Domänen für die Postfix bereit ist e-Mails anzunehmen, steht - was auch mehrere Domänen sein können, aber nur diese Definition erforderlich ist.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/check_recipient_access_rfc

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_recipient_access_rfc

Danach sollte der Inhalt wie folgt aussehen:

postmaster@        OK
abuse@             OK
webmaster@         OK
hostmaster@        OK

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/check_recipient_access_rfc

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_recipient_access_rfc.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/check_recipient_access_rfc*
-rw-r--r-- 1 root root   55 Aug 21 20:15 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Aug 21 20:15 /etc/postfix/check_recipient_access_rfc.db

check_client_access

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_restrictions
Defaultwert
[nicht definiert]
Neuer Wert
check_client_access cidr:/etc/postfix/check_client_access
Beschreibung Ermittelt den Client-Hostnamen der übergeordneten Domänen, Client-IP-Adresse oder Netzwerke durch Strippen der signifikanten Oktetten, womit ein Black- oder Whitelisting auf Basis von z.B. IP-Adressen, oder IP-Netzen durchgeführt werden kann.

Nachfolgend können hier Einträge in die cidr-Map nach nachfolgendem Muster eingetragen werden:

192.168.0.1        OK
192.168.0.0/24     REJECT Mailing to us is unwanted!

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/check_client_access

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_client_access

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

check_helo_access

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_helo_restrictions
Defaultwert
[nicht definiert]
Neuer Wert
check_helo_access btree:/etc/postfix/check_helo_access
Beschreibung Ermittelt die HELO oder EHLO Hostnamen oder die übergeordnete Domänen um die entsprechende Aktion auszuführen.

:!: Hinweis - Um in vollem Umfang diese Restriction durchsetzen zu können, muss smtpd_helo_required = yes gesetzt werden, da ohne smtpd_helo_required = yes, ein Client diese Restriction, durch nicht senden eines HELO oder EHLO überspringen könnte.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_helo_required

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/check_helo_access

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_helo_access

Danach könnte der Inhalt wie folgt aussehen:

mx1.example.com        550 Currently, too much traffic!

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/check_helo_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_helo_access.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/check_helo_access*
-rw-r--r-- 1 root root    0 Aug 21 20:59 /etc/postfix/check_helo_access
-rw-r--r-- 1 root root 8192 Aug 21 20:59 /etc/postfix/check_helo_access.db

check_sender_access

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_sender_restrictions
Defaultwert
[nicht definiert]
Neuer Wert
check_sender_access btree:/etc/postfix/check_sender_access
Beschreibung Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Absender, um die entsprechende Aktion auszuführen.
interner Link Postfix CentOS 7 - TLS-Konfiguration - plaintext_reject_code

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/check_sender_access

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_sender_access

Danach könnte der Inhalt wie folgt aussehen:

spam@example.com        550 We don't want your SPAM!
nausch.org              reject_plaintext_session

:!: ERKLÄRUNG - reject_plaintext_session verhindert den Aufbau von unverschlüsselten Verbindungen, bei eingehenden e-Mails

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/check_sender_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_sender_access.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/check_sender_access*
-rw-r--r-- 1 root root    0 Aug 21 21:17 /etc/postfix/check_sender_access
-rw-r--r-- 1 root root 8192 Aug 21 21:17 /etc/postfix/check_sender_access.db

check_recipient_access

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
Defaultwert
[nicht definiert]
Neuer Wert
check_recipient_access btree:/etc/postfix/check_recipient_access
Beschreibung Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Empfänger, um die entsprechende Aktion auszuführen.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/check_recipient_access

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_recipient_access

Danach könnte der Inhalt wie folgt aussehen:

user@tachtler.net        550 User are not available!

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss muss die Konfigurationsdatei in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgender Befehl zeigt:

# postmap btree:/etc/postfix/check_recipient_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_recipient_access.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# # ls -l /etc/postfix/check_recipient_access*
-rw-r--r-- 1 root root    0 Aug 21 21:22 /etc/postfix/check_recipient_access
-rw-r--r-- 1 root root 8192 Aug 21 21:22 /etc/postfix/check_recipient_access.db
-rw-r--r-- 1 root root   55 Aug 21 20:15 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Aug 21 20:15 /etc/postfix/check_recipient_access_rfc.db

smtpd_recipient_restrictions

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions
http://www.postfix.org/SMTPD_ACCESS_README.html
Defaultwert
smtpd_recipient_restrictions = 
Neuer Wert
smtpd_recipient_restrictions =
# RFC or important ROLE-Accounts - Whitelisting - like: postmaster, abuse.
        check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,
# White- and Blacklisting.
        check_client_access cidr:/etc/postfix/check_client_access,
        check_helo_access btree:/etc/postfix/check_helo_access,
        check_sender_access btree:/etc/postfix/check_sender_access,
        check_recipient_access btree:/etc/postfix/check_recipient_access,
# Reject unclean e-Mail.
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
        reject_invalid_helo_hostname,        
# Permit all SASL authenticated users, or clients from mynetworks.
        # Tachtler - disabled - permit_sasl_authenticated,
        permit_mynetworks,
# RBL and RHSBL checks.
        reject_rbl_client zen.spamhaus.org=127.0.0.10,
        reject_rbl_client zen.spamhaus.org=127.0.0.11,
        reject_rbl_client zen.spamhaus.org,
        reject_rbl_client ix.dnsbl.manitu.net,
        reject_rbl_client bl.spamcop.net,
        reject_rhsbl_client multi.uribl.com,
# Check dynamicaly existing Relay-Recipient.
        reject_unverified_recipient,
# Permit Backup-MX.
        permit_mx_backup,
# Reject relaying all others, to prevent to be an "open relay server".
        # Tachtler - disabled - reject_unauth_destination,
# Check dynamicaly the Quota-Status of the user against the dovecot imap server.
        check_policy_service inet:192.168.0.80:12340
Beschreibung Diese Restrictions (Zugriffsbeschränkungen) dient der e-Mail-Annahme-Steuerung, welche von Postfix im Rahmen der RCPT TO-Befehls, nach den smtpd_relay_restrictions ausgewertet werden.
interne Links Postfix CentOS 7 - Basis-Konfiguration - /etc/postfix/main.cf - mynetworks
Postfix CentOS 7 - Lookup Tables-Konfigurationen - rbl_reply_maps
Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_helo_required
Postfix CentOS 7 - Restrictions-Konfigurationen - check_recipient_access_rfc
Postfix CentOS 7 - Restrictions-Konfigurationen - check_client_access
Postfix CentOS 7 - Restrictions-Konfigurationen - check_helo_access
Postfix CentOS 7 - Restrictions-Konfigurationen - check_sender_access
Postfix CentOS 7 - Restrictions-Konfigurationen - check_recipient_access
Dovecot Quotas - Konfiguration - Quota-Policy-Server

Nachfolgend werden die einzelnen Parameter innerhalb von smtpd_recipient_restrictions erklärt:

  • check_recipient_access btree:/etc/postfix/check_recipient_access_rfc

Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Empfänger, um die entsprechende Aktion, hier die Annahme der RCF-Role-Accounts postmaster und abuse ggf. auch webmaster und hostmaster, auszuführen.

  • check_client_access cidr:/etc/postfix/check_client_access

Ermittelt den Client-Hostnamen der übergeordneten Domänen, Client-IP-Adresse oder Netzwerke durch Strippen der signifikanten Oktetten, womit ein Black- oder Whitelisting auf Basis von z.B. IP-Adressen, oder IP-Netzen durchgeführt werden kann.

  • check_helo_access btree:/etc/postfix/check_helo_access

Ermittelt die HELO oder EHLO Hostnamen oder die übergeordnete Domänen um die entsprechende Aktion auszuführen.

:!: Hinweis - Um in vollem Umfang diese Restriction durchsetzen zu können, muss smtpd_helo_required = yes gesetzt werden, da ohne smtpd_helo_required = yes, ein Client diese Restriction, durch nicht senden eines HELO oder EHLO überspringen könnte.

  • check_sender_access btree:/etc/postfix/check_sender_access

Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Absender, um die entsprechende Aktion auszuführen.

  • check_recipient_access btree:/etc/postfix/check_recipient_access

Ermittelt für die aufgelöste RCPT TO-Adresse, Domain, Top-Level-Domänen oder localpart @, für den Empfänger, um die entsprechende Aktion auszuführen.

  • reject_non_fqdn_sender

Abweisen der e-Mail, wenn die MAIL FROM-Adresse nicht in voll qualifizierter Domänenform (FQDN), wie sie in der RFC gefordert wird, angegeben wird.

:!: HINWEIS - Der Parameter non_fqdn_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 504).

  • reject_non_fqdn_recipient

Abweisen der e-Mail, wenn die RCPT TO-Adresse nicht in voll qualifizierter Domänenform (FQDN), wie sie in der RFC gefordert wird, angegeben wird.

:!: HINWEIS - Der Parameter non_fqdn_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 504).

  • reject_unknown_sender_domain

Abweisen der e-Mail, wenn Postfix nicht final destination (final zuständig) für die Absenderadresse und die MAIL FROM-Domäne

  1. kein DNS-MX und kein DNS-A-Eintrag, oder
  2. ein fehlerhafter MX-Eintrag, wie beispielsweise einen Datensatz mit einer Länge Null hat

:!: HINWEIS - Der Parameter unknown_address_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 450). Dieser sollte angepasst werden!

  • reject_unknown_recipient_domain

Abweisen der e-Mail, wenn Postfix nicht final destination (final zuständig) für die Empfänger Domäne ist und die RCPT TO-Domäne

  1. kein DNS-MX und kein DNS-A-Eintrag, oder
  2. ein fehlerhafter MX-Eintrag, wie beispielsweise einen Datensatz mit einer Länge Null hat

:!: HINWEIS - Der Parameter unknown_address_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 450). Dieser sollte angepasst werden!

  • reject_invalid_helo_hostname

Abweisen der e-Mail, wenn der HELO oder EHLO Hostname fehlerhaft ist.

:!: Hinweis - Um in vollem Umfang diese Restriction durchsetzen zu können, muss smtpd_helo_required = yes gesetzt werden, da ohne smtpd_helo_required = yes, ein Client diese Restriction, durch nicht senden eines HELO oder EHLO überspringen könnte.

:!: HINWEIS - Der Parameter invalid_hostname_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 501).

  • # Tachtler - disabeled - permit_sasl_authenticated

:!: HINWEIS - Abgedeckt durch Port submission, siehe auch den internen Link:

Fortfahren mit der Annahme der e-Mail, wenn der Client erfolgreich über das RFC-4954 (AUTH) Protokoll authentifiziert ist.

  • permit_mynetworks

:!: HINWEIS - Abgedeckt durch die smtpd_relay_restrictions, ausser bei lokaler Einlieferung!

Fortfahren mit der Annahme der e-Mail, wenn die IP-Adresse des Clients in mynetworks enthalten ist.

  • reject_rbl_client zen.spamhaus.org=127.0.0.10
    reject_rbl_client zen.spamhaus.org=127.0.0.11
    reject_rbl_client zen.spamhaus.org
    reject_rbl_client ix.dnsbl.manitu.net
    reject_rbl_client bl.spamcop.net
    reject_rhsbl_client multi.uribl.com

Abweisen der e-Mail, wenn die umgekehrte Client-Netzwerk-Adresse mit dem A-Record „dddd“ unter rbl_domain aufgeführt ist. Jedes „d“ stellt eine Zahl oder ein Muster im Inneren von „[]“ dar, welche durch ein oder mehrere „;“ - getrennte Zahlen oder Zahl..Zahl Bereiche sein können. Wenn keine „= dddd“ angegeben ist, dann soll die e-Mail abgewiesen werden, wenn für die umgekehrte Client-Netzwerk-Adresse ein A-Record Eintrag unter rbl_domain aufgeführt ist.

:!: HINWEIS - Der Parameter maps_rbl_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 554), der default_rbl_reply Parameter setzt die Standard-Server-Antwort, und der Parameter rbl_reply_maps enthält, bei gewünschten Abweichungen von der Standard Antwort, in einer Tabellen mit Server-Antworten diese fest, wenn diese in rbl_domain indexiert sind.

  • reject_unverified_recipient

Abweisen der e-Mail, wenn für eine Nachricht an die RCPT TO-Adresse gerichtet ist, fest steht, das diese einen „Bounce“ bzw. eine Ablehnung erzeugen würde, da die Empfänger-Adresse nicht erreichbar ist.

:!: HINWEIS - Der Parameter unverified_recipient_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 450). Dieser sollte angepasst werden!

Der Parameter unverified_recipient_defer_code setzt den Response-Code für abgelehnte e-Mails, wenn die Zustellung aufgrund eines vorübergehenden Problems, fehlschlagen würde (Standard: 450).

  • permit_mx_backup

Fortfahren mit der Annahme der e-Mail, wenn das lokale Mail System als „Backup MX“ für die RCPT TO-Domäne definiert ist, oder wenn die Domäne ein autorisierter Ziel ist.

  • # Tachtler - disabled - reject_unauth_destination

:!: HINWEIS - Abgedeckt durch die smtpd_relay_restrictions.

Abweisen der e-Mail, wenn nicht mindestens eine der folgenden Bedingungen erfüllt wird:

  1. Postfix Mail-Forwarder: die aufgelöste RCPT TO-Domäne entspricht relay_domains oder eine Subdomain davon und enthält keine spezielles, für den Absender angegebenes Routing.
  2. Postfix ist das endgültige Ziel (final destination): die aufgelöste RCPT TO-Domäne entspricht mydestination, inet_interfaces, proxy_interfaces, virtual_alias_domains oder virtual_mailbox_domains und enthält keine spezielles, für den Absender angegebenes Routing.

:!: HINWEIS - Der Parameter relay_domains_reject_code setzt den Response-Code für abgelehnte e-Mails (Standard: 554).

  • check_policy_service inet:192.168.0.80:12340

Abweisen der e-Mail, wenn eine Überprüfung gegen den Policy Service des dovecot imap servers ergibt, das das Postfach „over quota“ (voll) ist.

:!: HINWEIS - Dies soll aktuell an dieser Stelle geschehen, da nur hier die Abweisung pro RCPT TO-Empfänger-Adresse erfolgen kann. Eine mögliche Überprüfung in der Reesctriction smptd_end_of_data_restriction wäre ebenfalls denkbar und hätte auch den Vorteil, dass hier die exakte Größe der e-Mail ermittelbar wäre, jedoch auch den Nachteil, das eine Ablehnung nur für alle Empfänger durchgeführt werden kann und nicht mehr pro einzelner RCPT TO-Empfänger-Adresse.

Vielen Dank an dieser Stelle an Patrick Ben Koetter und Christian Boltz.

smtpd_data_restrictions

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_data_restrictions
http://www.postfix.org/SMTPD_ACCESS_README.html
Defaultwert
smtpd_data_restrictions = 
Neuer Wert
smtpd_data_restrictions =
# Reject request commands ahead of time, where it is not allowed.
        reject_unauth_pipelining,
# Reject when envelop sender is the null address, and the message has multiple
# envelop recipients.
        reject_multi_recipient_bounce,
# All else.
        permit
Beschreibung Diese Restrictions (Zugriffsbeschränkungen) dient der e-Mail-Annahme-Steuerung, welche von Postfix im Rahmen des DATA-Befehls, ausgewertet werden.

Nachfolgend werden die einzelnen Parameter innerhalb von smtpd_data_restrictions erklärt:

  • reject_unauth_pipelining

Ablehnung der e-Mail, wenn der Client SMTP-Befehle zu schnell sendet, bzw. an einer Stelle an der es nicht erlaubt ist, oder wenn der Client SMTP-Befehle zu schnell sendet, ohne zu wissen, dass Postfix tatsächlich de ESMTP-Befehl Pipelining unterstützt. Dies stoppt E-Mails von Bulk-Mail-Software, die keine ordnungsgemäße Verwendung des ESMTP-Befehl Pipelining durchführen, um die Einlieferung von e-Mails zu beschleunigen.

  • reject_multi_recipient_bounce

Ablehnung der e-Mail, wenn der ENVELOP-Sender die Null-Adresse ist und die Nachricht an mehrere ENVELOP-Empfänger gerichtet ist. Diese Nutzung der Null-Sender-Adresse ist selten, aber unter bestimmten Bedingungen legitim. Eine Multi-Empfänger-Mail, die mit der DSN-Option NOTIFY geschickt wurde, kann nie mit der Null-Sender-Adresse weitergeleitet werden.

:!: Hinweis - Diese Restrcition kann nur angewandt werden, wenn diese in den smtpd_data_restrictions oder smtpd_end_of_data_restrictions verwendet wird, weil die Gesamtanzahl der Empfänger, nicht in früheren Phasen des SMTP-Dialogs, bekannt ist.

  • permit

Annahme der e-Mail. Dient nur dem besseren Verständnis, das die e-Mail letztendlich angenommen wird.

unknown_address_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unknown_address_reject_code
Defaultwert
unknown_address_reject_code = 450
Neuer Wert
unknown_address_reject_code = 550
Beschreibung Der numerische Response-Code, wenn Postfix die Absender- oder Empfängeradresse ablehnt, weil die Domäne nicht bekannt ist.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions

unknown_client_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unknown_client_reject_code
Defaultwert
unknown_client_reject_code = 450
Neuer Wert
unknown_client_reject_code = 550
Beschreibung Der numerische Response-Code, wenn ein Client ohne gültige Adresse ⇔ Namenszuordnung durch die Restriction reject_unknown_client_hostname abgelehnt wird.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions

unknown_hostname_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unknown_hostname_reject_code
Defaultwert
unknown_hostname_reject_code = 450
Neuer Wert
unknown_hostname_reject_code = 550
Beschreibung Der numerische Response-Code, wenn der mit dem Befehl HELO oder EHLO angegebenen Hostnamen durch die Restriction reject_unknown_helo_hostname abgelehnt wird.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions

unverified_recipient_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unverified_recipient_reject_code
Defaultwert
unverified_recipient_reject_code = 450
Neuer Wert
unverified_recipient_reject_code = 577
Beschreibung Der numerische Response-Code, wenn eine Empfängeradresse durch die Restrcicion reject_unverified_recipient abgelehnt wird.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions

unverified_sender_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unverified_sender_reject_code
Defaultwert
unverified_sender_reject_code = 450
Neuer Wert
unverified_sender_reject_code = 577
Beschreibung Der numerische Response-Code, wenn eine Absenderadresse durch die Restrcicion reject_unverified_sender abgelehnt wird.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions

:!: HINWEIS - Die zugrunde liegende Restriction wird zwar nicht angewandt, der Response-Code soll hier trotzdem gesetzt werde, da bei einer späteren, partiellen Verwendung der zugrunde liegenden Restriction, dieser Response-Code bereits schon gesetzt ist.

Mail Filter Checks-Konfigurationen

Mit nachfolgenden „Checks“ (Überprüfungen) ist Postfix in der Lage auch

  • den header
  • den mime_header
  • die nested_header
  • den body

zu überprüfen.

header_checks

Information Beschreibung
Dokumentation http://www.postfix.org/header_checks.5.html
Defaultwert
header_checks = 
Neuer Wert
header_checks = pcre:/etc/postfix/header_checks
Beschreibung Optionale Lookup-Tabellen für die Inhaltsprüfung der primären Nicht-MIME-Nachrichten-Header (Kopfzeilen). Die Checks werden auf die Nachrichten-Header angewandt. Hiervon ausgenommen sind die MIME-Header für die es eigene „Checks“ (Überprüfungen) gibt.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/header_checks

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/header_checks

Danach könnte der Inhalt wie folgt aussehen:

/^Received: from localhost/            IGNORE
 
# Weitere Beispiele
 
If /^From:/i
/^From:.*spam.org/                     REJECT Header-Spamschutzregel FROM-1001
Endif
 
If /^To:/i
/^To:.*spam.net/                       REJECT Header-Spamschutzregel TOTO-2001
Endif
 
If /^Date:/i
/^Date:.*[+-](1[4-9]|2\d)\d\d$/        REJECT Header-Spamschutzregel DATE-3001
Endif
 
If /^Subject:/i
/^Subject:.*Gratisaktion.*/            REJECT Header-Spamschutzregel SUBJ-4001
Endif
 
# Spezielles Beispiel
/^(To|From|Cc|Reply-To):.*@spam.gov/   REJECT Header-Spamschutzregel MULT-9001

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

:!: HINWEIS - Die Regeln sollten im Perl-Kompatiblen RegExp-Syntax (PCRE) verfasst werden!

mime_header_checks

Information Beschreibung
Dokumentation http://www.postfix.org/header_checks.5.html
Defaultwert
mime_header_checks = $header_checks
Neuer Wert
mime_header_checks = pcre:/etc/postfix/mime_header_checks
Beschreibung Optionale Lookup-Tabellen für die Inhaltsprüfung der primären MIME-Nachrichten-Header (Kopfzeilen). Die Checks werden auf die Nachrichten-Header angewandt. Hiervon ausgenommen sind die normalen Nachrichten Header für die es eigene „Checks“ (Überprüfungen) gibt. Es kommt hier die MIME encoded word lt. RFC 2047 zum Einsatz.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/mime_header_checks

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/mime_header_checks

Danach könnte der Inhalt wie folgt aussehen:

# Viagra
/^Subject:.*VmlhZ3Jh.*/            REJECT MIME-Header-Spamschutzregel SUBJ-4001

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

:!: HINWEIS - Die Regeln sollten im Perl-Kompatiblen RegExp-Syntax (PCRE) verfasst werden!

nested_header_checks

Information Beschreibung
Dokumentation http://www.postfix.org/header_checks.5.html
Defaultwert
nested_header_checks = $header_checks
Neuer Wert
nested_header_checks = pcre:/etc/postfix/nested_header_checks
Beschreibung Optionale Lookup-Tabellen für die Inhaltsprüfung der primären Nicht-MIME-Nachrichten-Header (Kopfzeilen) angehängter/in Anhang weitergeleitete Nachrichten. Die Checks werden auf die Nachrichten-Header angewandt. Hiervon ausgenommen sind die MIME-Header für die es eigene „Checks“ (Überprüfungen) gibt.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/nested_header_checks

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/nested_header_checks

Danach könnte der Inhalt wie folgt aussehen:

/^Received: from spammer/            REJECT NESTED-Header-Spamschutzregel HEAD-5001

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

:!: HINWEIS - Die Regeln sollten im Perl-Kompatiblen RegExp-Syntax (PCRE) verfasst werden!

body_checks

Information Beschreibung
Dokumentation http://www.postfix.org/header_checks.5.html
Defaultwert
body_checks = 
Neuer Wert
body_checks = pcre:/etc/postfix/nested_header_checks
Beschreibung Optionale Lookup-Tabelle für die Inhaltsprüfung der Nachricht.

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/body_checks

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/body_checks

Danach könnte der Inhalt wie folgt aussehen:

/Sehr geehrter Sparkassen Kunde/	    REJECT Body-Spamschutzregel BODY-1001

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

:!: HINWEIS - Die Regeln sollten im Perl-Kompatiblen RegExp-Syntax (PCRE) verfasst werden!

Dynamische Adressen-Verifizierung

Unter dem Begriff Dynamic address verification (Dynamische Adressen-Verifizierung) ist die Möglichkeit von Postfix gemeint, das dieser sich im Hauptspeicher merkt, ob die e-Mail-Adresse existiert oder nicht. Nach einem Postfix reload, restart oder stop würden diese Informationen jedoch nicht mehr Verfügbar sein.

Deshalb kann Postfix diese Informationen nicht nur im Hauptspeicher, sondern auch in einer Datei ablegen.

address_verify_map

/etc/postfix/main.cf

:!: HINWEIS - Nachfolgende Änderungen sind in der Konfigurationsdatei /etc/postfix/main.cf erforderlich.

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#address_verify_map
Defaultwert
address_verify_map = btree:$data_directory/verify_cache
Neuer Wert
address_verify_map = btree:$queue_directory/verify/verify_cache
Beschreibung Tabelle für die permanente Adressüberprüfungsstatus Auslagerung im Dateisystem, damit diese Informationen auch nach einem Postfix reload, restart oder stop weiterhin zur Verfügung stehen.

:!: WICHTIG - Erst die Restriction z.B. reject_unverified_recipient stößt den Verifizierungsprozess an, deshalb sind Tests aus mynetworks nicht zielführend!

:!: HINWEIS - Nachfolgend soll vom Standardspeicherort abgewichen werden, da unter einem anderen Pfad eine Auslagerung logischer und ggf. praktikabler erscheint.

Der Standardspeicherort für die address_verify_map ist

  • data_directory = /var/lib/postfix erweitert um eine Map verify_cache

Nachfolgend soll der neue Speicherort unter

  • queue_directory = /var/spool/postfix erweitert um ein Verzeichnis und eine Map /verify/verify_cache

gesetzt werden.

Dieser beinhaltet die Variable $queue_directory, welche auf das Verzeichnis /var/spool/postifx zeigt und alle Queues von Postfix beinhaltet und oft auf einem anderen Datenträger oder Partition wie Postfix selbst liegt und dadurch ggf. besser geeignet ist, da hier ein Dateisystemüberlauf besser abgefangen werden kann.

Dazu muss in diesem Beispiel ein neues Verzeichnis mit nachfolgendem Befehl angelegt werden:

# mkdir /var/spool/postfix/verify

Anschließend müssen für das neu angelegte Verzeichnis, mit nachfolgenden Befehlen, die entsprechenden Besitzrechte

# chown -R postfix:root /var/spool/postfix/verify

und die entsprechenden Dateirechte

# chmod -R 700 /var/spool/postfix/verify

gesetzt werden.

:!: WICHTIG - Die Konfigurationsdatei wird direkt von Postfix verwaltet und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

/etc/postfix/master.cf

:!: HINWEIS - Nachfolgende Überprüfungen sind in der Konfigurationsdatei /etc/postfix/main.cf durchzuführen.

Information Beschreibung
Dokumentation http://www.postfix.org/verify.8.html

Um Dynamische Adress-Verifizierung (Dynamic address verification) nutzen zu können, muss zusätzlich das Modul

  • verify

in der Konfigurationsdatei /etc/postfix/master.cf, aktiviert sein, was standardmäßig der Fall ist und wie folgt aussehen sollte:

(Nur relevanter Ausschnitt)

...
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
...
verify    unix  -       -       n       -       1       verify
...

:!: WICHTIG - Damit Änderungen allen Konfigurationsdateien wirksam werden, ist ein Postfix restart erforderlich!

:!: WICHTIG - Nachfolgende beide Befehle können bzw. sollten nicht im laufenden Betrieb ausgeführt werden! (Evtl. zur Inhalt Einsicht die Datei vorher an einen anderen Speicherort kopieren)

Um den Inhalt der address_verify_map einsehen zu können, kann nachfolgender Befehl genutzt werden:

# postmap -s btree:/var/spool/postfix/verify/verify_cache
_LAST_CACHE_CLEANUP_COMPLETED_	1440530931
klaus@tachtler.net	0:0:1440530931:delivers to mailbox

Um e-Mail-Adressen aus der address_verify_map entfernen zu können, kann nachfolgender Befehl genutzt werden:

# postmap -d klaus@tachtler.net btree:/var/spool/postfix/verify/verify_cache

:!: HINWEIS - Falls keine ungültigen Adressen, also negative Ergebnisse gespeichert werden sollen, kann nachfolgender Parameter verändert werden

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#address_verify_negative_cache
Defaultwert
address_verify_negative_cache = yes
Möglicher Wert
address_verify_negative_cache = no
Beschreibung Aktivieren oder Deaktiviert das Zwischenspeichern von gescheiterten Adressprüfung (ungültigen Adressen). Wenn diese Funktion aktiviert ist, kann der Cache schnell mit Müll verschmutzen. Wenn diese Funktion deaktiviert ist, führt dies zu vermehrt Anfragen durch Postfix.

Eigene Bounce Templates

Eine Auflistung der Möglichen Meldungen, sprich die Originalmeldungen, können mit nachfolgendem Befehl zur Anzeige gebracht werden:

# postconf -b
expanded_failure_text = <<EOF
This is the mail system at host mx1.tachtler.net.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system
EOF

expanded_delay_text = <<EOF
This is the mail system at host mx1.tachtler.net.

####################################################################
# THIS IS A WARNING ONLY.  YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
####################################################################

Your message could not be delivered for more than 0 hour(s).
It will be retried until it is 5 day(s) old.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system
EOF

expanded_success_text = <<EOF
This is the mail system at host mx1.tachtler.net.

Your message was successfully delivered to the destination(s)
listed below. If the message was delivered to mailbox you will
receive no further notifications. Otherwise you may still receive
notifications of mail delivery errors from other systems.

                   The mail system
EOF

expanded_verify_text = <<EOF
This is the mail system at host mx1.tachtler.net.

Enclosed is the mail delivery report that you requested.

                   The mail system
EOF

und beinhaltet nur englischsprachige Textbausteine für nachfolgende Meldungen:

  • undeliverable mail - unzustellbare Post
  • delayed mail - verzögerte Mail
  • successful delivery - erfolgreiche Zustellung
  • delivery verification - Auslieferung Verifikation.

Die Anpassung der von Meldungen, die Postfix bei nachfolgenden Ereignissen ausgibt, bietet die Möglichkeit auch deutsche Texte oberhalb der originalen englischsprachigen Meldungen anzubringen.

Eine bereits vorgefertigte Konfigurationsdatei, kann unter nachfolgendem externen Link heruntergeladen werden:

/etc/postfix/bounce.de-DE.cf

Nachfolgende Konfigurationsdatei wurde von mir erstellt:

# Erstellt von Klaus Tachtler am 2015-08-26.
# ------------------------------------------
# e-Mail  : klaus@tachtler.net
# Homepage: http://www.tachtler.net
# DokuWiki: http://www.dokuwiki.tachtler.net
# ------------------------------------------
 
#
# The failure template is used when mail is returned to the sender;
# either the destination rejected the message, or the destination
# could not be reached before the message expired in the queue.
#
 
failure_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Mail Delivery System)
Subject: Unzustellbare Nachricht =?utf-8?b?UsO8Y2tnYWJl?= an den Abesender / Undelivered Mail Returned to Sender
Postmaster-Subject: Postmaster Copy: Undelivered Mail
 
Dies ist eine automatisiert erstellte Nachricht von $myhostname.
 
Es tut mir leid, Ihnen mitteilen zu müssen, dass Ihre Nachricht
an einen oder mehrere Empfänger nicht zugestellt werden konnte.
 
Die unzustellbare Nachricht befindet sich am Ende dieser Nachricht.
 
Für Rückfragen, senden Sie bitte eine E-Mail an postmaster@$mydomain
 
Bei Rückfragen, fügen Sie bitte diesen Problembericht an, wobei
Sie den Inhalt Ihrer ursprünglichen Nachricht entfernen können.
 
          Erstellt von $mail_name auf $myhostname.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host $myhostname.
 
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
 
For further assistance, please send mail to postmaster@$mydomain
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
                   The mail system
EOF
 
 
#
# The delay template is used when mail is delayed. Note a neat trick:
# the default template displays the delay_warning_time value as hours
# by appending the _hours suffix to the parameter name; it displays
# the maximal_queue_lifetime value as days by appending the _days
# suffix.
#
# Other suffixes are: _seconds, _minutes, _weeks. There are no other
# main.cf parameters that have this special behavior.
#
# You need to adjust these suffixes (and the surrounding text) if
# you have very different settings for these time parameters.
#
 
delay_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Mail Delivery System)
Subject: =?utf-8?b?VmVyesO2Z2VydGU=?= Nachricht (Zustellung in Bearbeitung) / Delayed Mail (still being retried)
Postmaster-Subject: Postmaster Warning: Delayed Mail
 
Dies ist eine automatisiert erstellte Nachricht von $myhostname.
 
####################################################################
# INFORMATION: IHRE NACHRICHT, MUSS NICHT ERNEUT VERSENDET WERDEN. #
####################################################################
 
Ihre Nachricht konnte seit mehr als $delay_warning_time_hours Stunde(n) nicht zugestellt werden.
 
Eine Zustellung wird, bis Ihre Nachricht $maximal_queue_lifetime_days Tag(e) alt ist, weiterhin
versucht.
 
Für Rückfragen, senden Sie bitte eine E-Mail an postmaster@$mydomain
 
Bei Rückfragen, fügen Sie bitte diesen Problembericht an, wobei
Sie den Inhalt Ihrer ursprünglichen Nachricht entfernen können.
 
          Erstellt von $mail_name auf $myhostname.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host $myhostname.
 
####################################################################
# THIS IS A WARNING ONLY.  YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
####################################################################
 
Your message could not be delivered for more than $delay_warning_time_hours hour(s).
It will be retried until it is $maximal_queue_lifetime_days day(s) old.
 
For further assistance, please send mail to postmaster.
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
                   The mail system
EOF
 
 
#
# The success template is used when mail is delivered to mailbox,
# when an alias or list is expanded, or when mail is delivered to a
# system that does not announce DSN support. It is an error to specify
# a Postmaster-Subject: here.
#
 
success_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Mail Delivery System)
Subject: Benachrichtigung =?utf-8?b?w7xiZXI=?= erfolgreiche Zustellung / Successful Mail Delivery Report
 
Dies ist eine automatisiert erstellte Nachricht von $myhostname.
 
Ihre Nachricht konnte erfolgreich an nachfolgend(e) aufgeführte(n)
E-Mail-System(e) zugestellt werden. Bei der Zustellung in das Postfach
erfolgt keine weitere Benachrichtigung. 
 
Falls es jedoch bei der Zustellung in das Postfach zu Fehlern kommen
sollte, erfolgt eine gesonderte Benachrichtigung des entsprechenden
E-Mail-Systems.
 
          Erstellt von $mail_name auf $myhostname.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host $myhostname.
 
Your message was successfully delivered to the destination(s)
listed below. If the message was delivered to mailbox you will
receive no further notifications. Otherwise you may still receive
notifications of mail delivery errors from other systems.
 
                   The mail system
EOF
 
 
#
# The verify template is used for address verification (sendmail -bv
# address...) or for verbose mail delivery (sendmail -v address...).
# It is an error to specify a Postmaster-Subject: here.
#
 
verify_template = <<EOF
Charset: utf-8
From: MAILER-DAEMON (Mail Delivery System)
Subject: Zustellungsbericht / Mail Delivery Status Report
 
Dies ist eine automatisiert erstellte Nachricht von $myhostname.
 
Mit dieser Nachricht erhalten Sie den von Ihnen angeforderten Zustellungsbericht.
 
          Erstellt von $mail_name auf $myhostname.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host $myhostname.
 
Enclosed is the mail delivery report that you requested.
 
                   The mail system
EOF

bounce_template_file

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#bounce_template_file
Defaultwert
bounce_template_file
Neuer Wert
bounce_template_file = /etc/postfix/bounce.de-DE.cf
Beschreibung Pfad- und Dateiname einer Konfigurationsdatei mit Bounce-Nachricht Vorlagen. Diese überschreiben die integrierten Vorlagen von Delivery Status Notification (DSN) Meldungen für nachfolgende Auflistung
  • undeliverable mail - unzustellbare Post
  • delayed mail - verzögerte Mail
  • successful delivery - erfolgreiche Zustellung
  • delivery verification - Auslieferung Verifikation.

Eine Überprüfung, wie die Meldungen nach erfolgreicher Einbindung einer eigenen Konfigurationsdatei aussehen, kann wiederum durch Aufruf des nachfolgenden Befehl, durchgeführt werden:

# postconf -b
expanded_failure_text = <<EOF
Dies ist eine automatisiert erstellte Nachricht von mx1.tachtler.net.
 
Es tut mir leid, Ihnen mitteilen zu müssen, dass Ihre Nachricht
an einen oder mehrere Empfänger nicht zugestellt werden konnte.
 
Die unzustellbare Nachricht befindet sich am Ende dieser Nachricht.
 
Für Rückfragen, senden Sie bitte eine E-Mail an postmaster@tachtler.net
 
Bei Rückfragen, fügen Sie bitte diesen Problembericht an, wobei
Sie den Inhalt Ihrer ursprünglichen Nachricht entfernen können.
 
          Erstellt von Postfix auf mx1.tachtler.net.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host mx1.tachtler.net.
 
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
 
For further assistance, please send mail to postmaster@tachtler.net
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
                   The mail system
EOF
 
expanded_delay_text = <<EOF
Dies ist eine automatisiert erstellte Nachricht von mx1.tachtler.net.
 
####################################################################
# INFORMATION: IHRE NACHRICHT, MUSS NICHT ERNEUT VERSENDET WERDEN. #
####################################################################
 
Ihre Nachricht konnte seit mehr als 0 Stunde(n) nicht zugestellt werden.
 
Eine Zustellung wird, bis Ihre Nachricht 5 Tag(e) alt ist, weiterhin
versucht.
 
Für Rückfragen, senden Sie bitte eine E-Mail an postmaster@tachtler.net
 
Bei Rückfragen, fügen Sie bitte diesen Problembericht an, wobei
Sie den Inhalt Ihrer ursprünglichen Nachricht entfernen können.
 
          Erstellt von Postfix auf mx1.tachtler.net.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host mx1.tachtler.net.
 
####################################################################
# THIS IS A WARNING ONLY.  YOU DO NOT NEED TO RESEND YOUR MESSAGE. #
####################################################################
 
Your message could not be delivered for more than 0 hour(s).
It will be retried until it is 5 day(s) old.
 
For further assistance, please send mail to postmaster.
 
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
 
                   The mail system
EOF
 
expanded_success_text = <<EOF
Dies ist eine automatisiert erstellte Nachricht von mx1.tachtler.net.
 
Ihre Nachricht konnte erfolgreich an nachfolgend(e) aufgeführte(n)
E-Mail-System(e) zugestellt werden. Bei der Zustellung in das Postfach
erfolgt keine weitere Benachrichtigung. 
 
Falls es jedoch bei der Zustellung in das Postfach zu Fehlern kommen
sollte, erfolgt eine gesonderte Benachrichtigung des entsprechenden
E-Mail-Systems.
 
          Erstellt von Postfix auf mx1.tachtler.net.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host mx1.tachtler.net.
 
Your message was successfully delivered to the destination(s)
listed below. If the message was delivered to mailbox you will
receive no further notifications. Otherwise you may still receive
notifications of mail delivery errors from other systems.
 
                   The mail system
EOF
 
expanded_verify_text = <<EOF
Dies ist eine automatisiert erstellte Nachricht von mx1.tachtler.net.
 
Mit dieser Nachricht erhalten Sie den von Ihnen angeforderten Zustellungsbericht.
 
          Erstellt von Postfix auf mx1.tachtler.net.
 
 
                   INTERNATIONAL VERSION 
 
This is the mail system at host mx1.tachtler.net.
 
Enclosed is the mail delivery report that you requested.
 
                   The mail system
EOF

Erweiterte Konfiguration

Neben den Basis-Konfigurationen, welche unter nachfolgendem internen Link, durchgeführt wurden:

sowie nachfolgende Konfigurationen, unter ebenfalls nachfolgenden Links

können noch weitere tiefgreifender Konfigurationen durchgeführt werden.

default_database_type

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#default_database_type
Defaultwert
default_database_type = hash
Neuer Wert
default_database_type = btree
Beschreibung Der Parameter regelt, welcher der Standard Datentyp sein soll, wenn der Postfix-Befehl postmap, ohne Angabe eines Datentyps ausgeführt wird.

:!: HINWEIS - Da die der Datentyp btree schneller als der Datentyp hash auswertbar ist und dieser in den vorherig gezeigten Konfigurationen häufiger zu Einsatz kommt, soll hier auch btree zum Standard Datentyp gemacht werden, da diese Angabe dann bei der Anwendung des Postfix-Befehl postmap weggelassen werden kann.

masquerade_domains

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#masquerade_domains
Defaultwert
masquerade_domains = 
Neuer Wert
masquerade_domains = $mydomain
Beschreibung Optionale Liste von Domains, deren Sub-Domain-Struktur welche sich in einer e-Mail-Adressen befindet, entfernt wird.

Nachfolgendes Beispiel demonstriert die Funktionsweise:

Die e-Mail-Adresse wird von links nach rechts verarbeitet und die Verarbeitung hält an dem ersten Übereinstimmung an. Somit würde bei einer Definition von

  • masquerade_domains = foo.example.com example.com

aus

  • user@any.thing.foo.example.com –> user@foo.example.com werden, und aus
  • user@any.thing.else.example.com –> user@example.com

werden.

masquerade_exceptions

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#masquerade_exceptions
Defaultwert
masquerade_domains = 
Neuer Wert
masquerade_domains = root, mailer-daemon
Beschreibung Optionale Liste von localpart Angaben, die von masquerade_domains ausgenommen werden, auch wenn der domainpart bzw. subdomainpart in masquerade_domains aufgelistet ist.

:!: HINWEIS - Typischerweise ist dies oft bei den lokalen Benutzerkonten wie root oder den localpart der e-Mail-Adresse mit mailer-deamon der Fall.

parent_domain_matches_subdomains

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#parent_domain_matches_subdomains
Defaultwert
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,
permit_mx_backup_networks,qmqpd_authorized_clients,relay_domains,smtpd_access_maps
Neuer Wert
parent_domain_matches_subdomains =
        debug_peer_list,
        fast_flush_domains,
        mynetworks,
        permit_mx_backup_networks,
        qmqpd_authorized_clients
Beschreibung Der Parameter regelt, in welchen Lookup Tabellen Postfix bei der Angabe von z.B. tachtler.net ohne zusätzliche Definition auch Subdomänen, wie .tachtler.net, diese in seine Auswertung mit einfließen lassen soll.

:!: HINWEIS - Nachfolgende Einträge wurden aus der Liste entfernt:

  • relay_domains

Für welche Zieldomänen (und Subdomänen davon) sich Postfix als System Mail-Relay zuständig fühlt. Hier soll keine automatische Zuständigkeit für Subdomänen gelten, sonder diese müssen explizit definiert werden, um unerwünschten Weiterleitungen vorzubeugen.

  • smtpd_access_maps

Postfix soll nicht bei Lookup Tabellen eine automatische Zuständigkeit für Subdomänen ausführen, sonder diese müssen ebenfalls explizit definiert werden, um unerwünschten Weiterleitungen vorzubeugen.

recipient_delimiter

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#recipient_delimiter
Defaultwert
recipient_delimiter = 
Neuer Wert
recipient_delimiter = +
Beschreibung Optionale Mail address extensions (e-Mail Adressenerweiterung) welche durch ein bestimmtes Zeichen getrennt, weitere Informationen zwischen dem localpart und dem @-Zeichen erlauben.

Nachfolgendes Beispiel demonstriert die Funktionsweise:

Die e-Mail-Adresse wird wie folgt um eine Mail address extensions (e-Mail Adressenerweiterung) ergänzt:

  • user+irgendwas@example.com

:!: HINWEIS - Die so erweiterte e-Mail-Adresse kann in verschiedenen Lookup Tabellen ebenfalls nun ausgewertet werden z.B. virtual.

show_user_unknown_table_name

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#show_user_unknown_table_name
Defaultwert
show_user_unknown_table_name = yes
Neuer Wert
show_user_unknown_table_name = no
Beschreibung Rückgabe des Tabellennamens bei der Fehlermeldung „User unknown“ in der Antworten an den einliefernden e-Mail Server, in der der Empfänger nicht gefunden wurde. Die zusätzliche Angabe der Tabelle, macht die Fehlersuche einfacher, enthüllt aber auch Informationen, über die interne Benutzerverwaltung.
Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_reject_footer
Defaultwert
smtpd_reject_footer = 
Neuer Wert
smtpd_reject_footer = \c. (smtpd) For assistance, contact YOUR postmaster or 
administrator. He can achieve OUR postmaster via email: <postmaster@tachtler.net>. In any 
case, please provide the following information in your problem report: This error message, 
time ($localtime), client ($client_address), port ($client_port) and server ($server_name).
Beschreibung Optionale zusätzliche Angaben, die an jede Postfix SMTP-Server 4xx oder 5xx-Antwort angehängt werden.

:!: HINWEIS - Der obige Text dient dazu, in der Postfix LOG-Datei, leichter Datensätze für eine fehlgeschlagene SMTP-Sitzung zu finden. Der Text selbst ist nicht in der eigenen LOG-Datei des Postfix SMTP-Server protokolliert.

Nachfolgende Tabelle zeigt optionale Variablen, welche in den Text mit eingebaut werden können:

Variable Beschreibung
client_address Die Client-IP-Adresse, die in der LOG-Datei protokolliert wird.
client_port Der Client-TCP-Port, der in der LOG-Datei protokolliert wird.
localtime Die lokale Server Zeit (Mmm dd hh:mm:ss), die in der LOG-Datei protokolliert wird.
server_name Der Hostname (aus myhostname) des Servers.

unverified_recipient_reject_reason

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unverified_recipient_reject_reason
Defaultwert
unverified_recipient_reject_reason = 
Neuer Wert
unverified_recipient_reject_reason = Recipient address lookup failed
Beschreibung Antwort des Postfix SMTP-Servers, wenn die Einlieferung einer e-Mail mit reject_unverified_recipient abgelehnt wird. Unterdrückt den numerischen SMTP-Antwort-Code und/oder den erweiterten Statuscode. Standardmäßig enthält die Antwort die tatsächlichen Adressprüfungsdetails.

unverified_sender_reject_reason

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#unverified_sender_reject_reason
Defaultwert
unverified_sender_reject_reason = 
Neuer Wert
unverified_sender_reject_reason = Sender address lookup failed
Beschreibung Antwort des Postfix SMTP-Servers, wenn die Einlieferung einer e-Mail mit reject_unverified_sender abgelehnt wird. Unterdrückt den numerischen SMTP-Antwort-Code und/oder den erweiterten Statuscode. Standardmäßig enthält die Antwort die tatsächlichen Adressprüfungsdetails.

SASL-Konfiguration

SMTP-Authentifizierung bietet Die Möglichkeit, mit der sich Clients identifizieren können, wenn diese nicht aus dem eigenen Netzwerk kommen, trotzdem aber Postfix zum Versand von e-Mails nutzen sollen. Ein Beispiel hierfür sind Smartphones.

Postfix kann bei einer SMTP-Authentifizierung dem Client gestatten, dass dieser über Postfix e-Mails verschicken (relay) darf, obwohl dieser nicht aus einem vertrauenswürdigen Netz (mynetworks) stammt.

Es gibt zwei gebräuchliche Möglichkeiten SMTP-Authentifizierung zu realisieren

:!: HINWEIS - Nachfolgend soll die Konfiguration über Cyrus-SASL durchgeführt werden.

Cyrus-SASL

Beim Einsatz von Cyrus-SASL gibt es verschiedene Möglichkeiten, wie die SMTP-Authentifizierung Server seitig implementiert werden kann:

  • saslauthd
    • Zugriffsmethoden:
      • getpwent, shadow, pam, sasldb, ldap, rimap und kerberos.
    • Vorteil:
      • mächtiger Daemon, der mit root-Rechten gestartet, Zugriff auf viele „Backends“ hat
    • Nachteil:
      • beherrscht nur PLAINTEXT-Mechanismen zur Authentifizierung
  • authdaemond
    • Zugriffsmethoden:
      • authuserdb, authpam, authpgsql, authmysql, authldap und authcustom
    • Vorteil:
      • Zugriff auf alle Backends, via authlib, auch solche die saslauthd nicht unterstützt
    • Nachteil:
      • beherrscht nur PLAINTEXT-Mechanismen zur Authentifizierung
  • auxprop
    • Zugriffsmethoden:
      • sasldb, sql und ldap
    • Vorteil:
      • modularer Aufbau (auxprop-plugins)
      • beherrscht umfangreiche Mechanismen zur Authentifizierung
    • Nachteil:
      • kein Zugriff auf Authentifizierungsmöglichkeiten, welche über die Rechte des auxprop-Benutzers hinausgehen und die höhere Dateisystemrechte erfordern

:!: HINWEIS - Nachfolgend soll die Konfiguration über auxprop - sql durchgeführt werden.

cyrus-sasl-plain

Postfix beherrscht verschiedene Methoden zur SMTP-Authentifizierung. Einer dieser Methoden ist die Authentifizierung durch PLAINTEXT - „Klartext“-Passwörter (welche die Übertragungsart des Passworts bezeichnet).

Hierdurch werden die SMTP-Authentifizierungsmethoden:

  • PLAIN
  • LOGIN

angeboten!

Zur Installation der SMTP-Authentifizierungsmethoden in Postfix wird nachfolgendes Paket benötigt:

  • cyrus-sasl-plain - ist im base-Repository von CentOS enthalten

Mit nachfolgendem Befehl, wird das Paket cyrus-sasl-plain installiert:

# yum install cyrus-sasl-plain
Loaded plugins: changelog, priorities
130 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-plain.x86_64 0:2.1.26-17.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package                 Arch          Version                Repository   Size
================================================================================
Installing:
 cyrus-sasl-plain        x86_64        2.1.26-17.el7          base         38 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 38 k
Installed size: 39 k
Is this ok [y/d/N]: y
Downloading packages:
cyrus-sasl-plain-2.1.26-17.el7.x86_64.rpm                  |  38 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : cyrus-sasl-plain-2.1.26-17.el7.x86_64                        1/1 
  Verifying  : cyrus-sasl-plain-2.1.26-17.el7.x86_64                        1/1 

Installed:
  cyrus-sasl-plain.x86_64 0:2.1.26-17.el7                                       

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-plain installiert wurden.

# rpm -qil cyrus-sasl-plain
Name        : cyrus-sasl-plain
Version     : 2.1.26
Release     : 17.el7
Architecture: x86_64
Install Date: Thu 27 Aug 2015 08:58:59 AM CEST
Group       : System Environment/Libraries
Size        : 39968
License     : BSD with advertising
Signature   : RSA/SHA256, Fri 04 Jul 2014 03:05:21 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : cyrus-sasl-2.1.26-17.el7.src.rpm
Build Date  : Tue 10 Jun 2014 06:15:13 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : PLAIN and LOGIN authentication support for Cyrus SASL
Description :
The cyrus-sasl-plain package contains the Cyrus SASL plugins which support
PLAIN and LOGIN authentication schemes.
/usr/lib64/sasl2/liblogin.so
/usr/lib64/sasl2/liblogin.so.3
/usr/lib64/sasl2/liblogin.so.3.0.0
/usr/lib64/sasl2/libplain.so
/usr/lib64/sasl2/libplain.so.3
/usr/lib64/sasl2/libplain.so.3.0.0

cyrus-sasl-md5

Postfix beherrscht verschiedene Methoden zur SMTP-Authentifizierung. Einer dieser Methoden ist die Authentifizierung durch Shared Secret-Machanismen - „MD5“-Verschlüssslete-Passwörter (welche die Übertragungsart des Passworts bezeichnet).

Hierdurch werden die SMTP-Authentifizierungsmethoden:

  • CRAM-MD5
  • DIGEST-MD5

angeboten!

Zur Installation der Authentifizierungsmethode plain in Postfix wird nachfolgendes Paket benötigt:

  • cyrus-sasl-md5 - ist im base-Repository von CentOS enthalten

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-plain installiert:

# yum install cyrus-sasl-md5
Loaded plugins: changelog, priorities
130 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-md5.x86_64 0:2.1.26-17.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package                Arch           Version               Repository    Size
================================================================================
Installing:
 cyrus-sasl-md5         x86_64         2.1.26-17.el7         base          55 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 55 k
Installed size: 80 k
Is this ok [y/d/N]: y
Downloading packages:
cyrus-sasl-md5-2.1.26-17.el7.x86_64.rpm                    |  55 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : cyrus-sasl-md5-2.1.26-17.el7.x86_64                          1/1 
  Verifying  : cyrus-sasl-md5-2.1.26-17.el7.x86_64                          1/1 

Installed:
  cyrus-sasl-md5.x86_64 0:2.1.26-17.el7                                         

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-md5 installiert wurden.

# rpm -qil cyrus-sasl-md5
Name        : cyrus-sasl-md5
Version     : 2.1.26
Release     : 17.el7
Architecture: x86_64
Install Date: Thu 27 Aug 2015 09:13:58 AM CEST
Group       : System Environment/Libraries
Size        : 82048
License     : BSD with advertising
Signature   : RSA/SHA256, Fri 04 Jul 2014 03:05:14 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : cyrus-sasl-2.1.26-17.el7.src.rpm
Build Date  : Tue 10 Jun 2014 06:15:13 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : CRAM-MD5 and DIGEST-MD5 authentication support for Cyrus SASL
Description :
The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support
CRAM-MD5 and DIGEST-MD5 authentication schemes.
/usr/lib64/sasl2/libcrammd5.so
/usr/lib64/sasl2/libcrammd5.so.3
/usr/lib64/sasl2/libcrammd5.so.3.0.0
/usr/lib64/sasl2/libdigestmd5.so
/usr/lib64/sasl2/libdigestmd5.so.3
/usr/lib64/sasl2/libdigestmd5.so.3.0.0

cyrus-sasl-sql

:!: HINWEIS - Aufgrund von Kompatibilitätsproblemen, sollten nachfolgende Pakete

  • cyrus-sasl-sql
  • cyrus-sasl-ldap

nicht gemeinsam installiert sein !

Postfix soll mit einer Anbindung an eine SQL-Datenbank zur SMTP-Authentifizierung als Backend betrieben werden.

Zur Installation der SQL-Datenbank-Anbindung von Postfix, wird nachfolgendes Paket benötigt:

  • cyrus-sasl-sql - ist im base-Repository von CentOS enthalten

Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-sql installiert:

# yum install cyrus-sasl-sql
Loaded plugins: changelog, priorities
130 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package cyrus-sasl-sql.x86_64 0:2.1.26-17.el7 will be installed
--> Processing Dependency: libpq.so.5()(64bit) for package: cyrus-sasl-sql-2.1.26-17.el7.x86_64
--> Running transaction check
---> Package postgresql-libs.x86_64 0:9.2.13-1.el7_1 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package               Arch         Version                 Repository     Size
================================================================================
Installing:
 cyrus-sasl-sql        x86_64       2.1.26-17.el7           base           37 k
Installing for dependencies:
 postgresql-libs       x86_64       9.2.13-1.el7_1          updates       230 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 267 k
Installed size: 692 k
Is this ok [y/d/N]: y
Downloading packages:
(1/2): postgresql-libs-9.2.13-1.el7_1.x86_64.rpm           | 230 kB   00:00     
(2/2): cyrus-sasl-sql-2.1.26-17.el7.x86_64.rpm             |  37 kB   00:00     
--------------------------------------------------------------------------------
Total                                              814 kB/s | 267 kB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : postgresql-libs-9.2.13-1.el7_1.x86_64                        1/2 
  Installing : cyrus-sasl-sql-2.1.26-17.el7.x86_64                          2/2 
  Verifying  : cyrus-sasl-sql-2.1.26-17.el7.x86_64                          1/2 
  Verifying  : postgresql-libs-9.2.13-1.el7_1.x86_64                        2/2 

Installed:
  cyrus-sasl-sql.x86_64 0:2.1.26-17.el7                                         

Dependency Installed:
  postgresql-libs.x86_64 0:9.2.13-1.el7_1                                       

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-sql installiert wurden.

# rpm -qil cyrus-sasl-sql
Name        : cyrus-sasl-sql
Version     : 2.1.26
Release     : 17.el7
Architecture: x86_64
Install Date: Thu 27 Aug 2015 09:24:11 AM CEST
Group       : System Environment/Libraries
Size        : 28320
License     : BSD with advertising
Signature   : RSA/SHA256, Fri 04 Jul 2014 03:05:28 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : cyrus-sasl-2.1.26-17.el7.src.rpm
Build Date  : Tue 10 Jun 2014 06:15:13 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://asg.web.cmu.edu/sasl/sasl-library.html
Summary     : SQL auxprop support for Cyrus SASL
Description :
The cyrus-sasl-sql package contains the Cyrus SASL plugin which supports
using a RDBMS for storing shared secrets.
/usr/lib64/sasl2/libsql.so
/usr/lib64/sasl2/libsql.so.3
/usr/lib64/sasl2/libsql.so.3.0.0

/etc/sasl2/smtpd.conf

Nachfolgende Konfigurationsdatei

  • /etc/sasl2/smtpd.conf

regelt, welches Modul und welches Backend-System für die Authentifizierung durch Postfix verwendet werden soll.

Voraussetzungen für die nachfolgende Konfiguration, ist die Installation von Postfix Admin wie unter nachfolgendem internen Link dargestellt:

Hier sollen nachfolgend genanntes Modul und ebenfalls nachfolgend genanntes Backend zum Einsatz kommen:

  • Modul: auxprop
  • Backend: sql
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
sql_engine: mysql
sql_hostnames: db.tachtler.net
sql_user: postfixuser
sql_passwd: geheim
sql_database: postfix
sql_select: SELECT %p FROM mailbox WHERE username = '%u@%r' AND active = 1

Erklärung:

  • %p = password
  • %u = localpart@domain.tld
  • %r = localpart@domain.tld (realm oder domain-part)

smtpd_sasl_auth_enable

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_sasl_auth_enable
http://www.postfix.org/SASL_README.html
Defaultwert
smtpd_sasl_auth_enable = no
Neuer Wert
smtpd_sasl_auth_enable = yes
Beschreibung Aktiviert die Nutzung der SASL-Authentifizierung.

:!: WICHTIG - Falls die SASL-Authentifizierung nicht auf allen Ports angeboten werden soll, ist folgendes Vorgehen möglich!

Der Parameter smtpd_sasl_auth_enable wird

  • nicht in der Konfigurationsdatei /etc/postfix/main.cf
  • sondern in der Konfigurationsdatei /etc/postfix/master.cf

durchgeführt.

Beispiel könnte hierfür sein, dies nur auf dem submission-Port 587 anzubieten, wie nachfolgende mögliche Konfiguration zeigt:

(Nur relevanter Ausschnitt)

...
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
...
# Tachtler - enabled - 
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
...

smtpd_sasl_local_domain

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_sasl_local_domain
http://www.postfix.org/SASL_README.html
Defaultwert
smtpd_sasl_local_domain = 
Neuer Wert
smtpd_sasl_local_domain = $mydomain
Beschreibung Der Name des lokalen SASL-Authentifizierungsbereich.

smtpd_sasl_security_options

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_sasl_security_options
http://www.postfix.org/SASL_README.html
Defaultwert
smtpd_sasl_security_options = noanonymous
Neuer Wert
smtpd_sasl_security_options = noanonymous, noplaintext
Beschreibung Die SMTP-Server SASL Sicherheitsoptionen.

:!: HINWEIS - Diese sind jedoch Abhängig davon, welche SASL-Authentifizierungsmethode genutzt wird
interne Links Postfix CentOS 7 - SASL-Konfiguration

Nachfolgende Tabelle zeigt die Möglichkeiten:

Option Beschreibung
noplaintext Verbietet Methoden, die Klartext-Passwörter zu verwenden.
noactive Verbietet Methoden die einem aktiven (nicht-Wörterbuch) Angriff unterliegen.
nodictionary Verbietet Methoden die einem passiven (Wörterbuch) Angriff unterliegen.
noanonymous Verbietet Methoden, die anonyme Authentifizierung ermöglichen.
forward_secrecy Erlauben nur Methoden, die „Forward Secrecy“ unterstützen (nur Dovecot).
mutual_auth Erlauben nur Methoden, die gegenseitige Authentifizierung zur Verfügung stellen. (nicht in Cyrus SASL-Version 1)

smtpd_sasl_tls_security_options

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_sasl_tls_security_options
http://www.postfix.org/SASL_README.html
Defaultwert
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
Neuer Wert
smtpd_sasl_tls_security_options = noanonymous
Beschreibung Die SMTP-Server SASL Sicherheitsoptionen.

:!: HINWEIS - Diese sind jedoch Abhängig davon, welche SASL-Authentifizierungsmethode genutzt wird
interne Links Postfix CentOS 7 - SASL-Konfiguration
Postfix CentOS 7 - SASL-Konfiguration - smtpd_sasl_security_options

Nachfolgende Tabelle zeigt die Möglichkeiten:

Option Beschreibung
noplaintext Verbietet Methoden, die Klartext-Passwörter zu verwenden.
noactive Verbietet Methoden die einem aktiven (nicht-Wörterbuch) Angriff unterliegen.
nodictionary Verbietet Methoden die einem passiven (Wörterbuch) Angriff unterliegen.
noanonymous Verbietet Methoden, die anonyme Authentifizierung ermöglichen.
forward_secrecy Erlauben nur Methoden, die „Forward Secrecy“ unterstützen (nur Dovecot).
mutual_auth Erlauben nur Methoden, die gegenseitige Authentifizierung zur Verfügung stellen. (nicht in Cyrus SASL-Version 1)

:!: HINWEIS - Die Nutzung von „Klartext“-Passwörtern soll hier bei einer TLS-Verschlüsselten Verbindung gestattet sein.

broken_sasl_auth_clients

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#broken_sasl_auth_clients
http://www.postfix.org/SASL_README.html
Defaultwert
broken_sasl_auth_clients = no
Neuer Wert
broken_sasl_auth_clients = yes
Beschreibung Aktiviert die Interoperabilität mit Remote-SMTP-Clients, die eine veraltete Version der Befehle zu SMTP-AUTH (RFC 4954) implementiert haben.

Beispiele für solche Clients sind Microsoft Outlook Express inklusive Version 6, Microsoft Outlook inklusive Version 2003 und Microsoft Exchange Version 5.0.

SASL-Test via Telnet und OpenSSL

Unverschlüsselte Verbindung

Um einen Test der SASL-Authnetifizierung via Telnet durchzuführen, kann folgender Aufruf von telnet genutzt werden:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net.
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
ehlo mx1.tachtler.net
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-AUTH DIGEST-MD5 CRAM-MD5
250-AUTH=DIGEST-MD5 CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

Erforderliche Eingaben:

  1. telnet mx1.tachtler.net 25
  2. ehlo mx1.tachtler.net
  3. quit

Nachfolgende Zeilen zeigen, welche SASL-Authentifizierungsmöglichkeiten von Postfix bei einem unverschlüsselten Verbindungsaufbau akzeptiert werden:

(Nur relevanter Ausschnitt):

250-AUTH DIGEST-MD5 CRAM-MD5
250-AUTH=DIGEST-MD5 CRAM-MD5

Verschlüsselte Verbindung

Um einen Test der SASL-Authnetifizierung via OpenSSL durchzuführen, kann folgender Aufruf von openssl genutzt werden:

# openssl s_client -starttls smtp -connect mx1.tachtler.net:25
CONNECTED(00000003)
depth=2 O = Root CA, OU = http://www.cacert.org, CN = CA Cert Signing Authority, emailAddress = support@cacert.org
verify return:1
depth=1 O = CAcert Inc., OU = http://www.CAcert.org, CN = CAcert Class 3 Root
verify return:1
depth=0 CN = *.tachtler.net
verify return:1
---
Certificate chain
 0 s:/CN=*.tachtler.net
   i:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
 1 s:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
 2 s:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE6jCCAtKgAwIBAgIDAi2HMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB
Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTQwNDEwMTg1MjI5WhcNMTYwNDA5
MTg1MjI5WjAZMRcwFQYDVQQDFA4qLnRhY2h0bGVyLm5ldDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAPIpr+FMiLXlHD+z6n/Uc0GRVZs3HcYKpj4puYWp
i/vgkZzJM7+YBgL8qXSeoAGRXttzk9s0LdjclLjF995ZKKsgcpVfWdF5GH97wzCY
ZStQR19PWtSXauKVzTvWC8Kh2ZZkanr/0t7MtqBdJdxXHJhZIuA4Q9jiSWVggzx/
XoAbxdJNZHnZsyG3fptkwXFK/nyjEyBL+Z7kYObXcUP7psh3EZzn1bn6oss95oyr
LQyubzRhJArEo9Josqtyh1cAgnvoesPQlbA+BxtJ9LoO94BfKwFw9Mw5Gnbhwbjx
sgruuh+Ml8CZyFfbF9HsWRuRa1syRxIEzA+U01Lp3p0/uhUCAwEAAaOB/zCB/DAM
BgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIDqDA0BgNVHSUELTArBggrBgEFBQcD
AgYIKwYBBQUHAwEGCWCGSAGG+EIEAQYKKwYBBAGCNwoDAzAzBggrBgEFBQcBAQQn
MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmNhY2VydC5vcmcvMDgGA1UdHwQx
MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNy
bDA3BgNVHREEMDAugg4qLnRhY2h0bGVyLm5ldKAcBggrBgEFBQcIBaAQDA4qLnRh
Y2h0bGVyLm5ldDANBgkqhkiG9w0BAQ0FAAOCAgEAZqJtMOD7OVEb6VYhG6y8XEKg
9zgrvw+jDyAD6ehagA9SESCwFyfAsFYDe/2yclEqsmdAaBlRXY66pIZ98y/3vmZQ
U1+TZ8TK6XoOku9TL1gZE/AOELdvMlFihtgnzj9mSaacEWgmvOoY9ELdDNpKQfHp
JBEpOJcVvYpboFt2+LB0xlSCbz8+9ZCplOTX/awD395OMFuDFLNobglrDJwXpD94
AZfTRUN2jOhXV2EUe+yyjVVVr2WhGM07pIafHhYhQalXzLIIY416O/NtCfOl9lCT
tzojDyeVdqtyeBMcDObPKCrOMy7dwQoF2EifcieCODS/7CCihVOz/cIV6j9mCL6I
d/HblAQnUzGnYmUAfLje79t6PA/BVOOg2TE27rDqsmDxfj6+DbjiR8WRquzmBgda
pp5I/mu7KB7ch4vnUJvMsAu5yvQ178syBUbadhRy3lsldpcTgwajMCyev2+7csRK
dyKFk9l+FPxtu0frGm6CSKsxL+773PN7DTooYG2451hNBnQvk/SKt5AbknMQt3FV
tqmIE4n7zenrehItSZocMdd3FHA6K6OKkWeDv1O6qL0bgVY7Yb8pCn2+/O2jux3z
uZweHc6zFhfg8IfTL6MOlfZSWlMU+q452vIXnoLVIWyLgmLGcZyVgXaumCVXopMv
1L95vruMaWTlXcGVYQg=
-----END CERTIFICATE-----
subject=/CN=*.tachtler.net
issuer=/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 5924 bytes and written 410 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 4D02CDDD12340CE6232BF5BAE267C1A3DBB43E6713DE452A33202DD8CF2FE837
    Session-ID-ctx: 
    Master-Key: 1DCE8AA00C4D1B52E334EBDD97993C8D89316FAEB87A4F51D76899B7799EF98A9D5279633C42E89AF4007C64FEFA4F85
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - ef d8 83 8f c6 d5 25 a7-ac 37 a2 b4 bd 0d 82 6d   ......%..7.....m
    0010 - 8d 0e 46 ae fb d9 9a c9-dc db ba 7c 00 a5 f6 a8   ..F........|....
    0020 - cd 89 47 d3 69 cf 0c 25-c1 0f 41 09 09 6c 6f 67   ..G.i..%..A..log
    0030 - f8 34 62 54 5a bf 32 6e-43 7c 51 44 fe 5c 5a 37   .4bTZ.2nC|QD.\Z7
    0040 - a3 91 ad 02 21 87 15 b1-4e 9f e2 dc 47 4f 21 30   ....!...N...GO!0
    0050 - b9 23 52 08 08 00 af f8-ed 87 11 49 67 c0 37 4c   .#R........Ig.7L
    0060 - 49 78 4d 0b 7a 03 15 15-8d 26 e8 13 58 4b 92 66   IxM.z....&..XK.f
    0070 - 3c 51 4f 65 ab f1 cf 99-1c 3d 47 ef aa 6a 3b ac   <QOe.....=G..j;.
    0080 - 48 66 4a d0 b3 9b 8e 38-d9 18 0e 93 84 ca b7 28   HfJ....8.......(
    0090 - 0c 2f 6f 3b b4 08 76 39-cf e4 04 86 7c 2f 60 dd   ./o;..v9....|/`.

    Start Time: 1440689713
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
250 DSN
ehlo mx1.tachtler.net
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
250-AUTH=DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
closed

Erforderliche Eingaben:

  1. openssl s_client -starttls smtp -connect mx1.tachtler.net:25
  2. ehlo mx1.tachtler.net
  3. quit

Nachfolgende Zeilen zeigen, welche SASL-Authentifizierungsmöglichkeiten von Postfix bei einem verschlüsselten Verbindungsaufbau akzeptiert werden:

(Nur relevanter Ausschnitt):

250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN
250-AUTH=DIGEST-MD5 CRAM-MD5 PLAIN LOGIN

TLS-Konfiguration

Nachfolgend soll die Verwendung eines self-signed-certificates durchgeführt werden, was grundsätzlich zur Verschlüsselten Kommunikation ausreichend ist.

Falls höhere Ansprüche an die Güte des Zertifikats gestellt werden, sprich wenn dies überprüfbar sein soll, dann ist ggf. die Verwendung eines Zertifikates von einer offiziellen Zertifikzierungsstelle, welche auch entsprechend in den Betriebssystemen standardmäßig hinterlegt sind, erforderlich.

:!: WICHTIG - Für nachfolgende Konfigurationsparameter gilt

  • smtpd_tls_'… Konfigurationen stehen für den eingehenden (incoming) Verkehr
  • smtp_tls_'… Konfigurationen stehen für den ausgehenden (outgoing) Verkehr
  • lmtp_tls_'… Konfigurationen stehen für den ausgehenden (outgoing) lokalen Verkehr

Zertifikat erstellen

Zuerst soll in aller Kürze ein Self-signed Certificate erstellt werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 -subj /CN=mail.tachtler.net -keyout /tmp/mail.tachtler.net.key -out /tmp/mail.tachtler.net.crt

Anschließend sollten im Verzeichnis /tmp die nachfolgend genannten beiden Dateien liegen

  • /tmp/mail.tachtler.net.key - SSL/TLS-Schlüssel-Datei
  • /tmp/mail.tachtler.net.crt - SSL/TLS-Zertifikats-Datei

Ob die Datein richtig erstellt worden sind, kann mit nachfolgendem Befehl überprüft werden:

# ll /tmp/mail.tachtler.net.*
-rw-r--r-- 1 root root 1115 Mar 24 15:20 /tmp/mail.tachtler.net.crt
-rw-r--r-- 1 root root 1708 Mar 24 15:20 /tmp/mail.tachtler.net.key

Wie das Zertifikat inhaltlich ausgestellt wurde, kann mit dem folgenden Befehl überprüft werden:

# openssl x509 -noout -text -in /tmp/mail.tachtler.net.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 11521682945659409234 (0xa008d4934c7avaa2)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=mail.tachtler.net
        Validity
            Not Before: Mar 23 14:20:59 2014 GMT
            Not After : Mar 20 14:20:59 2024 GMT
        Subject: CN=mail.tachtler.net
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:d3:f2:34:76:ee:75:b4:b0:b2:92:a0:7e:53:3b:
                    cc:b2:c5:3d:d5:b0:42:20:16:29:a1:96:f5:d6:47:
                    d7:dd:1c:9a:9a:33:b6:f0:67:8e:15:f8:ca:b3:16:
                    9f:85:1a:b8:e5:72:a0:30:c7:12:0a:58:f9:60:d0:
                    15:0a:38:87:17:5a:41:d7:c3:70:04:5e:77:a0:bf:
                    50:2b:11:8d:fa:2b:3b:1c:da:e0:2a:16:79:5b:54:
                    ac:c3:9e:a9:52:78:50:5a:6c:bb:09:79:64:47:de:
                    ef:41:91:f8:dc:b7:a6:3f:12:02:9e:d8:28:60:e1:
                    dd:d7:5b:9a:e5:84:bb:c0:40:62:fb:bb:e5:87:17:
                    71:d4:39:5a:43:32:ed:2d:13:41:73:73:7d:2c:71:
                    a2:da:de:51:83:bd:70:18:65:37:6a:3e:75:43:d9:
                    4e:1d:36:34:1f:c3:4a:b6:4e:8d:32:da:b0:04:a3:
                    df:c5:b9:3a:6f:85:84:93:96:a2:e4:34:75:70:a2:
                    30:99:46:8e:cd:cf:da:7e:09:6e:b3:89:a1:dd:43:
                    af:ff:0a:8d:94:e4:1d:2b:3b:95:23:4c:b5:f8:77:
                    7a:e3:60:46:a8:d2:f6:e8:dc:db:36:f5:ae:47:f9:
                    dd:68:25:bd:80:ac:dd:6f:c4:d6:3d:9e:0d:78:79:
                    1f:d5
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                F6:5E:43:5D:CB:BB:BE:6C:EE:D8:46:B1:13:3A:27:5E:14:4B:F1:25
            X509v3 Authority Key Identifier: 
                keyid:F6:5E:48:5D:CB:BC:BE:6C:BD:D8:76:B1:13:3A:27:5E:14:4B:F1:25

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: sha1WithRSAEncryption
         65:cc:20:e9:cc:01:fd:8e:d9:4d:61:f4:70:f3:c7:5e:ef:9b:
         7f:d8:db:4c:d6:46:40:34:da:b4:b0:9a:12:05:02:df:3b:37:
         ea:09:7d:8e:c0:c0:ca:f7:4e:59:20:63:d8:26:b2:81:ed:85:
         f5:1d:9e:7b:28:59:42:1d:8a:f5:e1:a7:a8:ad:81:dc:93:46:
         85:c8:2b:4f:05:c9:64:77:b1:76:39:d5:8d:91:b8:65:03:a4:
         50:c0:19:a8:03:48:4d:70:33:81:45:a4:12:6b:c6:06:39:98:
         92:1f:4c:ec:40:97:22:a7:8e:17:ce:19:53:47:6f:05:0e:f5:
         cb:e6:a5:a2:a9:3a:61:b1:0a:07:f2:51:b1:d1:19:2c:b5:82:
         95:3f:a7:8e:3c:e7:01:0f:ad:60:c3:7e:a5:bf:a8:11:6b:73:
         84:0d:e2:06:f1:01:48:e1:72:f8:30:58:09:66:20:c1:a4:ce:
         c0:3d:23:12:7f:4f:35:2a:f2:54:01:5e:99:06:c5:77:45:e5:
         00:da:4a:28:b2:fd:b0:62:77:eb:05:fe:2a:53:30:ce:de:4f:
         dd:18:8f:9d:3c:27:8f:e6:22:f4:ec:fd:f5:15:81:af:5e:53:
         d5:a7:31:52:16:90:e0:e8:00:21:7d:53:d0:64:60:23:99:23:
         8e:92:51:77

Anschließend sollte der Speicherort für die SSL/TLS-Schlüssel-Datei und die SSL/TLS-Zertifikats-Datei gewählt werden, welcher die Verzeichnisse

  • /etc/pki/postfix/certs/ und
  • /etc/pki/postfix/private

sein könnten und mit nachfolgendem Befehl erstellt werden können:

mkdir -p /etc/pki/postfix/{certs,private}

Mit nachfolgenden Befehlen können nun die Dateien in das jeweils richtige Verzeichnis kopiert werden:

# mv /tmp/mail.tachtler.net.crt /etc/pki/postfix/certs/
# mv /tmp/mail.tachtler.net.key /etc/pki/postfix/private/

Anschließend sollten nun die Dateirechte der SSL/TLS-Schlüssel-Datei wie nachfolgend beschrieben durchgeführt werden:

# chmod 400 /etc/pki/postfix/private/mail.tachtler.net.key

Zum Abschluß kann mit nachfolgendem Befehl berprüft werden, ob die Dateien im jeweils richtigen Verzeichnis gelandet sind und die richtigen dateirechte haben:

# ls -l /etc/pki/postfix/*
/etc/pki/postfix/certs:
total 8
-rw-r--r-- 1 root root 1115 Mar 23 15:20 mail.tachtler.net.crt

/etc/pki/postfix/private:
total 8
-r-------- 1 root root 1708 Mar 23 15:20 mail.tachtler.net.key

plaintext_reject_code

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#plaintext_reject_code
Defaultwert
plaintext_reject_code = 450
Neuer Wert
plaintext_reject_code = 550
Beschreibung Der numerische Postfix SMTP-Server-Antwortcode, wenn eine Anforderung von der reject_plaintext_session Einschränkung abgelehnt wird.
interner Link Postfix CentOS 7 - Restrictions-Konfigurationen - check_sender_access

smtpd_tls_ask_ccert

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_ask_ccert
Defaultwert
smtpd_tls_ask_ccert = no
Neuer Wert
smtpd_tls_ask_ccert = yes
Beschreibung Aktiviert die Nachfrage an einen Remote-SMTP-Client, ob dieser ein Client-Zertifikat präsentieren kann. Diese Informationen kommt bei zertifikatsbasierte Mail-Verkehr zum Einsatz.

(l|s)mtp(d)_tls_CAfile

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_CAfile
http://www.postfix.org/postconf.5.html#smtp_tls_CAfile
http://www.postfix.org/postconf.5.html#lmtp_tls_CAfile
Defaultwert
smtpd_tls_CAfile = 
smtp_tls_CAfile = 
lmtp_tls_CAfile = 
Neuer Wert
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
lmtp_tls_CAfile = $smtp_tls_CAfile
Beschreibung Eine Datei mit im (PEM-Format) abgelegten ROOT-CA-Zertifikate der vertrauenswürdigen Stammzertifizierungsstellen, entweder Remote-SMTP-Client-Zertifikate oder Zwischen ROOT-CA-Zertifikate.

smtpd_tls_cert_file

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_cert_file
Defaultwert
smtpd_tls_cert_file = 
Neuer Wert
smtpd_tls_cert_file = /etc/pki/postfix/certs/mail.tachtler.net.crt
Beschreibung Die Datei mit dem Zertifikat im PEM-Format.

smtpd_tls_key_file

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_key_file
Defaultwert
smtpd_tls_key_file = $smtpd_tls_cert_file
Neuer Wert
smtpd_tls_key_file = /etc/pki/postfix/private/mail.tachtler.net.key
Beschreibung Die Datei mit dem Schlüssel im PEM-Format.

(l|s)mtp(d)_tls_ciphers

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_ciphers
http://www.postfix.org/postconf.5.html#smtp_tls_ciphers
http://www.postfix.org/postconf.5.html#lmtp_tls_ciphers
Defaultwert
smtpd_tls_ciphers = medium
smtp_tls_ciphers = medium
lmtp_tls_ciphers = medium
Neuer Wert
smtpd_tls_ciphers = high
smtp_tls_ciphers = high
lmtp_tls_mandatory_ciphers = $smtp_tls_ciphers
Beschreibung Der Standard TLS Verschlüsselungsgrad.

Nachfolgende Tabelle spezifiziert die einzelnen Verschlüsselungsgrad Einstellungen:

Verschlüsselungsgrad Parameter
export tls_export_cipherlist = aNULL:-aNULL:ALL:+RC4:@STRENGTH
low tls_low_cipherlist = aNULL:-aNULL:ALL:!EXPORT:+RC4:@STRENGTH
medium tls_medium_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH
high tls_high_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH
null tls_null_cipherlist = eNULL:!aNULL

Alle Verschlüsselungsgrad Einstellungen haben eine Parameter in dem die verschiedenen Verschlüsselungsarten festgelegt werden können, diese sollten jedoch nicht abgeändert werden!

smtpd_tls_dh512_param_file smtpd_tls_dh1024_param_file

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_dh1024_param_file
http://www.postfix.org/postconf.5.html#smtpd_tls_dh512_param_file
Defaultwert
smtpd_tls_dh512_param_file = 
smtpd_tls_dh1024_param_file = 
Neuer Wert
smtpd_tls_dh512_param_file = /etc/pki/postfix/private/dh_512.pem
smtpd_tls_dh1024_param_file = /etc/pki/postfix/private/dh_2048.pem
Beschreibung Datei mit DH Parameter, welche mit nicht-Export EDH Chiffren verwenden werden.

:!: HINWEIS - Es ist kein Schreibfehler

  • smtpd_tls_dh1024_param_file = /etc/pki/postfix/private/dh_2048.pem

smtpd_tls_eecdh_grade

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_eecdh_grade
Defaultwert
smtpd_tls_eecdh_grade = strong
Neuer Wert
smtpd_tls_eecdh_grade = ultra
Beschreibung Die Sicherheitsstufe für ephemere Ellipsenkurven- Diffie-Hellman (EECDH) Schlüsselaustausch.
Stufe Beschreibung
none Deaktiviert die Nutzung von EECDH Chiffren basierend auf einem EECDH Schlüsselaustausch.
strong Verwenden EECDH mit 128 Bit. Dies ist der „Best-Practice“-Kompromiss zwischen Sicherheit und Recheneffizienz.
ultra Verwenden EECDH mit 192 Bit. Der Rechenaufwand beträgt etwa das doppelte wie bei 128 Bit. Abgesehen von den erheblichen Fortschritten, bei Angriffen auf elliptischen Kurven Kryptosysteme, ist die „starke“ Kurve ausreichend, für die meisten Anwender.

(l|s)mtp(d)_tls_exclude_ciphers

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_exclude_ciphers
http://www.postfix.org/postconf.5.html#smtp_tls_exclude_ciphers
http://www.postfix.org/postconf.5.html#lmtp_tls_exclude_ciphers
Defaultwert
smtpd_tls_exclude_ciphers = 
smtp_tls_mandatory_exclude_ciphers = 
lmtp_tls_mandatory_exclude_ciphers = 
Neuer Wert
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
smtp_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
lmtp_tls_mandatory_exclude_ciphers = $smtp_tls_exclude_ciphers
Beschreibung Liste der Chiffren oder Verschlüsselungstypen die von den SMTP-Server Sicherheitsstufen auszuschließen sind.

:!: HINWEIS - Siehe auch nachfolgenden externen Link:

(l|s)mtp(d)_tls_loglevel

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_loglevel
http://www.postfix.org/postconf.5.html#smtp_tls_loglevel
http://www.postfix.org/postconf.5.html#lmtp_tls_loglevel
Defaultwert
smtpd_tls_loglevel = 0
smtp_tls_loglevel = 0
lmtp_tls_loglevel = 0
Neuer Wert
smtpd_tls_loglevel = 1
smtp_tls_loglevel = 1
lmtp_tls_loglevel = $smtp_tls_loglevel
Beschreibung Setzen des LOG-Ausgabe Tiefe.

Nachfolgende Tabelle spezifiziert die einzelnen LOG-Ausgabe Tiefen:

LOG-Ausgabe Tiefe Beschreibung
0 Protokollierung von TLS-Aktivität ist deaktiviert.
1 Zusammenfassung nach dem der TLS-Handshake abgeschlossen ist - keine Protokollierung von Client-Zertifikat oder Verifikationsfehlern in der Zertifikatskette, wenn keine Überprüfung des Client-Zertifikat erforderlich ist.
2 Ausgabe zusätzlicher Informationen, die während des TLS-Handshake entstehen.
3 Ausgabe zusätzlicher Informationen, die während des TLS-Handshake entstehen inklusive eines hexadezimalen ASCII-Dumps.
4 Ausgabe zusätzlicher Informationen, über den kompletten Verbindunsgaufbau, inklusive eines hexadezimalen ASCII-Dumps.

(l|s)mtp(d)_tls_mandatory_ciphers

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_ciphers
http://www.postfix.org/postconf.5.html#smtp_tls_mandatory_ciphers
http://www.postfix.org/postconf.5.html#lmtp_tls_mandatory_ciphers
Defaultwert
smtpd_tls_mandatory_ciphers = medium
smtp_tls_mandatory_ciphers = medium
lmtp_tls_mandatory_ciphers = medium
Neuer Wert
smtpd_tls_mandatory_ciphers = high
smtp_tls_mandatory_ciphers = high
lmtp_tls_mandatory_ciphers = $smtp_tls_mandatory_ciphers
Beschreibung Der Standard TLS Verschlüsselungsgrad.
interne Links Postfix CentOS 7 - TLS-Konfiguration - (l|s)mtp(d)_tls_mandatory_exclude_ciphers

Nachfolgende Tabelle spezifiziert die einzelnen Verschlüsselungsgrad Einstellungen:

Verschlüsselungsgrad Parameter
export tls_export_cipherlist = aNULL:-aNULL:ALL:+RC4:@STRENGTH
low tls_low_cipherlist = aNULL:-aNULL:ALL:!EXPORT:+RC4:@STRENGTH
medium tls_medium_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH
high tls_high_cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH
null tls_null_cipherlist = eNULL:!aNULL

Alle Verschlüsselungsgrad Einstellungen haben eine Parameter in dem die verschiedenen Verschlüsselungsarten festgelegt werden können, diese sollten jedoch nicht abgeändert werden!

(l|s)mtp(d)_tls_mandatory_exclude_ciphers

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_exclude_ciphers
http://www.postfix.org/postconf.5.html#smtp_tls_mandatory_exclude_ciphers
http://www.postfix.org/postconf.5.html#lmtp_tls_mandatory_exclude_ciphers
Defaultwert
smtpd_tls_mandatory_exclude_ciphers = 
smtp_tls_mandatory_exclude_ciphers = 
lmtp_tls_mandatory_exclude_ciphers = 
Neuer Wert
smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
smtp_tls_mandatory_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDB3-SHA, KRB5-DES, CBC3-SHA
lmtp_tls_mandatory_exclude_ciphers = $smtp_tls_mandatory_exclude_ciphers
Beschreibung Liste der Chiffren oder Verschlüsselungstypen die von den obligatorischen TLS Sicherheitsstufen auszuschließen sind.
interne Links Postfix CentOS 7 - TLS-Konfiguration - (l|s)mtp(d)_tls_mandatory_ciphers

:!: HINWEIS - Siehe auch nachfolgenden externen Link:

(l|s)mtp(d)_tls_mandatory_protocols

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_protocols
http://www.postfix.org/postconf.5.html#smtp_tls_mandatory_protocols
http://www.postfix.org/postconf.5.html#lmtp_tls_mandatory_protocols
Defaultwert
smtpd_tls_mandatory_protocols = !SSLv2
smtp_tls_mandatory_protocols = !SSLv2
lmtp_tls_mandatory_protocols = !SSLv2
Neuer Wert
smtpd_tls_mandatory_protocols = !SSLv2,!SSLv3
smtp_tls_mandatory_protocols = !SSLv2,!SSLv3
lmtp_tls_mandatory_protocols = $smtp_tls_mandatory_protocols
Beschreibung Die SSL/TLS-Protokolle welche verbindlichen zur TLS-Verschlüsselung akzeptiert werden.

(l|s)mtp(d)_tls_protocols

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_protocols
http://www.postfix.org/postconf.5.html#smtp_tls_protocols
http://www.postfix.org/postconf.5.html#lmtp_tls_protocols
Defaultwert
smtpd_tls_protocols = !SSLv2
smtp_tls_protocols = !SSLv2
lmtp_tls_protocols = !SSLv2
Neuer Wert
smtpd_tls_protocols = !SSLv2,!SSLv3
smtp_tls_protocols = !SSLv2,!SSLv3
lmtp_tls_protocols = $smtp_tls_protocols
Beschreibung Die TLS-Protokolle, die ausschließen oder mit opportunistischen TLS-Verschlüsselung verwendet werden sollen.

smtpd_tls_received_header

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_received_header
Defaultwert
smtpd_tls_received_header = no
Neuer Wert
smtpd_tls_received_header = yes
Beschreibung Aktiviert das Nachrichtenkopfzeilen, Informationen über das Protokoll und Verschlüsselung als auch der Remote-SMTP-Client CommonName und der Client-Zertifikat Aussteller mit in den Received-Zeilen ausgegeben werden.

(l|s)mtp(d)_tls_security_level

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_tls_security_level
http://www.postfix.org/postconf.5.html#smtp_tls_security_level
http://www.postfix.org/postconf.5.html#lmtp_tls_security_level
Defaultwert
smtpd_tls_security_level = 
smtp_tls_security_level = 
lmtp_tls_security_level = 
Neuer Wert
smtpd_tls_security_level = may
smtp_tls_security_level = may
lmtp_tls_security_level = $smtp_tls_security_level
Beschreibung Diese Angabe sorgt erst überhaupt dafür, das die TLS-Verschlüsselung aktiviert wird! Nachfolgender Grad der geforderten TLS-Verschlüsselung kann hierbei angegeben werden.

Nachfolgende Tabelle spezifiziert die geforderte TLS-Verschlüsselung:

Verschlüsselung Beschreibung
none TLS-Verschlüsselung ist deaktiviert.
may Opportunistisches TLS-Verschlüsselung: Fordert Clients auf STARTTLS zu nutzen, aber besteht nicht daruf, dass Clients die TLS-Verschlüsselung verwenden.
encrypt Verpflichtende TLS-Verschlüsselung: Fordert Clients auf STARTTLS zu nutzen und besteht darauf, dass Clients die TLS-Verschlüsselung verwenden.

(l|s)mtp_tls_note_starttls_offer

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtp_tls_note_starttls_offer
http://www.postfix.org/postconf.5.html#lmtp_tls_note_starttls_offer
Defaultwert
smtp_tls_note_starttls_offer = no
lmtp_tls_note_starttls_offer = no
Neuer Wert
smtp_tls_note_starttls_offer = yes
lmtp_tls_note_starttls_offer = $smtp_tls_note_starttls_offer
Beschreibung Erzeugt eine LOG-Meldung über den Hostnamen des Remote-SMTP-Server, der STARTTLS anbietet, falls TLS nicht bereits für diesen Server aktiviert wurde.

tls_preempt_cipherlist

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#tls_preempt_cipherlist
Defaultwert
tls_preempt_cipherlist = no
Neuer Wert
tls_preempt_cipherlist = yes
Beschreibung Ab SSLv3 und höher verwenden Chiffre Präferenzordnung von Postfix und nicht die Cipher Präferenzordnung des entfernten Clients.

tls_random_bytes

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#tls_random_bytes
Defaultwert
tls_random_bytes = 32
Neuer Wert
tls_random_bytes = 128
Beschreibung Die Anzahl der Bytes, die tlsmgr aus tls_random_source beim (Wieder-)generieren der In-Memory-Pseudozufallszahlengenerator (PRNG) Pool verwendet.

TLS-Policies-Konfiguration

Die Konfiguration von TLS kann nicht nur golobal Konfiguriert werden, sondern auch Client/Host bezogen durchgeführt werden, z.B.

  • Bei ausgehenden e-Mails an Host A muss zwingend TLS genutzt werden
  • Bei ausgehenden e-Mails an Host B darf nicht TLS genutzt werden (weil dieser die nicht kann)
  • Bei ausgehenden e-Mails an C soll, muss aber nicht TLS genutzt werden

(l|s)mtp_tls_policy_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps
http://www.postfix.org/postconf.5.html#lmtp_tls_policy_maps
Defaultwert
smtp_tls_policy_maps =
lmtp_tls_policy_maps =
Neuer Wert
smtp_tls_policy_maps = btree:/etc/postfix/smtp_tls_policy_maps
lmtp_tls_policy_maps = btree:/etc/postfix/lmtp_tls_policy_maps
Beschreibung Legt für die Kommunikation von Postfix mit anderen Clients/Host die Art der Verschlüsselung fest, die für diesen Client/Host gelten sollen.
interner Link Postfix CentOS 7 - TLS-Policy-Konfigurieren - (l|s)mtp_tls_fingerprint_digest

Als Beispiel soll der Austausch von e-Mails mit dem Host 217.91.103.190 nur noch verschlüsselt, oder gar nicht statt finden.

Nachfolgende Tabelle zeigt die möglichen Arten der Verschlüsselung, welche konfiguriert werden können:

Art der Verschlüsselung Beschreibung
none Keine Verschlüsselung
may Opportunistisches TLS. Hierbei wäre das Senden einer e-Mail als Klartext akzeptabel, jedoch würde versucht werden eine e-Mail via TLS-Verschlüsselung auszutauschen. Mögliche optionale Attribute wie „Chiffren“, „Ausschlüsse von Chriffren“ und „Protokolle“ (beim opportunistischen TLS mit Postfix ≥ 2.6) überschreiben die Konfigurationsparameter smtp_tls_ciphers, smtp_tls_exclude_ciphers und smtp_tls_protocols. Wenn ein opportunistischer TLS-Handshake fehlschlägt, versucht Postfix die Verbindung via deaktiviert TLS durchzuführen. Dies ermöglicht den Postversand auch mit nicht-interoperablen TLS-Implementierungen.
encrypt Pflicht TLS-Verschlüsselung. Hierbei wäre das Senden einer e-Mail als Klartext inakzeptabel. Mögliche optionale Attribute wie „Chiffren“, „Ausschlüsse von Chriffren“ und „Protokolle“ (beim opportunistischen TLS mit Postfix ≥ 2.6) überschreiben die Konfigurationsparameter smtp_tls_ciphers, smtp_tls_exclude_ciphers und smtp_tls_protocols. Wenn ein opportunistischer TLS-Handshake fehlschlägt, findet auch kein Postversand statt.
dane Opportunistische DANE TLS. Die TLS-Vorgaben für das Ziel, werden über TLSA Datensätze via DNSSEC ermittelt. Wenn keine TLSA Datensätze gefunden werden, ist die effektive Sicherheitsstufe welche verwendet werden kann may. Wenn TLSA Datensätze gefunden werden, aber keine verwendbar sind, wird die effektive Sicherheitsstufe welche verwendet werden kann encrypt . Werden nutzbare TLSA Datensätze für den Remote-SMTP-Server gefunden, muss das Server-Zertifikat mit den TLSA Datensätze übereinstimmen. RFC 6698 (DANE) TLS-Authentifizierung und DNSSEC-Unterstützung ab Postfix 2.11 und höher.
dane-only Pflicht DANE TLS. Die TLS-Vorgaben für das Ziel, werden über TLSA Datensätze via DNSSEC ermittelt. Wenn keine TLSA Datensätze gefunden werden oder keine verwendbaren zu finden sind, wird keine Verbindung zu dem Server hergestellt. Werden nutzbare TLSA Datensätze für den Remote-SMTP-Server gefunden, muss das Server-Zertifikat mit den TLSA Datensätze übereinstimmen. RFC 6698 (DANE) TLS-Authentifizierung und DNSSEC-Unterstützung ab Postfix 2.11 und höher.
fingerprint Zertifikatsüberprüfung anhand des Zertifikats Fingerabdrucks (fingerprint). Ab Postfix 2.5 und höher. Bei dieser Sicherheitsstufe gibt es keine vertrauenswürdigen Zertifizierungsstellen. Der Zertifikatsvertrauenskette, Ablaufdatum, usw. werden nicht überprüft. Stattdessen wird der fingerprint, oder aber der Parameter smtp_tls_fingerprint_cert_match herangezogen, um die gültigen des Serverzertifikat zu überprüfen. Welcher Digest-Algorithmus verwendet wird, um den Fingerabdruck zu berechnen, wird im Parameter smtp_tls_fingerprint_digest gesetzt.
verify Pflicht TLS Verifikation. Bei dieser Sicherheitsstufe, bei der DNS-MX-Lookups vertraut wird, um sicher genug zu sein, wird der Name im Serverzertifikat überprüft, welcher in der Regel indirekt über authentifizierten DNS-MX-Lookups ermitelt wird. Das optionale „match“ Attribut überschreibt die im Parameter smtp_tls_verify_cert_match genannten Attribute. In der Richtlinientabelle, müssen mehrere Match-Muster und Strategien durch Doppelpunkte getrennt werden.
secure Sichere-Kanal-TLS. Bei dieser Sicherheitsstufe, werden DNS MX-Lookups verwendet, um die Client-Next-Hop-Gateway-IP-Adressen zu bestimmen. Ist dies nicht vertrauenswürdig bzw. sicher genug um einen TLS Peername sicher zu ermittel, wird stattdessen der Standardnamen im Serverzertifikat überprüft, welcher direkt aus dem nächsten Hop ermittelt wurde, oder explizit über das optionale Attribut „match“ überschreibt die im Parameter smtp_tls_secure_cert_match genannten Attribute. In der Richtlinientabelle, müssen mehrere Match-Muster und Strategien durch Doppelpunkte getrennt werden.

Dafür können z.B. die neue Konfigurationsdateien

  • /etc/postfix/smtp_tls_policy_maps
  • /etc/postfix/lmtp_tls_policy_maps

mit folgenden Befehlen neu zu erstellen:

# touch /etc/postfix/smtp_tls_policy_maps
# touch /etc/postfix/lmtp_tls_policy_maps

Danach könnte der Inhalt wie folgt aussehen (hier nur /etc/postfix/smtp_tls_policy_maps):

nausch.org    fingerprint match=F6:A2:58:4C:CA:1F:52:68:69:FF:87:73:CF:62:40:80:87:AC:21:B2

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Zum Abschluss müssen die Konfigurationsdateien in ein Datenbank-Format, z.B. das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden, wie nachfolgende Befehle zeigen:

# postmap btree:/etc/postfix/smtp_tls_policy_maps
# postmap btree:/etc/postfix/lmtp_tls_policy_maps

Anschließend sollte zwei neue Dateien mit den Namen /etc/postfix/smtp_tls_policy_maps.db und /etc/postfix/lmtp_tls_policy_maps.db entstanden sein, was mit nachfolgendem Befehl überprüft werden:

# ls -l /etc/postfix/*mtp_tls_policy_maps*
-rw-r--r-- 1 root root    0 Oct  4 14:51 /etc/postfix/lmtp_tls_policy_maps
-rw-r--r-- 1 root root 8192 Oct  4 14:52 /etc/postfix/lmtp_tls_policy_maps.db
-rw-r--r-- 1 root root   94 Oct  4 14:52 /etc/postfix/smtp_tls_policy_maps
-rw-r--r-- 1 root root 8192 Oct  4 14:52 /etc/postfix/smtp_tls_policy_maps.db

:!: HINWEIS - Um den fingerprint eines Zertifikats zu ermitteln, welches von einem e-Mail-Server angeboten wird, kann nachfolgender Befehl genutzt werden:

# openssl s_client -starttls smtp -connect mx01.nausch.org:25 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin
SHA1 Fingerprint=F6:A2:58:4C:CA:1F:52:68:69:FF:87:73:CF:62:40:80:87:AC:21:B2

(l|s)mtp_dns_support_level

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtp_dns_support_level
http://www.postfix.org/postconf.5.html#smtp_dns_support_level
Defaultwert
smtp_dns_support_level =
lmtp_dns_support_level =
Neuer Wert
smtp_dns_support_level = dnssec
lmtp_dns_support_level = dnssec
Beschreibung Legt für die Kommunikation von Postfix mit anderen Clients/Host fest, ob die Verschlüsselung dane, dane-only, die für diesen Client/Host geprüft werden kann.
interner Link Postfix CentOS 7 - TLS-Policy-Konfigurieren - (l|s)mtp_tls_policy_maps
Postfix CentOS 7 - TLS-Policy-Konfigurieren - (l|s)mtp_tls_fingerprint_digest

Falls in den neue Konfigurationsdateien

  • /etc/postfix/smtp_tls_policy_maps
  • /etc/postfix/lmtp_tls_policy_maps

ein Eintrag mit

  • dane oder
  • dane-only

enthalten ist, wie nachfolgend dargestellt (hier nur /etc/postfix/smtp_tls_policy_maps):

# nausch.org    fingerprint     match=F6:A2:58:4C:CA:1F:52:68:69:FF:87:73:CF:62:40:80:87:AC:21:B2
nausch.org      dane-only

MUSS zwingend auch

  • smtp_dns_support_level = dnssec bzw.
  • lmtp_dns_support_level = dnssec

gesetzt werden, da sonst nachfolgende Fehlermeldung im LOG erscheint (nur relevanter Ausschnitt):

...
...warning: nausch.org: dane-only configured with dnssec lookups disabled
...warning: TLS policy lookup for nausch.org/mx01.nausch.org: client TLS configuration problem
...

(l|s)mtp_tls_fingerprint_digest

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtp_tls_fingerprint_digest
http://www.postfix.org/postconf.5.html#lmtp_tls_fingerprint_digest
Defaultwert
smtp_tls_fingerprint_digest = md5
lmtp_tls_fingerprint_digest = md5
Neuer Wert
smtp_tls_fingerprint_digest = sha1
lmtp_tls_fingerprint_digest = sha1
Beschreibung Angabe des Algorithmus welcher verwendet werden soll, um bei einem Remote-SMTP-Server-Zertifikat den fingerprint (Fingerabdruck) zu ermitteln.
interner Link Postfix CentOS 7 - TLS-Policy-Konfigurieren - (l|s)mtp_tls_policy_maps

dh_param_file-update-Skript

Zur Erstellung und Aktualisieren der drei Schlüssel-Dateien

  • /etc/pki/postfix/private/dh_512.pem
  • /etc/pki/postfix/private/dh_1024.pem
  • /etc/pki/postfix/private/dh_2048.pem

kann nachfolgendes Skript verwendet werden, welches z.B. täglich, oder einmal in der Woche laufen sollte:

#!/bin/bash
 
##############################################################################
# Script-Name : dh_param_file-update.sh                                      # 
# Description : Renew the Diffie-Hellman parameter file for Postfix under    # 
#               the path                                                     #
#               - dh_512.pem                                                 # 
#               - dh_1024.pem                                                # 
#               - dh_2048.pem                                                # 
#                                                                            # 
# Last update : 28.08.2015                                                   # 
# Version     : 1.00                                                         # 
##############################################################################
 
##############################################################################
#                                H I S T O R Y                               # 
##############################################################################
# Version     : x.xx                                                         # 
# Description : <Description>                                                #
# -------------------------------------------------------------------------- # 
# Version     : x.xx                                                         # 
# Description : <Description>                                                #
# -------------------------------------------------------------------------- # 
##############################################################################
 
# Source function library.
. /etc/init.d/functions
 
# Variable declarations.
 
##############################################################################
# >>> Please edit following lines for personal command and/or configuration! #
##############################################################################
 
# CUSTOM - Script-Name.
SCRIPT_NAME='dh_param_file_update.sh'
 
# CUSTOM - PATH/FILE/PARAMETER variables.
PARAM_DIR="/etc/pki/postfix/private"
PARAM_DH512_FILE="dh_512.pem"
PARAM_DH1024_FILE="dh_1024.pem"
PARAM_DH2048_FILE="dh_2048.pem"
 
# CUSTOM - Binary.
BINARY_POSTFIX_PATH="postfix.service"
BINARY_OPENSSL_PATH='/usr/bin/openssl'
 
# CUSTOM - Mail-Recipient.
MAIL_RECIPIENT='postmaster@tachtler.net'
 
# CUSTOM - Status-Mail [Y|N].
MAIL_STATUS='N'
 
##############################################################################
# >>> Normaly there is no need to change anything below this comment line. ! #
##############################################################################
 
# Variables.
TOUCH_COMMAND=`command -v touch`
MV_COMMAND=`command -v mv`
RM_COMMAND=`command -v rm`
CAT_COMMAND=`command -v cat`
DATE_COMMAND=`command -v date`
MKDIR_COMMAND=`command -v mkdir`
PROG_SENDMAIL=`command -v sendmail`
CHOWN_COMMAND=`command -v chown`
CHMOD_COMMAND=`command -v chmod`
FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock'
FILE_LOG='/var/log/'$SCRIPT_NAME'.log'
FILE_LAST_LOG='/tmp/'$SCRIPT_NAME'.log'
FILE_MAIL='/tmp/'$SCRIPT_NAME'.mail'
VAR_HOSTNAME=`uname -n`
VAR_SENDER='root@'$VAR_HOSTNAME
VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`
 
# Functions.
function log() {
        echo $1
        echo `$DATE_COMMAND '+%Y/%m/%d %H:%M:%S'` " INFO:" $1 >>${FILE_LAST_LOG}
}
 
function retval() {
if [ "$?" != "0" ]; then
        case "$?" in
        *)
                log "ERROR: Unknown error $?"
        ;;
        esac
fi
}
 
function movelog() {
        $CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG
        $RM_COMMAND -f $FILE_LAST_LOG
        $RM_COMMAND -f $FILE_LOCK
}
 
function sendmail() {
        case "$1" in
        'STATUS')
                MAIL_SUBJECT='Status execution '$SCRIPT_NAME' script.'
        ;;
        *)
                MAIL_SUBJECT='ERROR while execution '$SCRIPT_NAME' script !!!'
        ;;
        esac
 
$CAT_COMMAND <<MAIL >$FILE_MAIL
Subject: $MAIL_SUBJECT
Date: $VAR_EMAILDATE
From: $VAR_SENDER
To: $MAIL_RECIPIENT
 
MAIL
 
$CAT_COMMAND $FILE_LAST_LOG >> $FILE_MAIL
 
$PROG_SENDMAIL -f $VAR_SENDER -t $MAIL_RECIPIENT < $FILE_MAIL
 
$RM_COMMAND -f $FILE_MAIL
 
}
 
# Main.
log ""
log "+-----------------------------------------------------------------+"
log "| Start update generating the Diffie-Hellman dh_param_file files. |"
log "+-----------------------------------------------------------------+"
log ""
log "Run script with following parameter:"
log ""
log "SCRIPT_NAME...........: $SCRIPT_NAME"
log ""
log "PARAM_DIR.............: $PARAM_DIR"
log "PARAM_DH512_FILE......: $PARAM_DH512_FILE"
log "PARAM_DH1024_FILE.....: $PARAM_DH1024_FILE"
log "PARAM_DH2048_FILE.....: $PARAM_DH2048_FILE"
log ""
log "BINARY_POSTFIX_PATH...: $BINARY_POSTFIX_PATH"
log "BINARY_OPENSSL_PATH...: $BINARY_OPENSSL_PATH"
log ""
log "MAIL_RECIPIENT........: $MAIL_RECIPIENT"
log "MAIL_STATUS...........: $MAIL_STATUS"
log ""
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$TOUCH_COMMAND" ]; then
        log "Check if command '$TOUCH_COMMAND' was found....................[FAILED]"
        sendmail ERROR
        movelog
        exit 10
else
        log "Check if command '$TOUCH_COMMAND' was found....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$MV_COMMAND" ]; then
        log "Check if command '$MV_COMMAND' was found.......................[FAILED]"
        sendmail ERROR
	movelog
        exit 11
else
        log "Check if command '$MV_COMMAND' was found.......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$RM_COMMAND" ]; then
        log "Check if command '$RM_COMMAND' was found.......................[FAILED]"
        sendmail ERROR
	movelog
        exit 12
else
        log "Check if command '$RM_COMMAND' was found.......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$CAT_COMMAND" ]; then
        log "Check if command '$CAT_COMMAND' was found......................[FAILED]"
        sendmail ERROR
	movelog
        exit 13
else
        log "Check if command '$CAT_COMMAND' was found......................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$DATE_COMMAND" ]; then
        log "Check if command '$DATE_COMMAND' was found.....................[FAILED]"
        sendmail ERROR
	movelog
        exit 14
else
        log "Check if command '$DATE_COMMAND' was found.....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$MKDIR_COMMAND" ]; then
        log "Check if command '$MKDIR_COMMAND' was found....................[FAILED]"
        sendmail ERROR
	movelog
        exit 15
else
        log "Check if command '$MKDIR_COMMAND' was found....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$PROG_SENDMAIL" ]; then
        log "Check if command '$PROG_SENDMAIL' was found................[FAILED]"
        sendmail ERROR
	movelog
        exit 16
else
        log "Check if command '$PROG_SENDMAIL' was found................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$CHOWN_COMMAND" ]; then
        log "Check if command '$CHOWN_COMMAND' was found....................[FAILED]"
        sendmail ERROR
	movelog
        exit 17
else
        log "Check if command '$CHOWN_COMMAND' was found....................[  OK  ]"
fi
 
# Check if command (file) NOT exist OR IS empty.
if [ ! -s "$CHMOD_COMMAND" ]; then
        log "Check if command '$CHMOD_COMMAND' was found....................[FAILED]"
        sendmail ERROR
	movelog
        exit 18
else
        log "Check if command '$CHMOD_COMMAND' was found....................[  OK  ]"
fi
 
# Check if LOCK file NOT exist.
if [ ! -e "$FILE_LOCK" ]; then
        log "Check if script is NOT already runnig .....................[  OK  ]"
 
        $TOUCH_COMMAND $FILE_LOCK
else
        log "Check if script is NOT already runnig .....................[FAILED]"
        log ""
        log "ERROR: The script was already running, or LOCK file already exists!"
        log ""
        sendmail ERROR
	movelog
        exit 20
fi
 
# Start update.
log ""
log "+-----------------------------------------------------------------+"
log "| Run update from $SCRIPT_NAME ....................... |"
log "+-----------------------------------------------------------------+"
log ""
 
# Generating files.
 
log "Generating '/tmp/$PARAM_DH512_FILE' ..............................[  OK  ]"
log ""
 
$BINARY_OPENSSL_PATH dhparam -dsaparam -out /tmp/$PARAM_DH512_FILE 512
 
log ""
log "Generating '/tmp/$PARAM_DH1024_FILE' .............................[  OK  ]"
 
$BINARY_OPENSSL_PATH dhparam -dsaparam -out /tmp/$PARAM_DH1024_FILE 1024
 
log ""
log "Generating '/tmp/$PARAM_DH2048_FILE' .............................[  OK  ]"
 
$BINARY_OPENSSL_PATH dhparam -dsaparam -out /tmp/$PARAM_DH2048_FILE 2048
 
# Move files.
$MV_COMMAND /tmp/$PARAM_DH512_FILE $PARAM_DIR/$PARAM_DH512_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Move file '$PARAM_DIR/$PARAM_DH512_FILE' ...........[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
	movelog
        exit 50
else
        log ""
        log "Move file '$PARAM_DIR/$PARAM_DH512_FILE' ...........[  OK  ]"
fi
 
$CHMOD_COMMAND -R 600 $PARAM_DIR/$PARAM_DH512_FILE
 
if [ "$?" != 0 ]; then
        retval $?
        log "Permission set '$PARAM_DIR/$PARAM_DH512_FILE' ......[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 51
else
        log "Permission set '$PARAM_DIR/$PARAM_DH512_FILE' ......[  OK  ]"
fi
 
$RM_COMMAND /tmp/$PARAM_DH512_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Delete '/tmp/$PARAM_DH512_FILE' ..................................[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
	movelog
        exit 52
else
        log "Delete '/tmp/$PARAM_DH512_FILE' ..................................[  OK  ]"
fi
 
$MV_COMMAND /tmp/$PARAM_DH1024_FILE $PARAM_DIR/$PARAM_DH1024_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Move file '$PARAM_DIR/$PARAM_DH1024_FILE' ..........[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
	movelog
        exit 53
else
        log ""
        log "Move file '$PARAM_DIR/$PARAM_DH1024_FILE' ..........[  OK  ]"
fi
 
$CHMOD_COMMAND -R 600 $PARAM_DIR/$PARAM_DH1024_FILE
 
if [ "$?" != 0 ]; then
        retval $?
        log "Permission set '$PARAM_DIR/$PARAM_DH1024_FILE' .....[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 54
else
        log "Permission set '$PARAM_DIR/$PARAM_DH1024_FILE' .....[  OK  ]"
fi
 
$RM_COMMAND /tmp/$PARAM_DH1024_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Delete '/tmp/$PARAM_DH1024_FILE' .................................[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
	movelog
        exit 55
else
        log "Delete '/tmp/$PARAM_DH1024_FILE' .................................[  OK  ]"
fi
 
$MV_COMMAND /tmp/$PARAM_DH2048_FILE $PARAM_DIR/$PARAM_DH2048_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Move file '$PARAM_DIR/$PARAM_DH2048_FILE' ..........[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 56
else
        log ""
        log "Move file '$PARAM_DIR/$PARAM_DH2048_FILE' ..........[  OK  ]"
fi
 
$CHMOD_COMMAND -R 600 $PARAM_DIR/$PARAM_DH2048_FILE
 
if [ "$?" != 0 ]; then
        retval $?
        log "Permission set '$PARAM_DIR/$PARAM_DH2048_FILE' .....[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 57
else
        log "Permission set '$PARAM_DIR/$PARAM_DH2048_FILE' .....[  OK  ]"
fi
 
$RM_COMMAND /tmp/$PARAM_DH2048_FILE -f
 
if [ "$?" != 0 ]; then
        retval $?
        log "Delete '/tmp/$PARAM_DH2048_FILE' .................................[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
        sendmail ERROR
        movelog
        exit 58
else
        log "Delete '/tmp/$PARAM_DH2048_FILE' .................................[  OK  ]"
fi
 
systemctl restart $BINARY_POSTFIX_PATH
 
if [ "$?" != 0 ]; then
        retval $?
        log "Restart of '$BINARY_POSTFIX_PATH' ..............................[FAILED]"
        $RM_COMMAND -f $FILE_LOCK
	`systemctl restart postfix`
        sendmail ERROR
	movelog
        exit 60
else
	log ""
        log "Restart of '$BINARY_POSTFIX_PATH' ..............................[  OK  ]"
fi
 
# Finish update.
log ""
log "+-----------------------------------------------------------------+"
log "| End update from $SCRIPT_NAME ....................... |"
log "+-----------------------------------------------------------------+"
log ""
 
# Status e-mail.
if [ $MAIL_STATUS = 'Y' ]; then
        sendmail STATUS
fi
# Move temporary log to permanent log
movelog
 
exit 0

Untrusted TLS connection

Falls nach der Postfix TLS Konfiguration nachfolgender Fehler in der Log-Datei

  • /var/log/maillog

auftauchen sollte:

Sep 16 09:58:50 server60 postfix/smtp[20322]: setting up TLS connection to mx1.tachtler.net[88.217.171.167]:25
Sep 16 09:58:50 server60 postfix/smtp[20322]: certificate verification failed for mx1.nausch.org[88.217.187.21]:25: untrusted issuer /O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
Sep 16 09:58:50 server60 postfix/smtp[20322]: Untrusted TLS connection established to mx1.tachtler.net[88.217.171.167]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)

:!: HINWEIS - Eigene Zertifikate, können an die Datei /etc/pki/tls/certs/ca-bundle.crt hinzugefügt werden.

/etc/pki/tls/certs/ca-bundle.crt

Um ein Zertifikat auch im System zu hinterlegen, sind nachfolgende Tätigkeiten erforderlich.

Im Verzeichnis

  • /etc/pki/ca-trust/source/anchors

können Zertifikate im Format PEM hinterlegt werden und anschließend dem BUNDLE-File

  • /etc/pki/tls/certs/ca-bundle.crt, welches auf /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

verweist hinzugefügt werden.

Dazu ist es erforderlich das Zertifikates z.B. welcher wie folgt aussieht:

-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----END CERTIFICATE-----

mit nachfolgendem Befehl das Zertifikat aus der z.B. Datei

  • /etc/pki/ca-trust/source/anchors/CAcert.pem

der Datei

  • /etc/pki/tls/certs/ca-bundle.crt, welche auf /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

verlinkt hinzugefügt werden:

# update-ca-trust

Eine Überprüfung, ob das Zertifikat aus der Datei

  • /etc/pki/ca-trust/source/anchors/CAcert.pem

der Datei

  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

tatsächlich hinzugefügt wurde, kann mit nachfolgendem Befehl durchgeführt werden:

# head -n 106 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem | tail -n 23
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----END CERTIFICATE-----

:!: HINWEIS - Bitte die Zeilennummer ggf. anpassen !!!

Anschließend sollten dann und grundsätzlich bei offiziellen Zertifizierungsstellen, keine Fehlermeldungen mehr zu sehen sein:

...
Sep 16 10:17:01 server60 postfix/smtp[21143]: setting up TLS connection to mx1.tachtler.net[88.217.171.167]:25
Sep 16 10:17:01 server60 postfix/smtp[21143]: Trusted TLS connection established to mx1.tachtler.net[88.217.171.167]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
...

TLS-Test via OpenSSL

Um einen Test für die TLS-Verschlüsselung via OpenSSL durchzuführen, kann folgender Aufruf von openssl genutzt werden:

# openssl s_client -starttls smtp -connect mx1.tachtler.net:25
CONNECTED(00000003)
depth=2 O = Root CA, OU = http://www.cacert.org, CN = CA Cert Signing Authority, emailAddress = support@cacert.org
verify return:1
depth=1 O = CAcert Inc., OU = http://www.CAcert.org, CN = CAcert Class 3 Root
verify return:1
depth=0 CN = *.tachtler.net
verify return:1
---
Certificate chain
 0 s:/CN=*.tachtler.net
   i:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
 1 s:/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
 2 s:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
   i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIE6jCCAtKgAwIBAgIDAi2HMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB
Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV
BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTQwNDEwMTg1MjI5WhcNMTYwNDA5
MTg1MjI5WjAZMRcwFQYDVQQDFA4qLnRhY2h0bGVyLm5ldDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAPIpr+FMiLXlHD+z6n/Uc0GRVZs3HcYKpj4puYWp
i/vgkZzJM7+YBgL8qXSeoAGRXttzk9s0LdjclLjF995ZKKsgcpVfWdF5GH97wzCY
ZStQR19PWtSXauKVzTvWC8Kh2ZZkanr/0t7MtqBdJdxXHJhZIuA4Q9jiSWVggzx/
XoAbxdJNZHnZsyG3fptkwXFK/nyjEyBL+Z7kYObXcUP7psh3EZzn1bn6oss95oyr
LQyubzRhJArEo9Josqtyh1cAgnvoesPQlbA+BxtJ9LoO94BfKwFw9Mw5Gnbhwbjx
sgruuh+Ml8CZyFfbF9HsWRuRa1syRxIEzA+U01Lp3p0/uhUCAwEAAaOB/zCB/DAM
BgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIDqDA0BgNVHSUELTArBggrBgEFBQcD
AgYIKwYBBQUHAwEGCWCGSAGG+EIEAQYKKwYBBAGCNwoDAzAzBggrBgEFBQcBAQQn
MCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmNhY2VydC5vcmcvMDgGA1UdHwQx
MC8wLaAroCmGJ2h0dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNy
bDA3BgNVHREEMDAugg4qLnRhY2h0bGVyLm5ldKAcBggrBgEFBQcIBaAQDA4qLnRh
Y2h0bGVyLm5ldDANBgkqhkiG9w0BAQ0FAAOCAgEAZqJtMOD7OVEb6VYhG6y8XEKg
9zgrvw+jDyAD6ehagA9SESCwFyfAsFYDe/2yclEqsmdAaBlRXY66pIZ98y/3vmZQ
U1+TZ8TK6XoOku9TL1gZE/AOELdvMlFihtgnzj9mSaacEWgmvOoY9ELdDNpKQfHp
JBEpOJcVvYpboFt2+LB0xlSCbz8+9ZCplOTX/awD395OMFuDFLNobglrDJwXpD94
AZfTRUN2jOhXV2EUe+yyjVVVr2WhGM07pIafHhYhQalXzLIIY416O/NtCfOl9lCT
tzojDyeVdqtyeBMcDObPKCrOMy7dwQoF2EifcieCODS/7CCihVOz/cIV6j9mCL6I
d/HblAQnUzGnYmUAfLje79t6PA/BVOOg2TE27rDqsmDxfj6+DbjiR8WRquzmBgda
pp5I/mu7KB7ch4vnUJvMsAu5yvQ178syBUbadhRy3lsldpcTgwajMCyev2+7csRK
dyKFk9l+FPxtu0frGm6CSKsxL+773PN7DTooYG2451hNBnQvk/SKt5AbknMQt3FV
tqmIE4n7zenrehItSZocMdd3FHA6K6OKkWeDv1O6qL0bgVY7Yb8pCn2+/O2jux3z
uZweHc6zFhfg8IfTL6MOlfZSWlMU+q452vIXnoLVIWyLgmLGcZyVgXaumCVXopMv
1L95vruMaWTlXcGVYQg=
-----END CERTIFICATE-----
subject=/CN=*.tachtler.net
issuer=/O=CAcert Inc./OU=http://www.CAcert.org/CN=CAcert Class 3 Root
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 5858 bytes and written 410 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: 5622796BC854C2BC731085C1552F698D694CF82132A2E7F824579D9F74A96B2F
    Session-ID-ctx: 
    Master-Key: 2E5ADB4829858C0AF37588CB1114E6A52769ECF526FC456ECF75D9CFB13CC16C9FD68B44F124D06EDE4CD664651C25F3
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 3600 (seconds)
    TLS session ticket:
    0000 - 66 5d a5 2e c0 85 1f 59-45 4d 43 f3 68 b7 d6 9e   f].....YEMC.h...
    0010 - ef e2 a2 91 e1 73 62 c8-79 c6 f8 b7 d2 f3 35 a4   .....sb.y.....5.
    0020 - f0 49 20 82 36 93 13 d8-af 0b 8a 1e 0c 0c 50 b0   .I .6.........P.
    0030 - 75 ba 7b 2d 93 93 76 4e-2a c9 ba f6 0e c2 5a c3   u.{-..vN*.....Z.
    0040 - a3 35 80 1e ea 64 a7 9c-f1 a8 49 50 c9 b4 56 5f   .5...d....IP..V_
    0050 - 5e e0 15 e2 e9 51 4c 19-02 b9 9f 69 9c 17 cb 5a   ^....QL....i...Z
    0060 - 4d cc 1f 59 f6 4e ca a1-23 a0 8b 7f 22 ae 7d 58   M..Y.N..#...".}X
    0070 - 57 7f 87 69 f8 9f 02 7b-6c 95 43 f6 b3 c7 36 ab   W..i...{l.C...6.
    0080 - a2 93 90 3a 1b bb a6 b9-0b 13 00 14 88 d0 a9 b5   ...:............
    0090 - 0a cd 77 9e 5e a5 ee 50-95 a5 4f 09 7d fa 02 4d   ..w.^..P..O.}..M

    Start Time: 1440687959
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
250 DSN
quit
221 2.0.0 Bye
closed

Erforderliche Eingaben:

  1. openssl s_client -starttls smtp -connect mx1.tachtler.net:25
  2. quit

DSN-Konfiguration

Über den Delivery Status Notifications (DSN) gibt der Absender Anweisungen, wie und wann dieser über den Zustellstatus einer Nachricht informiert werden möchte! Dies ist auch basser als „Benachrichtigung über gelesen, zurück an den Absender“ bekannt.

Solche Benachrichtigungen an den Absender, welche mehr Informationen als nur über die normalen „Bounce“-Nachrichten hinaus preis geben, bedeuten letztendlich, dass hier der Absender einer e-Mail Informationen (auch über eine erfolgreich zugestellte e-Mail) vom eigenen MTA (Mail Transport Agent) anfordert!

Folgende Beispiele dienen der Verdeutlichung dieses Verfahren:

Nachrichten an den Absender z.B. bei:

  • MAIL FROM: user@example.com RET=FULL, bei einem „Bounce“ der Nachricht, soll die original e-Mail vollständig zurück gesandt werden!
  • MAIL FROM: user@example.com ENVID=„envelop-id“, legt eine ID fest, welche bei einem „Bounce“ zurückgeschickt werden soll!
  • RCPT TO: user@example.com NOTIFY=NEVER, der Absender möchte nie auch bei nicht erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=SUCCESS, der Absender möchte bei erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=FAILURE, der Absender möchte bei nicht erfolgreicher Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com NOTIFY=DELAY, der Absender möchte bereits bei einer verzögerten Zustellung benachrichtigt werden!
  • RCPT TO: user@example.com ORCPT=user@example.com, gibt den ursprünglichen Empfänger an, von dem aus die e-Mail weitergeleitet wurde!

:!: HINWEIS - Die einzelnen Möglichkeiten können auch sinnvoll miteinander kombiniert werden !

:!: WICHTIG - Aufgrund von evtl. unerwünschter Server-Last und auch der Weitergabe von Informationen über die eigene Infrastruktur, welche durch Delivery Status Notifications (DSN) erzeugt bzw. preis gegeben werden, kann es unerwünscht sein Delivery Status Notifications (DSN) zuzulassen!

Ob ein Mail-Server dies unterstützt, wird im SMTP-Envelop-Dialog nach dem HELO/EHLO-Kommando bekanntgegeben, wie in nachfolgendem Beispiel gezeigt:

# telnet mx1.tachtler.net 25
Trying 192.168.0.60...
Connected to mx1.tachtler.net.
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
ehlo mx1.tachtler.net
250-mx1.tachtler.net
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
...

Hier ist die Zeile

250 DSN

ausschlaggebend!

smtpd_discard_ehlo_keywords

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_discard_ehlo_keywords
http://www.postfix.org/DSN_README.html
Defaultwert
smtpd_discard_ehlo_keywords = 
Möglicher Wert
smtpd_discard_ehlo_keywords = silent-discard, dsn
Beschreibung Ein Liste der EHLO Schlüsselwörter (pipelining starttls, auth, etc.), welche der Postfix SMTP-Server nicht in der EHLO-Antwort an einen Remote-SMTP-Client zurück sendet.

:!: HINWEIS - Die Schlüsselwörter: silent-discard, dsn deaktivieren DSN (Delivery Status Notifications ) komplett!

:!: WICHTIG - Dies wird nicht empfohlen!

smtpd_discard_ehlo_keyword_address_maps

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_discard_ehlo_keyword_address_maps
http://www.postfix.org/DSN_README.html
Defaultwert
smtpd_discard_ehlo_keyword_address_maps = 
Möglicher Wert
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
Beschreibung Lookup-Tabelle mit einer Liste der EHLO Schlüsselwörter (pipelining starttls, auth, etc.), welche der Postfix SMTP-Server nicht in der EHLO-Antwort an einen Remote-SMTP-Client zurück sendet, welche als IP-Adresse(bereich) definiert ist.

Nachfolgendes Beispiel hat nachfolgende Einträge in einer „Lookup-Tabelle“ mit nachfolgender Bedeutung:

Eintrag Bedeutung
chunking
Die CHUNKING-Serviceerweiterung ermöglicht die Verwendung des BDAT-Befehls, alternativ zum DATA-Befehl.
silent-discard
Verhindert die Schreibung von LOG-Einträgen
dsn
Verschweigt im SMTP-Dialog die DSN-Fähigkeit

Nachfolgend können hier Einträge in die cidr-Map nach nachfolgendem Muster eingetragen werden:

192.168.0.0/24     chunking, silent-discard
192.168.1.0/24     chunking, silent-discard
0.0.0.0/0          chunking, silent-discard, dsn

Dafür ist z.B. eine neue Konfigurationsdatei

  • /etc/postfix/esmtp_access

mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/esmtp_access

:!: HINWEIS - Als Trennzeichen zwischen den beiden Einträgen, sollte am besten die [TAB]-Taste verwendet werden, es ist aber auch die Trennung durch [Leerzeichen] möglich!

:!: WICHTIG - Die Konfigurationsdatei wird direkt als ASCII-Datei in den Speicher eingelesen und muss nicht durch den Postfix eigenen Befehl postmap umgewandelt werden!

:!: WICHTIG - Damit Änderungen an der Konfigurationsdatei wirksam werden, ist mindestens ein Postfix reload erforderlich!

MX-Backup-Konfiguration

permit_mx_backup_networks

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#permit_mx_backup_networks
Defaultwert
permit_mx_backup_networks = 
Neuer Wert
permit_mx_backup_networks = 217.91.103.190/32
Beschreibung Der Parameter gibt eine IP-Adresse oder ein IP-Adressen/Netz an (ähnlich wie der Parameter mynetworks), bei dem Postfix diese als Backup-Mail-Server behandelt.
interne Links Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_relay_restrictions
Postfix CentOS 7 - Restrictions-Konfigurationen - smtpd_recipient_restrictions
Postfix CentOS 7 - Erweiterte Konfiguration - parent_domain_matches_subdomains

Port submission

Falls eine direkte Einlieferung von abzusendenden e-Mails durch Einlieferung auf Port 25 fehlschlägt, z. B. wegen einer IP-Adresse die einem vom ISP zugewiesen wurde, jedoch auf „Blacklisten“ steht, oder eine generelle Einlieferung von „fremden“ IP-Adressen nicht gewünscht ist, kann das Verfahren Port submission zum Einsatz kommen.

Die Einlieferung von e-Mails via Port submission, stellt einen SMTP-Daemon dar, welcher jedoch grundsätzlich nur e-mails authentifizierter Nutzer annimmt. Die Einlieferung von e-Mails wird selbst dann abgelehnt, wenn ein nicht-authentifizierter Einlieferer eine e-Mail einliefert, wenn sich Postfix selbst für diese Zieldomain zuständig fühlt, und eine Einlieferung auf Port 25 kein Problem wäre!

Es ist sogar möglich, e-Mails Einzuliefern, wenn die zugewiesen IP-Adresse des ISP (z.B. in öffentlichen Netzen, oder bei Mobilen Geräten) auf einer „Blacklist“ gelistet ist. Es zählt primär die Authentifizierung!

Um Port submission zu aktivieren sind nachfolgende Einträge in der Konfigurationsdatei

  • /etc/postfix/master.cf

von Postfix, welche schon vorbereitet aber auskommentiert sind, zu aktivieren.

Nachfolgend werden die relevanten Zeilen ein kommentiert:

...
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
...
# Tachtler - enabled - 
submission inet n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
...

Die weiterhin auskommentierten Zeilen

#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions

verweisen auf Variablen, welche nicht vorhanden sind und die dort angegebenen „Restrictions“ werden nicht benötigt, siehe dazu auch die nachfolgenden internen Links:

Mit nachfolgendem Befehl kann überprüft werden, ob die Aktivierung von Port submission erfolgreich war:

# netstat -tulpen | grep master
tcp        0      0 0.0.0.0:587        0.0.0.0:*          LISTEN      0       37827      3874/master         
tcp        0      0 0.0.0.0:25         0.0.0.0:*          LISTEN      0       37824      3874/master

Limit-Konfigurationen

Nachfolgende Konfigurationen beschränken die Annahme von e-Mail in der Anzahl und Größe und legen Limitierungen fest, was die Haltezeit von e-Mails im Fehlerfall betrifft.

bounce_queue_lifetime

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#bounce_queue_lifetime
Defaultwert
bounce_queue_lifetime = 5d
Neuer Wert
bounce_queue_lifetime = 3d
Beschreibung Ein Bounce-Nachricht gilt als unzustellbar, wenn die Auslieferung nicht weiterhin mit einem temporären Fehler endet, und die Zeit die die Bounce-Nachricht bereits in der Warteschlange liegt, die bounce_queue_lifetime Grenze erreicht hat.
interne Links Postfix CentOS 7 - Limit-Konfiguration - maximal_queue_lifetime

maximal_queue_lifetime

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#maximal_queue_lifetime
Defaultwert
maximal_queue_lifetime = 5d
Neuer Wert
maximal_queue_lifetime = 3d
Beschreibung Ein Nachricht gilt als unzustellbar, wenn die Auslieferung nicht weiterhin mit einem temporären Fehler endet, und die Zeit die die Nachricht bereits in der Warteschlange liegt, die maximal_queue_lifetime Grenze erreicht hat.
interne Links Postfix CentOS 7 - Limit-Konfiguration - bounce_queue_lifetime

mailbox_size_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#mailbox_size_limit
Defaultwert
mailbox_size_limit = 51200000
Neuer Wert
mailbox_size_limit = 51200000
Beschreibung Die maximale Größe einer beliebigen lokalen einzelne Mailbox oder maildir-Datei oder 0 (keine Begrenzung). In der Tat, dies begrenzt die Größe einer Datei, die auf lokale Auslieferung, einschließlich der Dateien, die von externen Befehlen, die von der lokalenDelivery Agent ausgeführt werden, geschrieben wird.

:!: HINWEIS - Diese Grenze darf nicht kleiner als die der Nachrichtengröße message_size_limit sein!
interner Link Postfix CentOS 7 - Limit-Konfigurationen - message_size_limit

message_size_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#message_size_limit
Defaultwert
message_size_limit = 10240000
Neuer Wert
message_size_limit = 20480000
Beschreibung Die maximale Größe einer Nachricht in Bytes, einschließlich der ENVELOP-Informationen.
interner Link Postfix CentOS 7 - Limit-Konfigurationen - mailbox_size_limit

smtpd_client_connection_count_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_connection_count_limit
Defaultwert
smtpd_client_connection_count_limit = 50
Neuer Wert
smtpd_client_connection_count_limit = 20
Beschreibung Anzahl der gleichzeitigen Verbindungen je Client. Standardmäßig liegt die Grenze, bei der Hälfte welche für den Standard-Prozessgrenzwert (Standard: 100 Prozesse) festgelegt ist.

smtpd_client_connection_rate_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_connection_rate_limit
Defaultwert
smtpd_client_connection_rate_limit = 0
Neuer Wert
smtpd_client_connection_rate_limit = 20
Beschreibung Anzahl der Verbindungen je Client pro Zeiteinheit. Die Zeiteinheit wird mit dem Konfigurationsparameter anvil_rate_time_unit festgelegt und sollte grundsätzlich nicht verändert werden.

smtpd_client_message_rate_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_message_rate_limit
Defaultwert
smtpd_client_message_rate_limit = 0
Neuer Wert
smtpd_client_message_rate_limit = 50
Beschreibung Anzahl der Nachrichten je Client pro Zeiteinheit. Die Zeiteinheit wird mit dem Konfigurationsparameter anvil_rate_time_unit festgelegt und sollte grundsätzlich nicht verändert werden.

smtpd_client_new_tls_session_rate_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_new_tls_session_rate_limit
Defaultwert
smtpd_client_new_tls_session_rate_limit = 0
Neuer Wert
smtpd_client_new_tls_session_rate_limit = 20
Beschreibung Anzahl der neuen (uncached) TLS-Sitzungen je Client pro Zeiteinheit die maximal aushandelbar sind. Die Zeiteinheit wird mit dem Konfigurationsparameter anvil_rate_time_unit festgelegt und sollte grundsätzlich nicht verändert werden.

smtpd_client_recipient_rate_limit

Information Beschreibung
Dokumentation http://www.postfix.org/postconf.5.html#smtpd_client_recipient_rate_limit
Defaultwert
smtpd_client_recipient_rate_limit = 0
Neuer Wert
smtpd_client_recipient_rate_limit = 50
Beschreibung Anzahl der Empfänger einer e-Mail je Client pro Zeiteinheit. Die Zeiteinheit wird mit dem Konfigurationsparameter anvil_rate_time_unit festgelegt und sollte grundsätzlich nicht verändert werden.

SPF-Konfiguration

:!: HINWEIS - Der restriktive Einsatz des Sender Policy Frameworks ist nicht zu empfehlen!

Das (SPF) schreibt fest, welche MTA (Mail Transport Agent) ausgehend für den Versandt von e-Mails einer Domain zulässig ist!

Damit könnte die Möglichkeit verhindern werden, e-Mails mit eigener Absender-e-Mail-Adresse über einen dritten Rechner zu versenden. Es wäre also nur möglich e-Mails über den Mail-Server zu versenden, auf dem auch das Postfach liegt! Ein Versand über ein z.B. Webformular, oder eine Web-Grußkarte über einen Drittanbieter wäre somit nicht möglich!

Deshalb sollte eine Sender Policy Framework (SPF) Definition so gewählt werden, das diese Beschränkung nicht greift.

Über folgende Seite kann ein Dialog durchlaufen werden, mit dem eine Sender Policy Framework (SPF) geprüft werden kann:

Die durch diesen Link geprüfte Information, muss dann in den DNS-Server wie folgt eingebunden werden (relevanter Ausschnitt - bind):

tachtler.net.    TXT     "v=spf1 ip4:88.217.171.167/32 mx ?all" 

Die ob enstehende Information setzt sich wie folgt zusammen:

Schlüssel Bedeutung
v=spf1 Identifiziert den TXT-Eintrag als SPF-Zeichenkette in der Version 1
ip4:88.217.171.167/32 Die IP-Adresse 88.217.171.167, hat die Erlaubnis e-Mails im Namen von tachtler.net zu senden
mx Die Server welche im MX-Record genannt sind, haben die Erlaubnis e-Mails im Namen von tachtler.net zu senden
?all e-Mails, welche nicht von den spezifizierten Servern kommen, können e-Mails im Namen von tachtler.net senden

Um weitere Informationen erhalten zu können, kann folgender Link genutzt werden:

Weiterführende Konfigurationen

Unter nachfolgenden internen Links, werden weiterführende Konfiguration durchgeführt

Postfix CentOS 7 - Postscreen einsetzen

Postfix CentOS 7 - AMaViS anbinden (amavisd-milter)

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_centos_7.txt · Zuletzt geändert: 2024/01/09 11:41 von klaus