Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:postfix

Postfix

Postfix ist die gängigste Alternative zu dem Standard-Email-Programm Sendmail in der Unix/Linux-Welt. Postfix ist schneller, einfach zu konfigurieren und ein sicherer MTA (Mail Transfer Agent).

:!: Bitte beachten - Für den erfolgreichen Betrieb eines eigenen MailExchangers - e-Mail-Servers sollten Sie im Besitz einer festen IP-Adresse sein !!!

Installation

Jede ernst zunehmende Linux-Distribution sollte ein vorkonfiguriertes Postfix-Paket mit sich bringen. Deswegen ist eine Installation auch unter CentOS eine Sache des Paket-Managers yum.

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

postfix.i386

:!: Um evtl. Probleme zu vermeiden, sollte der aktuelle MTA - Sendmail mit folgendem Befehl gestoppt werden:

# service sendmail stop
Shutting down sm-client:                                   [  OK  ]
Shutting down sendmail:                                    [  OK  ]

Um das starten des noch aktuelle MTA - Sendmail dauerhaft, auch nach einem Systemstart zu verhindern, kann folgender Befehl genutzt werden. Hier wird der MTA - Sendmail aus den Start-Scripten der einzelnen Runlevel des Betriebssystems herausgenommen:

# chkconfig sendmail off

Eine Installation sollte immer über folgenden Befehl erfolgen:

# yum postfix install

Nach der Installation, kann mit folgendem Befehl überprüft werden, was alles im Paket postfix.i386 enthalten ist:

# rpm -qil postfix | more
Name        : postfix                      Relocations: (not relocatable)
Version     : 2.3.3                             Vendor: CentOS
Release     : 2.1.el5_2                     Build Date: Thu 14 Aug 2008 11:06:38 PM CEST
Install Date: Mon 24 Nov 2008 12:52:19 PM CET      Build Host: builder16.centos.org
Group       : System Environment/Daemons    Source RPM: postfix-2.3.3-2.1.el5_2.src.rpm
Size        : 8332580                          License: IBM Public License
Signature   : DSA/SHA1, Fri 15 Aug 2008 12:59:49 PM CEST, Key ID a8a447dce8562897
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.postfix
/etc/postfix
/etc/postfix/LICENSE
/etc/postfix/TLS_LICENSE
/etc/postfix/access
/etc/postfix/bounce.cf.default
/etc/postfix/canonical
/etc/postfix/generic
/etc/postfix/header_checks
/etc/postfix/main.cf
/etc/postfix/main.cf.default
/etc/postfix/makedefs.out
/etc/postfix/master.cf
/etc/postfix/post-install
/etc/postfix/postfix-files
/etc/postfix/postfix-script
/etc/postfix/relocated
/etc/postfix/transport
/etc/postfix/virtual
/etc/rc.d/init.d/postfix
/usr/bin/mailq.postfix
/usr/bin/newaliases.postfix
/usr/bin/rmail.postfix
/usr/lib/sasl/smtpd.conf
/usr/lib/sasl2/smtpd.conf
/usr/lib/sendmail.postfix
/usr/libexec/postfix
/usr/libexec/postfix/anvil
/usr/libexec/postfix/bounce
/usr/libexec/postfix/cleanup
/usr/libexec/postfix/discard
/usr/libexec/postfix/error
/usr/libexec/postfix/flush
/usr/libexec/postfix/lmtp
/usr/libexec/postfix/local
/usr/libexec/postfix/master
/usr/libexec/postfix/nqmgr
/usr/libexec/postfix/oqmgr
/usr/libexec/postfix/pickup
/usr/libexec/postfix/pipe
/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/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/postqueue
/usr/sbin/postsuper
/usr/sbin/qshape
/usr/sbin/sendmail.postfix
/usr/sbin/smtp-sink
/usr/sbin/smtp-source
/usr/share/doc/postfix-2.3.3
/usr/share/doc/postfix-2.3.3/README-Postfix-SASL-RedHat.txt
/usr/share/doc/postfix-2.3.3/README_FILES
/usr/share/doc/postfix-2.3.3/README_FILES/AAAREADME
/usr/share/doc/postfix-2.3.3/README_FILES/ADDRESS_CLASS_README
/usr/share/doc/postfix-2.3.3/README_FILES/ADDRESS_REWRITING_README
/usr/share/doc/postfix-2.3.3/README_FILES/ADDRESS_VERIFICATION_README
/usr/share/doc/postfix-2.3.3/README_FILES/BACKSCATTER_README
/usr/share/doc/postfix-2.3.3/README_FILES/BASIC_CONFIGURATION_README
/usr/share/doc/postfix-2.3.3/README_FILES/BUILTIN_FILTER_README
/usr/share/doc/postfix-2.3.3/README_FILES/CDB_README
/usr/share/doc/postfix-2.3.3/README_FILES/CONNECTION_CACHE_README
/usr/share/doc/postfix-2.3.3/README_FILES/CONTENT_INSPECTION_README
/usr/share/doc/postfix-2.3.3/README_FILES/DATABASE_README
/usr/share/doc/postfix-2.3.3/README_FILES/DB_README
/usr/share/doc/postfix-2.3.3/README_FILES/DEBUG_README
/usr/share/doc/postfix-2.3.3/README_FILES/DSN_README
/usr/share/doc/postfix-2.3.3/README_FILES/ETRN_README
/usr/share/doc/postfix-2.3.3/README_FILES/FILTER_README
/usr/share/doc/postfix-2.3.3/README_FILES/INSTALL
/usr/share/doc/postfix-2.3.3/README_FILES/IPV6_README
/usr/share/doc/postfix-2.3.3/README_FILES/LDAP_README
/usr/share/doc/postfix-2.3.3/README_FILES/LINUX_README
/usr/share/doc/postfix-2.3.3/README_FILES/LMTP_README
/usr/share/doc/postfix-2.3.3/README_FILES/LOCAL_RECIPIENT_README
/usr/share/doc/postfix-2.3.3/README_FILES/MAILDROP_README
/usr/share/doc/postfix-2.3.3/README_FILES/MILTER_README
/usr/share/doc/postfix-2.3.3/README_FILES/MYSQL_README
/usr/share/doc/postfix-2.3.3/README_FILES/NFS_README
/usr/share/doc/postfix-2.3.3/README_FILES/OVERVIEW
/usr/share/doc/postfix-2.3.3/README_FILES/PACKAGE_README
/usr/share/doc/postfix-2.3.3/README_FILES/PCRE_README
/usr/share/doc/postfix-2.3.3/README_FILES/PGSQL_README
/usr/share/doc/postfix-2.3.3/README_FILES/QMQP_README
/usr/share/doc/postfix-2.3.3/README_FILES/QSHAPE_README
/usr/share/doc/postfix-2.3.3/README_FILES/RELEASE_NOTES
/usr/share/doc/postfix-2.3.3/README_FILES/RESTRICTION_CLASS_README
/usr/share/doc/postfix-2.3.3/README_FILES/SASL_README
/usr/share/doc/postfix-2.3.3/README_FILES/SCHEDULER_README
/usr/share/doc/postfix-2.3.3/README_FILES/SMTPD_ACCESS_README
/usr/share/doc/postfix-2.3.3/README_FILES/SMTPD_POLICY_README
/usr/share/doc/postfix-2.3.3/README_FILES/SMTPD_PROXY_README
/usr/share/doc/postfix-2.3.3/README_FILES/STANDARD_CONFIGURATION_README
/usr/share/doc/postfix-2.3.3/README_FILES/TLS_README
/usr/share/doc/postfix-2.3.3/README_FILES/TUNING_README
/usr/share/doc/postfix-2.3.3/README_FILES/ULTRIX_README
/usr/share/doc/postfix-2.3.3/README_FILES/UUCP_README
/usr/share/doc/postfix-2.3.3/README_FILES/VERP_README
/usr/share/doc/postfix-2.3.3/README_FILES/VIRTUAL_README
/usr/share/doc/postfix-2.3.3/README_FILES/XCLIENT_README
/usr/share/doc/postfix-2.3.3/README_FILES/XFORWARD_README
/usr/share/man/man1/mailq.postfix.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/postqueue.1.gz
/usr/share/man/man1/postsuper.1.gz
/usr/share/man/man1/qshape.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.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/master.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/regexp_table.5.gz
/usr/share/man/man5/relocated.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/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/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/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/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/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

Folgender Benutzer wurde ebenfalls angelegt, was mit folgende Befehl überprüft werden kann:

# cat /etc/passwd | grep post
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

Desweiteren wurden auch folgende Gruppen angelegt, was mit folgendem Befehl überprüft werden kann:

# cat /etc/group | grep post
mail:x:12:mail,postfix
postdrop:x:90:
postfix:x:89:

Um das Starten des neuen MTA - Postfix auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird der MTA - Postfix zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig postfix on

Ein Überprüfung, ob nur noch der Postfix in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird und der Sendmail nicht mehr, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep sendmail
sendmail        0:off   1:off   2:off   3:off   4:off   5:off   6:off

und

# chkconfig --list | grep postfix
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off

system-switch-mail.noarch und system-switch-mail-gnome.noarch

Um einen komfortablen Wechsel zwischen den MTA's - Sendmail und Postfix zu realisieren, sollten noch folgende RPM unter CentOS installiert werden:

  • system-switch-mail.noarch - The Mail Transport Agent Switcher.
  • system-switch-mail-gnome.noarch - A GUI interface for Mail Transport Agent Switcher.

Die Installation kann mit folgendem Befehl durchgeführt werden:

# yum install system-switch-mail system-switch-mail-gnome

Nach einer erfolgreichen Installation, kann durch folgenden Befehl die grafische Benutzeroberfläche des system-switch-mail-Tools aufgerufen werden:

# system-switch-mail

system-switch-mail

Hier kann dann bequem Postfix ausgewählt werden und anschließend mit der linken Maustaste der [OK]-Button (Knopf) angeklickt werden. Das Ergebnis dieser Aktion sollte dann mit folgender Anzeige enden:

system-switch-mail-success

:!: Das system-switch-mail-Tool ermöglicht es Postfix so zu nutzen, als wäre noch ein Sendmail installiert!

:!: Das system-switch-mail-Tool startet den Postfix ebenfalls gleich!

Konfiguration: System

Da Postfix nicht ganz allein im jeweiligen System steht, sondern auch Abhängigkeiten zu anderen Komponenten wie z.B.

  • named - BIND - DNS-Server
  • iptables - Paketfilter

hat, sind auch Konfigurationen dieser Komponenten erforderlich.

DNS-Server

Falls im Netzwerk, egal ob privat oder öffentlich, ein eigener DNS-Server betrieben wird, muss dieser auch eine korrekte Antwort auf die Frage nach dem MailExchanger (e-Mail Austauscher) geben können.

Auf die Grundlagen und Einzelheiten der Konfiguration eines DNS-Servers wie z.B. BIND, kann aus Gründen der Komplexität hier an dieser Stelle nicht eingegangen werden. Aber die notwendigen Konfigurationen, welche ein Grund- bzw. etwas fortgeschritteneres Wissen über DNS erfordern, werden hier kurz dargestellt.

Die korrekte Antwort auf die Frage nach dem MailExchanger, dem MX-Record des DNS-Servers sollte in etwa wie folgt aussehen und kann mit folgendem Befehl abgefragt werden:

# dig tachtler.net MX

; <<>> DiG 9.3.4-P1 <<>> tachtler.net MX
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38333
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:
;tachtler.net.                  IN      MX

;; ANSWER SECTION:
tachtler.net.           86400   IN      MX      10 mx1.tachtler.net.

;; AUTHORITY SECTION:
tachtler.net.           86400   IN      NS      ns.tachtler.net.

;; ADDITIONAL SECTION:
mx1.tachtler.net.       86400   IN      A       88.217.171.167
ns.tachtler.net.        86400   IN      A       192.168.0.1

;; Query time: 5 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Nov 25 23:09:25 2008
;; MSG SIZE  rcvd: 99

:!: In dem vorangegangenen Beispiel antwortet ein lokaler, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständiger DNS-Server.

Auf die Frage des so ermittelten MailExchangers - hier mx1.tachtler.net kann dann auch direkt gefragt werden und zwar mit folgendem Befehl:

dig mx1.tachtler.net

; <<>> DiG 9.3.4-P1 <<>> mx1.tachtler.net
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5096
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;mx1.tachtler.net.              IN      A

;; ANSWER SECTION:
mx1.tachtler.net.       86400   IN      A       88.217.171.167

;; AUTHORITY SECTION:
tachtler.net.           86400   IN      NS      ns.tachtler.net.

;; ADDITIONAL SECTION:
ns.tachtler.net.        86400   IN      A       192.168.0.1

;; Query time: 5 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Nov 25 23:13:52 2008
;; MSG SIZE  rcvd: 83

:!: WICHTIG - Hier wird deutlich, das auch ein lokaler, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständige DNS-Server, eine feste IP-Adresse auf die Frage nach dem MailExchanger geben sollte!

Ebenso wichtig wie die Forward-DNS-Auflösung ist die Reverse-DNS-Auflösung, auch für einen lokalen, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständigen DNS-Server.

Die Antwort auf eine Reverse-DNS-Anfrage über die feste IP-Adresse - hier 88.217.171.167 sollte dann wie folgt lauten und kann mit nachfolgendem Befehl abgefragt werden:

# dig -x 88.217.171.167

; <<>> DiG 9.3.4-P1 <<>> -x 88.217.171.167
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21078
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;167.171.217.88.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
167.171.217.88.in-addr.arpa. 86400 IN   PTR     mx1.tachtler.net.

;; AUTHORITY SECTION:
167.171.217.88.in-addr.arpa. 86400 IN   NS      ns.tachtler.net.

;; ADDITIONAL SECTION:
ns.tachtler.net.        86400   IN      A       192.168.0.1

;; Query time: 5 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Nov 25 23:20:35 2008
;; MSG SIZE  rcvd: 108

:!: Auch hier, antwortet der lokale, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständige, DNS-Server.

:!: WICHTIG - Was auf keinen Fall passieren sollte ist, folgende Antwort auf eine Reverse-DNS-Anfrage - hier die IP-Adresse 88.217.171.167, welche wieder mit nachfolgendem Befehl durchgeführt werden kann:

# dig -x 88.217.171.167

; <<>> DiG 9.3.4-P1 <<>> -x 88.217.171.167
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21078
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;167.171.217.88.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
167.171.217.88.in-addr.arpa. 86400 IN   PTR     host-88-217-171-167.customer.m-online.net.

;; AUTHORITY SECTION:
167.171.217.88.in-addr.arpa. 86400 IN   NS      ns.tachtler.net.

;; ADDITIONAL SECTION:
ns.tachtler.net.        86400   IN      A       192.168.0.1

;; Query time: 5 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Tue Nov 25 23:20:35 2008
;; MSG SIZE  rcvd: 108

:!: WICHTIG - Bei einer Antwort auf die Reverse-DNS-Anfrage wie oben dargestellt, können verschiedene MailExchanger welche ein sogenanntes Greylisting betreiben - siehe hier Greylisting - den e-Mail Verkehr mit dem MailExchanger ablehnen, da auf die Frage bei einer Reverse-DNS-Anfrage anstelle von

  • mx1.tachtler.net

die Antwort:

  • host-88-217-171-167.customer.m-online.net

zurückgegeben wird!

:!: Es ist daher auch erforderlich, beim ISP die Reverse-DNS-Auflösung so abzuändern, oder beim Hostmaster abändern zu lassen, dass hier die erwartete Antwort

  • mx1.tachtler.net

auch gegeben wird!

Hier ein Beispiel für die Reverse-DNS-Anfrage bei einem ISP, welche mit folgendem Befehl durchgeführt werden kann. (Die Kenntnis einer IP eines DNS-Servers des ISP ist hier erforderlich !!!):

# dig @212.18.0.5 -x 88.217.171.167

; <<>> DiG 9.3.4-P1 <<>> @212.18.0.5 -x 88.217.171.167
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33348
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5

;; QUESTION SECTION:
;167.171.217.88.in-addr.arpa.   IN      PTR

;; ANSWER SECTION:
167.171.217.88.in-addr.arpa. 2015 IN    PTR     mx1.tachtler.net.

;; AUTHORITY SECTION:
171.217.88.in-addr.arpa. 54721  IN      NS      ns1.m-online.net.
171.217.88.in-addr.arpa. 54721  IN      NS      ns3.m-online.net.
171.217.88.in-addr.arpa. 54721  IN      NS      ns4.m-online.net.
171.217.88.in-addr.arpa. 54721  IN      NS      ns2.m-online.net.

;; ADDITIONAL SECTION:
ns4.m-online.net.       82683   IN      A       212.114.171.64
ns2.m-online.net.       73879   IN      A       212.18.3.8
ns1.m-online.net.       73775   IN      A       212.18.0.8
ns1.m-online.net.       73334   IN      AAAA    2001:a60:0:11::53
ns3.m-online.net.       79062   IN      A       217.160.128.148

;; Query time: 29 msec
;; SERVER: 212.18.0.5#53(212.18.0.5)
;; WHEN: Tue Nov 25 23:37:43 2008
;; MSG SIZE  rcvd: 264

Forward-DNS-Auflösung

Nun zurück zur Frage, wie muss ein lokaler, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständige DNS-Server konfiguriert werden, dass dieser auf die Forward-DNS-Anfrage die richtige Antwort gibt.

Im der Zonen-Datei für die - hier Domäne tachtler.net muss der Eintrag wie folgt aussehen (relevanter Ausschnitt aus der Zonen-Datei):

$TTL    86400
@                                       IN      SOA     ns.tachtler.net.        root.nss.tachtler.net. (
                                                        2008112501      ; serial
                                                        3H              ; refresh
                                                        15M             ; retry
                                                        1W              ; expiry
                                                        1D )            ; minimum

                                        IN      NS      ns.tachtler.net.

                                        IN      MX 10   mx1.tachtler.net.

mx1.tachtler.net.                       IN      A       88.217.171.167

...

Reverse-DNS-Auflösung

Die Frage, wie muss ein lokaler, nach außen ins Internet nicht sprechender und nur für das lokale Netzwerk zuständige DNS-Server konfiguriert werden, dass dieser auf die Reverse-DNS-Anfrage die richtige Antwort gibt, kann wie folgt beantwortet werden.

Es wird eine Zonen-Datei benötigt, welche nur auf die eigene feste IP-Adresse abgestimmt ist, der Dateinamen muss wie folgt gewählt werden:

  • 167.171.217.88.in-addr.arpa

Der Inhalt dieser Zonen-Datei sollte dann, wie folgt aussehen (komplette Zonen-Datei):

$TTL    86400
@                                       IN      SOA     ns.tachtler.net.        root.nss.tachtler.net. (
                                                        2008112501      ; serial
                                                        3H              ; refresh
                                                        15M             ; retry
                                                        1W              ; expiry
                                                        1D )            ; minimum

                                        IN      NS      ns.tachtler.net.

                                        IN      PTR     mx1.tachtler.net.

Da hier eine zusätzliche Zonen-Datei für die Reverse-DNS-Auflösung erstellt wurde, muss diese auch noch in der /etc/named.conf eingetragen werden. Ein Eintrag muss dann wie folgt aussehen (relevanter Ausschnitt aus der Zonen-Datei):

...

zone "tachtler.net" IN {
                type master;
                file "tachtler.net";
};


zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "0.168.192.in-addr.arpa";
};

zone "167.171.217.88.in-addr.arpa" IN {
                type master;
                file "167.171.217.88.in-addr.arpa";
};

...

:!: WICHTIG - Dies gilt auch, wenn mit Views gearbeitet wird!

Was bei der Erstellung von neune Zonen-Dateien gerne übersehen wird, gerade dann wenn eine vorhandene Zonen-Datei kopiert wird, ist das setzen der richtigen Datei-Rechte. Dies kann mit folgenden Befehlen wie folgt durchgeführt werden:

# chown root.named 167.171.217.88.in-addr.arpa

und

# chmod 640 167.171.217.88.in-addr.arpa

und sollte dann folgendes Ergebnis liefern, wenn der nachfolgender Befehl eingegeben wird:

# ll /var/named/
total 12
-rw-r----- 1 root named 615 Nov 25 22:44 0.168.192.in-addr.arpa
-rw-r----- 1 root named 237 Nov 25 22:44 167.171.217.88.in-addr.arpa
-rw-r----- 1 root named 679 Nov 25 22:44 tachtler.net

Zum Abschluss ist nun noch ein restart - erneutes Starten des DNS-Servers mit folgendem Befehl notwendig, welcher in etwa nachfolgende Ausgaben in der Log-Datei /var/log/named.log erzeugen sollte:

# service named restart

Ausgabe in der Log-Datei /var/log/named.log:

Nov 25 22:45:05 nss named[3044]: shutting down: flushing changes
Nov 25 22:45:05 nss named[3044]: stopping command channel on 127.0.0.1#953
Nov 25 22:45:05 nss named[3044]: no longer listening on 127.0.0.1#53
Nov 25 22:45:05 nss named[3044]: no longer listening on 192.168.0.1#53
Nov 25 22:45:05 nss named[3044]: exiting
Nov 25 22:45:07 nss named[1205]: starting BIND 9.3.4-P1 -u named -4 -t /var/named/chroot
Nov 25 22:45:07 nss named[1205]: found 1 CPU, using 1 worker thread
Nov 25 22:45:07 nss named[1205]: loading configuration from '/etc/named.conf'
Nov 25 22:45:07 nss named[1205]: no IPv6 interfaces found
Nov 25 22:45:07 nss named[1205]: listening on IPv4 interface lo, 127.0.0.1#53
Nov 25 22:45:07 nss named[1205]: listening on IPv4 interface eth1, 192.168.0.1#53
Nov 25 22:45:07 nss named[1205]: command channel listening on 127.0.0.1#953
Nov 25 22:45:07 nss named[1205]: zone 0.in-addr.arpa/IN/localhost_resolver: loaded serial 42
Nov 25 22:45:07 nss named[1205]: zone 0.0.127.in-addr.arpa/IN/localhost_resolver: loaded serial 1997022700
Nov 25 22:45:07 nss named[1205]: zone 0.168.192.in-addr.arpa/IN/localhost_resolver: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: zone 255.in-addr.arpa/IN/localhost_resolver: loaded serial 42
Nov 25 22:45:07 nss named[1205]: zone 167.171.217.88.in-addr.arpa/IN/localhost_resolver: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: zone 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN/localhost_resolver: loaded serial 1997022700
Nov 25 22:45:07 nss named[1205]: zone localdomain/IN/localhost_resolver: loaded serial 42
Nov 25 22:45:07 nss named[1205]: zone localhost/IN/localhost_resolver: loaded serial 42
Nov 25 22:45:07 nss named[1205]: zone tachtler.net/IN/localhost_resolver: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: zone 0.168.192.in-addr.arpa/IN/tachtler.net: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: zone 167.171.217.88.in-addr.arpa/IN/tachtler.net: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: zone tachtler.net/IN/tachtler.net: loaded serial 2008112501
Nov 25 22:45:07 nss named[1205]: running

Damit sollte die Konfiguration des DNS-Servers abgeschlossen sein.

Paketfilter

Um von außen und nach außen e-Mails empfangen und senden zu können, sind entsprechende Freischaltungen im Paktefilter, hier iptables notwendig. Es müssen eingehende e-Mails und ausgehende e-Mails über den üblichen Port 25 empfangen und zugestellt werden können. Folgende Konfigurationen sind also minimal, für den Server auf dem Postfix läuft notwendig (iptables Version 1.3.5):

Für eingehende e-Mails

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT

Für ausgehende e-Mails

iptables -A OUTPUT -o eth0 -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT

Konfiguration: Postfix

Die eigentliche Konfiguration von Postfix findet in verschiedenen Dateien statt. Folgende Dateien sind hier in dieser beispielhaften Konfiguration von Postfix davon betroffen und werden entweder verändert, oder neu angelegt:

  • /etc/postfix/main.cf - Hauptkonfigurationsdatei
  • /etc/postfix/master.cf - Konfiguration der Postfix-Module
  • /etc/aliases - Aliases Datei, gültig für viele MTA's, nicht nur Postfix
  • /etc/postfix/virtual - Aufgeteilt in zwei Dateien
    • /etc/postfix/virtual_alias_domains - Alias Definitionen für Domains (:!: neu)
    • /etc/postfix/virtual_alias_maps - Alias Definitionen für e-Mail-Adressen (:!: neu)
  • /etc/postfix/canonical - Aufgeteilt in zwei Dateien
    • /etc/postfix/sender_canonical_maps - Umschreiben (SMTP-Envelop, e-Mail-Header) Absenderadresse (:!: neu)
    • /etc/postfix/recipient_canonical_maps - Umschreibung (SMTP-Envelop, e-Mail-Header) Empfängeradresse (:!: neu)
  • /etc/postfix/generic - Aufgeteilt in zwei Dateien
    • /etc/postfix/smtp_generic_maps - Umschreiben (SMTP-Envelop, e-Mail-Header) bei durch SMTP das System verlassende e-Mails (:!: neu)
    • /etc/postfix/lmtp_generic_maps - Umschreiben (SMTP-Envelop, e-Mail-Header) bei durch LMTP das System verlassende e-Mails (:!: neu)
  • /etc/postfix/transport - Datei umbenannt in
    • /etc/postfix/transport_maps - Abweichende Zustellung der e-Mail über alternatives Mailrouting (:!: neu)
  • /etc/postfix/relocated - Datei umbenannt in
    • /etc/postfix/relocated_maps - Empfänger verzogen Rückmeldungen bei geänderten e-Mail-Empfängern (:!: neu)
  • /etc/postfix/header_checks - e-Mail-Header (Kopfinformationen) Filtern (:!: neu)
  • /etc/postfix/body_checks - e-Mail-Body (Inhaltinformationen) Filtern (:!: neu)
  • /etc/postfix/bounce.de-DE.cf - Template-Datei für deutsch/english-Texte beim bounce (Rückgabe) einer e-Mail (:!: neu)

/etc/postfix/main.cf

Die Hauptkonfigurationsdatei von Postfix.

Dies sind die Parameter, welche schon von der Linux Distribution CentOS abgeändert wurden, welche mit nachfolgendem Befehl aufgelistet werden können:

# 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
debug_peer_level = 2
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550

* postconf -n listet die Einstellungen in der main.cf auf, welche nicht dem Standard entsprechen.

Dies sind die Parameter, welche zusätzlich zu den Parameter, welche schon von der Linux Distribution CentOS abgeändert wurden, noch verändert werden sollten, um einen Postfix zu betreiben, der den eigenen Wünschen, in diesem Fall meinen, entspricht:

Parameter Wert Erklärung
myhostname mx1.tachtler.net externer Hostname des e-Mail Servers
myorigin nss.tachtler.net interner Hostname des e-Mail Servers
inet_interfaces all Interfaces die zum e-Mail-Verkehr genutzt werden
mydestination $myhostname, localhost.$mydomain, localhost, $mydomain, $myorigin Liste von Domains, zur e-Mail Annahme zugelassen
mynetworks 127.0.0.1/8, 192.168.0.0/24 Vertrauenswürdige Netzwerke (mit Sonderrechten)
relay_domains <leer> Abwärtskompatibilität, Fehler <trivial-rewrite>
masquerade_domains tachtler.net Domain, von ausgehenden e-Mails umschreiben
disable_vrfy_command yes SMTP-VRFY-Kommando verbieten
virtual_alias_domains btree:/etc/postfix/virtual_alias_domains Virtuelle Domain Definitionen - Weiterleitungen
virtual_alias_maps btree:/etc/postfix/virtual_alias_maps Virtuelle e-Mail-Adressen - Weiterleitungen
sender_canonical_maps btree:/etc/postfix/sender_canonical_maps Umschreibung (SMTP-Envelop, Header) Absender
recipient_canonical_maps btree:/etc/postfix/recipient_canonical_maps Umschreibung (SMTP-Envelop, Header) Empfänger
smtp_generic_maps btree:/etc/postfix/smtp_generic_maps Umschreibung (SMTP-Envelop. Header) ausg. smtp
lmtp_generic_maps btree:/etc/postfix/lmtp_generic_maps Umschreibung (SMTP-Envelop. Header) ausg. lmtp
header_checks pcre:/etc/postfix/header_checks Überprüfungen e-Mail-Header (Kopfinformationen)
body_checks pcre:/etc/postfix/body_checks Überprüfungen e-Mail-Body (Inhaltsinformationen)
bounce_template_file /etc/postfix/bounce.de-DE.cf Template Bounce-Meldungen deutsch/english
smtpd_helo_required yes Der Client muss ein HELO senden
*smtpd_discard_ehlo_keywords pipelining Nicht angebotene EHLO-Funktionen
smtpd_discard_ehlo_keyword_address_maps cidr:/etc/postfix/esmtp_access Nicht angebotene EHLO-Funktionen (Map)
smtpd_client_connection_count_limit 10 Anzahl Verbindungen pro Client - Limit
smtpd_client_recipient_rate_limit 10 Anzahl Empfänger pro Client - Limit
maximal_queue_lifetime 1d Wartezeit Zustellversuchszeitraum einer e-Mail
bounce_queue_lifetime 1d Wartezeit Unzustellbar-Meldung an Absender
unknown_address_reject_code 550 Reject-Code unbekannte e-Mail-Adresse
unknown_client_reject_code 550 Reject-Code für Client in einer Access-Tabelle
unknown_hostname_reject_code 550 Reject-Code unbekannte/unauflösbare Hostnamen
unknown_local_recipient_reject_code 550 Reject-Code unexis. Empf. mydestination
unknown_relay_recipient_reject_code 550 Reject-Code unexis. Empf. relay_domains
unknown_virtual_alias_reject_code 550 Reject-Code unexis. Empf. virtual_alias_domains
unknown_virtual_mailbox_reject_code 550 Reject-Code unexis. Empf. virtual_mailbox-domains
unverified_recipient_reject_code 577 Reject-Code noch nicht verifizierte Empfänger
unverified_sender_reject_code 577 Reject-Code noch nicht verifizierte Absender
parent_domain_matches_subdomains debug_peer_list,fast_flush_domains,mynetworks… SubDomain Restriktionen
smtpd_recipient_restrictions check_recipient_access = btree:/etc/postfix/check_recipient_access… Empfänger Restriktionen

* Nicht in Gebrauch, wenn smtpd_discard_ehlo_keyword_address_maps eingesetzt wird!

Dies sind die Parameter, welche nach einer Anpassungen als BEISPIEL dienen können und mit folgendem Befehl aufgelistet werden können:

# postconf -n
address_verify_map = btree:/var/spool/postfix/data/verify
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
body_checks = pcre:/etc/postfix/body_checks
bounce_queue_lifetime = 1d
bounce_template_file = /etc/postfix/bounce.de-DE.cf
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
header_checks = pcre:/etc/postfix/header_checks
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
lmtp_generic_maps = btree:/etc/postfix/lmtp_generic_maps
mail_owner = postfix
mailbox_transport = cyrus
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = tachtler.net
maximal_queue_lifetime = 1d
message_size_limit = 20480000
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, $myorigin
myhostname = mx1.tachtler.net
mynetworks = 127.0.0.0/8, 192.168.0.0/28, 88.217.171.167/32
myorigin = nss.tachtler.net
newaliases_path = /usr/bin/newaliases.postfix
parent_domain_matches_subdomains = 
                                 debug_peer_list,     
                                 fast_flush_domains,     
                                 mynetworks,     
                                 permit_mx_backup_networks,      
                                 qmqpd_authorized_clients,
                                 relay_domains
permit_mx_backup_networks = 88.217.187.21/32
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps
relay_domains = 
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtp_generic_maps = btree:/etc/postfix/smtp_generic_maps
smtp_tls_loglevel = 1
smtp_use_tls = yes
smtpd_client_connection_count_limit = 20
smtpd_client_recipient_rate_limit = 20
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
smtpd_helo_required = yes
smtpd_recipient_restrictions = 
                             check_recipient_access btree:/etc/postfix/check_recipient_access_rfc,    
                             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_non_fqdn_sender,  
                             reject_non_fqdn_recipient,      
                             reject_unknown_sender_domain,   
                             reject_unknown_recipient_domain,        
                             permit_sasl_authenticated,      
                             permit_mynetworks, 
                             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_client_access btree:/etc/postfix/check_client_access_policyd_weight,      
                             check_policy_service inet:127.0.0.1:12525,      
                             check_policy_service unix:postgrey/socket,  
                             reject_unverified_recipient,    
                             permit_mx_backup,       
                             reject_unauth_destination,      
                             permit
smtpd_tls_CAfile = /etc/pki/postfix/certs/CAcert.pem
smtpd_tls_cert_file = /etc/pki/postfix/certs/cert.pem
smtpd_tls_key_file = /etc/pki/postfix/private/key.pem
smtpd_tls_received_header = yes
smtpd_use_tls = yes
transport_maps = btree:/etc/postfix/transport_maps
unknown_address_reject_code = 550
unknown_client_reject_code = 550
unknown_hostname_reject_code = 550
unknown_local_recipient_reject_code = 550
unknown_relay_recipient_reject_code = 550
unknown_virtual_alias_reject_code = 550
unknown_virtual_mailbox_reject_code = 550
unverified_recipient_reject_code = 577
unverified_sender_reject_code = 577
virtual_alias_domains = btree:/etc/postfix/virtual_alias_domains
virtual_alias_maps = btree:/etc/postfix/virtual_alias_maps

/etc/postfix/master.cf

Folgende Änderungen gegenüber der Standard-Konfigurationsdatei /etc/postfix/master.cf wurden durchgeführt:

  • # Tachtler
    # AMaViS - Incoming and forward to AMaViS listen on Port 10024
    smtp      inet  n       -       n       -       -       smtpd
            -o smtpd_proxy_filter=127.0.0.1:10024
            -o content_filter=

Diese Änderung bewirkt, dass Postfix alle eingehenden e-Mails an AMaViS zur weiteren Prüfung, noch innerhalb des SMTP-Envelop-Dialogs weiterreicht.

:!: Dabei ist zu beachten, das AMaViS auf 127.0.0.1, Port 10024 lauscht!

  • # Tachtler
    # AMaViS - Outgoing from AMaViS, BACK to Postfix 
    127.0.0.1:10025 inet  n       -       n       -       -       smtpd
            -o content_filter=
            -o smtpd_proxy_filter=
            -o smtpd_authorized_xforward_hosts=127.0.0.0/8
            -o smtpd_client_restrictions=
            -o smtpd_helo_restrictions=
            -o smtpd_sender_restrictions=
            -o smtpd_recipient_restrictions=permit_mynetworks,reject
            -o smtpd_data_restrictions=
            -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24
            -o recesive_override_options=no_unknown_recipient_checks

Diese Änderung bewirkt, dass alle geprüften e-Mails von AMaViS zur Zustellung/Ablehnung an Postfix zurückgegeben werden.

:!: Dabei ist zu beachten, dass um einen loop zu verhindern, hier auf einem anderen Port als dem Standard e-Mail Port von Postfix - nämlich Port 25 - sondern auf Port 10025 die geprüften e-Mails wieder an Postfix zurückgegeben werden. Dies geschieht ebenfalls alles über localhost

  • # Tachtler
    # AMaViS - Incoming and forward to AMaViS listen on Port 10024
    pickup    fifo  n       -       n       60      1       pickup
            -o content_filter=smtp:[127.0.0.1]:10024

Diese Änderung bewirkt, dass Postfix alle eingehenden e-Mails an AMaViS zur weiteren Prüfung, noch innerhalb des SMTP-Envelop-Dialogs weiterreicht - auch, wenn diese lokal über pickup eingeliefert werden!

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

# Tachtler

versehen.

Hier die komplette Konfigurationsdatei, welche unter /etc/postfix zu finden ist und den Namen master.conf trägt:

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
# Tachtler
# AMaViS - Incoming and forward to AMaViS listen on Port 10024
smtp      inet  n       -       n       -       -       smtpd
        -o smtpd_proxy_filter=127.0.0.1:10024
        -o content_filter=
# Tachtler
# AMaViS - Outgoing from AMaViS, BACK to Postfix 
127.0.0.1:10025 inet  n       -       n       -       -       smtpd
        -o content_filter=
        -o smtpd_proxy_filter=
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o smtpd_data_restrictions=
        -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24
        -o recesive_override_options=no_unknown_recipient_checks
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628      inet  n       -       n       -       -       qmqpd
# Tachtler
# AMaViS - Incoming and forward to AMaViS listen on Port 10024
pickup    fifo  n       -       n       60      1       pickup
        -o content_filter=smtp:[127.0.0.1]:10024
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
smtp      unix  -       -       n       -       -       smtp
# When relaying mail as backup MX, disable fallback_relay to avoid MX loops
relay     unix  -       -       n       -       -       smtp
        -o fallback_relay=
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent.  See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop  unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#
# The Cyrus deliver program has changed incompatibly, multiple times.
#
old-cyrus unix  -       n       n       -       -       pipe
  flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user}
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
cyrus     unix  -       n       n       -       -       pipe
  user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user}
#
# See the Postfix UUCP_README file for configuration details.
#
uucp      unix  -       n       n       -       -       pipe
  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail    unix  -       n       n       -       -       pipe
  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -       n       n       -       -       pipe
  flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient

/etc/aliases

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 wird als Beispiel ein Benutzer, welchen es so im System als „richtigen“ Benutzer gar nicht gibt, mit dem Namen rsyslog zusätzlich zu den bereits vordefinierten „Aliasen“ der Konfigurationsdatei /etc/aliases hinzugefügt. Alle e-Mails welche an diesen Benutzer z.B. lokal verschickt werden, sollen in das Postfach des Benutzers root zugestellt werden.

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
amanda:         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
#root:          marc

# Tachtler
# rsyslog group mail settings
rsyslog:        root

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, mithilfe des Programms newaliases umgewandelt werden!

:!: Dies gilt nicht nur, wie zu lesen ist, für den MTA Sendmail, sondern auch für den MTA Postfix!

:!: Jedoch gibt es 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 (den Sendmail Umsteigern bekannt)

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

# ll /etc/aliases*
-rw-r--r-- 1 root root   1568 Dec  2 16:22 /etc/aliases
-rw-r----- 1 root smmsp 12288 Dec  2 16:24 /etc/aliases.db

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

/etc/postfix/virtual_alias_domains

Die Konfigurationsdatei /etc/postfix/virtual_alias_domains verwaltet Domain-Definitionen die als Alias für die Annahme von e-Mail für bestimmte Domains stehen.

Hier wird als Beispiel die Annahme von e-Mails für eine Subdomain, hier dokuwiki.tachtler.net beschrieben.

Dafür ist die 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:

dokuwiki.tachtler.net        irgendetwas

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/virtual_alias_domains

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_alias_domains.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/virtual_alias_domains*
-rw-r--r-- 1 root root  531 Dec  3 09:11 /etc/postfix/virtual_alias_domains
-rw-r--r-- 1 root root 8192 Dec  3 09:14 /etc/postfix/virtual_alias_domains.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/virtual_alias_maps

Die Konfigurationsdatei /etc/postfix/virtual_alias_maps verwaltet Alias-Definitionen, ähnlich wie die Konfigurationsdatei /etc/aliases. Auch hier wird die Annahme von e-Mail für bestimmte Empfänger realisiert.

:!: WICHTIG - Jedoch sollten hier nur Domains stehen bzw. mit Aliasen versehen werden, welche NICHT in $mydomain, $myorigin, $myhostname, localhost.$mydomain, localhost Verwendung finden!

Hier wird als Beispiel die Annahme von e-Mails für eine e-Mail-Adresse, hier @dokuwiki.tachtler.net beschrieben. Wobei es völlig egal ist, welcher Empfänger vor dem „@“-Zeichen steht, dieser wird übernommen. Z.B aus postmaster@dokuwiki.tachtler.net wird postmaster@tachtler.net.

Dafür ist die 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:

@dokuwiki.tachtler.net        @tachtler.net

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/virtual_alias_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/virtual_alias_maps.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/virtual_alias_maps*
-rw-r--r-- 1 root root   40 Dec  3 09:12 /etc/postfix/virtual_alias_maps
-rw-r--r-- 1 root root 8192 Dec  3 09:14 /etc/postfix/virtual_alias_maps.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

:!: Es bietet sich an, e-Mail-Weiterleitungen in /etc/postfix/virtual_alias_maps für virtuelle Benutzer oder allgemeine Adressen einzusetzen!

/etc/postfix/sender_canonical_maps

:!: ACHTUNG - Ab Postfix Version 2.2 wird canonical als Standard NUR für lokale erzeugte e-Mails genutzt !!!
* Für eine erweiterte Nutzung ist ein neuer Parameter local_header_rewrite_clients entsprechend anzupassen !

Die Konfigurationsdatei /etc/postfix/sender_canonical_maps ist ebenfalls in der Lage e-Mail-Adressen durch andere zu ersetzen. Aber nicht nur das, canonical geht weiter und schreibt Absenderadressen nicht nur im SMTP-Envelop, sondern auch im e-Mail-Header um.

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

Hier wird als Beispiel das Absenden von e-Mails mit einer e-Mail-Adresse, hier @dokuwiki.tachtler.net beschrieben. Wobei es völlig egal ist, welcher Empfänger vor dem „@“-Zeichen steht, dieser wird übernommen. Z.B aus postmaster@dokuwiki.tachtler.net wird postmaster@tachtler.net.

Dafür ist die 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

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/sender_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/sender_canonical_maps.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/sender_canonical_maps*
-rw-r--r-- 1 root root  644 Dec  4 13:12 /etc/postfix/sender_canonical_maps
-rw-r--r-- 1 root root 8192 Dec  4 13:28 /etc/postfix/sender_canonical_maps.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/recipient_canonical_maps

:!: ACHTUNG - Ab Postfix Version 2.2 wird canonical als Standard NUR für lokale erzeugte e-Mails genutzt !!!
* Für eine erweiterte Nutzung ist ein neuer Parameter local_header_rewrite_clients entsprechend anzupassen !

Die Konfigurationsdatei /etc/postfix/recipient_canonical_maps ist ebenfalls in der Lage e-Mail-Adressen durch andere zu ersetzen. Aber nicht nur das, canonical geht weiter und schreibt Empfängeradressen nicht nur im SMTP-Envelop, sondern auch im e-Mail-Header um.

:!: WICHTIG ist, dass die Empfänger e-Mail-Adresse nicht nur in /etc/postfix/recipient_canonical_maps eingetragen ist, sondern auch in /etc/postfix/virtual_alias_maps, da sonst die Annahme für z.B. admin@dokuwiki.tachtler.net verweigert werden würde!

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

Hier wird als Beispiel der Empfang von e-Mails mit einer e-Mail-Adresse, hier admin@dokuwiki.tachtler.net beschrieben. Hier wird aus admin@dokuwiki.tachtler.net die e-Mail-Adresse root@tachtler.net.

Dafür ist die 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@dokuwiki.tachtler.net        root@tachtler.net

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/recipient_canonical_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/recipient_canonical_maps.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/recipient_canonical_maps*
-rw-r--r-- 1 root root  701 Dec  5 11:51 /etc/postfix/recipient_canonical_maps
-rw-r--r-- 1 root root 8192 Dec  5 12:03 /etc/postfix/recipient_canonical_maps.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/smtp_generic_maps

Die Konfigurationsdatei /etc/postfix/smtp_generic_maps ist ebenfalls in der Lage e-Mail-Adressen durch andere zu ersetzen. Aber nicht nur das, smtp_generic_maps geht weiter und schreibt Absenderadressen nicht nur im SMTP-Envelop, sondern auch im e-Mail-Header um, wie der „große Bruder“ canonical, jedoch erst dann, wenn diese per SMTP das System verlassen!

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

Hier wird als Beispiel das Absenden von e-Mails mit einer e-Mail-Adresse, hier rsyslog@nss.tachtler.net beschrieben. Hier wird aus rsyslog@nss.tachtler.net die e-Mail-Adresse rsyslog@tachtler.net.

Dafür ist die Konfigurationsdatei /etc/postfix/smtp_generic_maps mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/smtp_generic_maps

Danach sollte der Inhalt wie folgt aussehen:

rsyslog@nss.tachtler.net        rsyslog@tachtler.net

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/smtp_generic_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/smtp_generic_maps.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/smtp_generic_maps*
-rw-r--r-- 1 root root   47 Dec  5 13:03 /etc/postfix/smtp_generic_maps
-rw-r--r-- 1 root root 8192 Dec  5 13:38 /etc/postfix/smtp_generic_maps.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/lmtp_generic_maps

Die Konfigurationsdatei /etc/postfix/lmtp_generic_maps ist ebenfalls in der Lage e-Mail-Adressen durch andere zu ersetzen. Aber nicht nur das, lmtp_generic_maps geht weiter und schreibt Absenderadressen nicht nur im SMTP-Envelop, sondern auch im e-Mail-Header um, wie der „große Bruder“ canonical, jedoch erst dann, wenn diese per LMTP das System verlassen!

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

Hier wird als Beispiel das Absenden von e-Mails mit einer e-Mail-Adresse, hier rsyslog@nss.tachtler.net beschrieben. Hier wird aus rsyslog@nss.tachtler.net die e-Mail-Adresse rsyslog@tachtler.net.

Dafür ist die Konfigurationsdatei /etc/postfix/lmtp_generic_maps mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/lmtp_generic_maps

Danach sollte der Inhalt wie folgt aussehen:

rsyslog@nss.tachtler.net        rsyslog@tachtler.net

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/lmtp_generic_maps

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/lmtp_generic_maps.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/lmtp_generic_maps*
-rw-r--r-- 1 root root   47 Dec  5 13:36 /etc/postfix/lmtp_generic_maps
-rw-r--r-- 1 root root 8192 Dec  5 13:38 /etc/postfix/lmtp_generic_maps.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/transport_maps

:!: WICHTIG - Die Konfiguratiosndatei /etc/postfix/transport_maps wird hier NUR theoretisch dargestellt!

Dei Konfigurationsdatei /etc/postfix/transport_maps dient dazu, ein vom Standard abweichendes Mailrouting zu 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.

Die Erstellung und die Umwandlung von einer Text-Datei in das hash-Format oder sogar das btree-Format ist identisch mit allen anderen Konfigurationsdateien, die mit dem Postfix eigenen Programm postmap umgewandelt werden!

/etc/postfix/relocated_maps

:!: WICHTIG - Die Konfiguratiosndatei /etc/postfix/relocated_maps wird hier NUR theoretisch dargestellt!

Dei Konfigurationsdatei /etc/postfix/relocated_maps dient dazu, 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,

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

sondern, wenn die e-Mail-Adresse sich lediglich geändert hat, dem Absender die neue e-Mail-Adresse mitzuteilen!

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

Heutzutage ist die Konfigurationsdatei /etc/postfix/relocated_maps 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!

:!: Auf den Einsatz kann verzichtet werden!

/etc/postfix/header_checks

Die hier in dieser Konfigurationsdatei durchgeführte Filterung, bezieht sich auf die Informationen im e-Mail-Header, wie z.B. „From“, „Subject“ usw.

Ein Beispiel für eine solche Konfigurationsdatei könnte wie folgt aussehen. Hier wird als erstes alles nicht gefiltert, was von localhost kommt, aber es wird alles gefiltert, was von spam.com kommt. Darüberhinaus kann jedes Feld des e-Mail-Headers gefiltert werden.

/^Received: from localhost/            IGNORE

/^Received:.*spam\.com                 REJECT Header-Spamschutzregel RECD-1000

# Weitere Beispiele

if /^From:/i
/^From:.*spam.org/                     REJECT Header-Spamschutzregel FROM-1001
Endif

if /^To:/i
/^To:.*spam.net/                       REJECT Header-Spamschutzregel TOTO-1002
Endif

if /^Subject:/i
/^Subject:.*Gratisaktion.*/            REJECT Header-Spamschutzregel SUBJ-1003
Endif

# Spezielles Beispiel
/^(To|From|Cc|Reply-To):.*@spam.gov/   REJECT Header-Spamschutzregel MULT-1004

:!: WICHTIG - Ein Aufruf für die Umwandlung der Konfigurationsdatei /etc/postfix/header_checks in das regexp-Format oder noch besser in das Format pcre von postmap, ist NICHT erforderlich. Es wird bei regexp oder pcre die ACSII-Datei als solches von Postfix interpretiert!

:!: WICHTIG - Bei Änderungen ist ein reload von Postfix notwendig!

/etc/postfix/body_checks

Die hier in dieser Konfigurationsdatei durchgeführte Filterung, bezieht sich auf die Informationen im e-Mail-Body.

Ein Beispiel für eine solche Konfigurationsdatei könnte wie folgt aussehen. Hier wird im Text der e-Mail nach dem Vorkommen von „spam.org“, „spam.net“, oder „spam.com“ gesucht!

/.*spam\.(org|net|com)/                REJECT Body-Spamschutzregel TEXT-1000

:!: WICHTIG - Ein Aufruf für die Umwandlung der Konfigurationsdatei /etc/postfix/body_checks in das regexp-Format oder noch besser in das Format pcre von postmap, ist NICHT erforderlich. Es wird bei regexp oder pcre die ACSII-Datei als solches von Postfix interpretiert!

:!: WICHTIG - Bei Änderungen ist ein reload von Postfix notwendig!

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

Dies ist eine Template-Datei (Vorlagen-Datei) für deutsch/english-Sprachige Texte beim bounce (Rückgabe) einer e-Mail.

Diese Template-Datei kann unter folgendem Link heruntergeladen werden:

und hat folgenden Inhalt:

# $Id: bounce.de-DE.cf 15 2005-12-27 18:33:49Z patrick $
#
# Deutsch-sprachige Vorlagen fuer Postfix Zustell-Status-Benachrichtigungen
# (engl. DSN, Delivery Status Notification)
#
# Uebersetzt und an die deutsche Sprache angepasst von Patrick Koetter
# <p@state-of-mind.de> und Ralf Hildebrandt <ralf.hildebrandt@charite.de>.
#
# Folgen Sie den Anweisungen der bounce(5) manual page, um die in dieser Datei
# enthaltenen Zustell-Status-Benachrichtigungen in Ihren Postfix-Server
# einzubinden.


# failure_template
# Das failure_template kommt zum Einsatz, wenn der empfangende Mail-Server die
# Nachricht entweder zurueckgewiesen hat oder wenn die Nachricht nicht
# innerhalb eines vorgegebenen Zeitraums ($maximal_queue_lifetime) zugestellt
# werden konnte.
#
# In beiden Faellen wird der Inhalt von failure_template zusammen mit der
# urspruenglich gesendeten Nachricht und dem Fehler, der die Benachrichtigung
# hervorgerufen hat an den Absender der E-Mail gesendet.

failure_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Rueckgabe nicht zustellbarer Nachricht an Absender
Postmaster-Subject: Postmaster Copy: Undelivered Mail

Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:


    Ihre Nachricht konnte an einen oder mehrere Empfaenger nicht zugestellt
    werden. Ein Problem-Bericht, sowie Ihre uspruengliche Nachricht wurden an
    das Ende dieser Nachricht angehaengt.


Fuer weitere Hilfe kontaktieren Sie bitte den fuer Sie zustaendigen
<postmaster>.

Senden Sie dazu den an diese E-Mail angefuegten Problem-Bericht mit.
Den Inhalt Ihrer urspruenglichen Nachricht koennen Sie - zum Schutz Ihrer
Privatsphaere - entfernen; er ist fuer eine Fehler-Diagnose nicht zwingend
notwendig.

                   Der $mail_name E-Mail-Dienst

                        INTERNATIONAL VERSION

This is the $mail_name program 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>

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

EOF


# delay_template
# Das delay_template kommt zum Einsatz, wenn sich die Zustellung einer
# Nachricht verzoegert - die Zustellung wird so lange versucht, bis der Postfix
# Server sie wegen Ueberschreitung der $maximal_queue_lifetime abbrechen muss.
#
# Anmerkung:
# Die Standardvorgaben in Postfix sehen vor, dass Zustell-Verzoegerungen in
# Stunden ($delay_warning_time_hours) und die maximale Lebenszeit einer
# Nachricht in der Postfix Zustell-Warteschlange in Tagen
# ($maximal_queue_lifetime_days) angegeben werden.
#
# Alternativ koennen Sie anstatt der genannten Zeiteinheiten auch Sekunden,
# Minuten oder Wochen angeben, indem Sie die aktuelle Zeiteinheit des
# Parameters durch _seconds, _minutes oder _weeks austauschen und den
# begleitenden Text in der Vorlage anpassen.

delay_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Nachricht wurde verzoegert (Zustellung wird weiter versucht)
Postmaster-Subject: Postmaster Warning: Delayed Mail

Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:


    Eine von Ihnen gesendete Nachricht konnte seit $delay_warning_time_hours
    Stunden nicht zugestellt werden.
    
    Sie muessen die Nachricht nicht noch einmal senden. Der $mail_name
    E-Mail-Dienst wird so lange versuchen Ihre Nachricht zuzustellen,
    bis sie $maximal_queue_lifetime_days Tage alt ist.

    Sollte eine Zustellung bis in $maximal_queue_lifetime_days Tagen nicht
    gelingen, wird der $mail_name E-Mail-Dienst die Zustellung abbrechen und
    Sie davon in Kenntnis setzen.


Fuer weitere Hilfe kontaktieren Sie bitte den fuer Sie zustaendigen
<postmaster>.

Senden Sie dazu den, in dieser E-Mail angefuegten, Problem-Bericht mit.
Den Inhalt Ihrer urspruenglichen Nachricht koennen Sie, zum Schutz Ihrer
Privatsphaere, entfernen; er ist fuer eine Fehler-Diagnose nicht zwingend
notwendig.

                   Der $mail_name E-Mail-Dienst


                        INTERNATIONAL VERSION

This is the $mail_name program at host $myhostname.

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

Your message could not be delivered for $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_name program
EOF


# success_template
# Das success_template kommt zum Einsatz, wenn eine Nachricht an ein Postfach
# zugestellt wurde, wenn ein Alias-Name oder eine Liste von Empfaengern in ihre
# Zieladressen aufgeloest wurde oder wenn eine Nachricht an ein System
# zugestellt wurde, das im Dialog mit Ihrem Postfix-Server keine
# DSN-Faehigkeiten erkennen lies.
#
# Achtung:
# Sie duerfen fuer diese Art von Zustell-Status-Benachrichtigung kein
# Postmaster-Subject: angeben.

success_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Bericht ueber erfolgreiche Zustellung

Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:


    Ihre Nachricht wurde erfolgreich an die E-Mail-Server der am Ende dieser
    E-Mail aufgelisteten Empfaenger ausgeliefert.

    Falls Sie eine Zustellbericht angefordet haben und der empfangende
    E-Mail-Server diese Funktionalitaet unterstuetzt erhalten Sie
    auch von diesem E-Mail-Server eine entsprechende Benachrichtigung.


                   Der $mail_name E-Mail-Dienst


                        INTERNATIONAL VERSION

This is the $mail_name program 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_name program
EOF


# verify_template
# Das verify_template kommt zum Einsatz, wenn Adress-Ueberpruefung (sendmail
# -bv adresse...) oder ausfuehrliche Protokollierung (sendmail -v adresse...)
# angefordert wurde.
#
# Achtung:
# Sie duerfen fuer diese Art von Zustell-Status-Benachrichtigung kein
# Postmaster-Subject: angeben.

verify_template = <<EOF
Charset: iso-8859-1
From: MAILER-DAEMON (Mail Delivery System)
Subject: Zustellbericht (Mail Delivery Status Report)

Dies ist eine automatisch generierte Nachricht des $mail_name E-Mail-Dienstes.
Dieser Dienst wird auf dem Server $myhostname betrieben und teilt Ihnen
folgendes mit:


    Sie haben einen Empfaenger-Adressen-Bericht angefordert. Der Bericht wurde
    an diese Nachricht angehaengt.


                   Der $mail_name E-Mail-Dienst


                        INTERNATIONAL VERSION

This is the $mail_name program at host $myhostname.

Enclosed is the mail delivery report that you requested.

                   The $mail_name program
EOF

Konfiguration: Postfix - Restrictions

Die „Restriktionen“ sind sozusagen die Schaltzentrale des Postfix.

Um zu verhindern, dass der MTA Postfix nicht jede an ihn gerichtete e-Mail annimmt und z.B. SPAM erfolgreich ablehnen kann, ist es erforderlich ein Regelwerk zu definieren, mit Hilfe dessen festgelegt werden kann, wann der MTA Postfix e-Mails annehmen, oder ablehnen soll.

Diese Festlegungen erfolgt mit Hilfe der Restrictions.

Der entscheidende Moment, an dem Postfix SPAM und auch andere unerwünschten e-Mails zurückweisen kann bzw. erst gar nicht annimmt, ist der Einlieferungszeitpunkt!

Was Postfix nicht annimmt, braucht auch nicht weiterverarbeitet zu werden! Analog dem Briefverkehr wird festgelegt, welche e-Mails überhaupt in die Briefkästen geworfen werden können und dürfen und welche nicht!

Folgende Restrictions sind in Postfix möglich:

  • smtpd_client_restrictions - Prüfungen, welche beim „connect“ (Verbinden) durchgeführt werden
  • smtpd_helo_restrictions - Prüfungen, welche nach dem „HELO/EHLO“ durchgeführt werden
  • smtpd_sender_restrictions - Prüfungen, welche nach der Bekanntgabe von „MAIL FROM:“ durchgeführt werden
  • smtpd_recipient_restrictions - Prüfungen, welche nach dem „RCPT TO:“, durchgeführt werden - Zusätzliche aufgeteilt in fünf Dateien und welche weitere Konfigurations-Angaben beinhaltet!
    • /etc/postfix/check_recipient_access_rfc - RFC-Konforme Prüfungen von Empfängeradressen (z.B. postmaster, abuse usw.) (:!: neu)
    • /etc/postfix/check_client_access - White- und Blacklisting für Client-IP-Adressen (:!: neu)
    • /etc/postfix/check_helo_access - White- und Blacklisting für HELO/EHLO-Server (:!: neu)
    • /etc/postfix/check_sender_access - White- und Blacklisting für Absenderadressen (:!: neu)
    • /etc/postfix/check_recipient_access - White- und Blacklisting für Empfängeradressen (:!: neu)
  • smtpd_data_restrictions - Prüfungen, welche nach dem „DATA“ durchgeführt werden
  • smtpd_end_of_data_restrictions - Prüfungen, welche nach erfolgter e-Mail-Übertragung durchgeführt werden

:!: WICHTIG - In der hier nachfolgend dargestellten Konfiguration wird ausschließlich - smtpd_recipient_restrictions genutzt!

* (Der Grund hierfür, kann ausführlich und anschaulich im Buch Das Postfix-Buch nachgelesen werden!)

/etc/postfix/check_recipient_access_rfc

In dieser Konfigurationsdatei werden die Pflichtadressen jedes MTA (Mail Transport Agends) eingetragen.

:!: Dies wird von RFC 822 und von RFC 2142 gefordert!

Eine Unterlassung der Annahme für e-Mails an mindestens diese beiden Adressen, kann evtl. zur folge haben, dass ein Eintrag auf sog. „Blacklists“ wie z.B. rfc-ignorant.org erfolgt, was für einen erfolgreichen Betrieb eines eigenen e-Mail-Servers nicht gerade förderlich sein dürfte!

Dafür ist die Konfigurationsdatei /etc/postfix/check_recipient_access_rfc mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_recipient_access_rfc

Danach sollte der Inhalt mindestens wie folgt aussehen:

postmaster@tachtler.net        OK
abuse@tachtler.net             OK

oder, für alle Domains für die sich der MTA „zuständig“ fühlt

postmaster@                    permit_auth_destination
abuse@                         permit_auth_destination

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

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

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/check_recipient_access_rfc*
-rw-r--r-- 1 root root   51 Dec 12 13:08 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Dec 12 13:08 /etc/postfix/check_recipient_access_rfc.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/check_client_access

In dieser Konfigurationsdatei können IP-Adressen oder sogar ganze Netzwerkbereiche eingetragen werden!

:!: WICHTIG - Es können in einer „noramlen“ access-Tabelle keine Netzwerkmasken angegeben werden. Darum kann es sinnvoll sein, hier den Konfiguratiosndatei-Typ cidr zu verwenden!

Dafür ist die Konfigurationsdatei /etc/postfix/check_client_access mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_client_access

Danach sollte der Inhalt der Konfigurationsdatei z.B. wie folgt aussehen:

127.0.0.0/8             OK
192.168.0.0/24          OK

10.0.0.0/8              REJECT
172.16.0.0/12           REJECT

:!: 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 - Ein Aufruf für die Umwandlung der Konfigurationsdatei /etc/postfix/check_client_access in das cidr-Format von postmap ist NICHT erforderlich. Es wird bei cidr die ACSII-Datei als solches von Postfix interpretiert!

:!: WICHTIG - Bei Änderungen ist ein reload von Postfix notwendig!

/etc/postfix/check_helo_access

In dieser Konfigurationsdatei werden die „HELO/EHLO“-Kennungen eingetragen.

Dafür ist die Konfigurationsdatei /etc/postfix/check_helo_access mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_helo_access

Danach kann der Inhalt auch leer bleiben!

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

:!: Zum Abschluss kann auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_helo_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_helo_access.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/check_helo_access*
-rw-r--r-- 1 root root    0 Dec 15 10:18 /etc/postfix/check_helo_access
-rw-r--r-- 1 root root 8192 Dec 15 10:19 /etc/postfix/check_helo_access.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/check_sender_access

In dieser Konfigurationsdatei werden die Absender e-Mail-Adressen eingetragen.

Dafür ist die Konfigurationsdatei /etc/postfix/check_sender_access mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_sender_access

:!: WICHTIG - Danach sollte der Inhalt auch vorerst leer bleiben! - Jedoch sollten keine Einträge mit OK erfolgen!

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

:!: Zum Abschluss kann auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_sender_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_sender_access.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/check_sender_access*
-rw-r--r-- 1 root root    0 Dec 15 10:23 /etc/postfix/check_sender_access
-rw-r--r-- 1 root root 8192 Dec 15 10:23 /etc/postfix/check_sender_access.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

/etc/postfix/check_recipient_access

In dieser Konfigurationsdatei werden die Empfänger e-Mail-Adressen eingetragen.

Dafür ist die Konfigurationsdatei /etc/postfix/check_recipient_access mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_recipient_access

:!: WICHTIG - Danach sollte der Inhalt auch vorerst leer bleiben!

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

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_recipient_access

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_recipient_access.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/check_recipient_access*
-rw-r--r-- 1 root root    0 Dec 15 10:28 /etc/postfix/check_recipient_access
-rw-r--r-- 1 root root 8192 Dec 15 10:29 /etc/postfix/check_recipient_access.db
-rw-r--r-- 1 root root   51 Dec 12 13:08 /etc/postfix/check_recipient_access_rfc
-rw-r--r-- 1 root root 8192 Dec 12 13:08 /etc/postfix/check_recipient_access_rfc.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

Konfiguration: Postfix - Policy Delegation

Unter Policy Delegation ist die Möglichkeit von Postfix über einen UNIX-Socket oder eine TCP-Verbindung im Klartext bekannte technische Merkmale einer e-Mail an einen Policy-Daemon zu übermitteln. Dieser Policy-Daemon trifft dann eine Entscheidung über die weitere Behandlung der e-Mail und liefert dieses Ergebnis dann an Postfix zurück.

Greylisting mit postgrey

Einer dieser Policy-Daemon's bietet die Möglichkeit Greylisting über Postgrey zu betreiben.

Postgrey herunterladen

Nach Möglichkeit sollte auf die Installation über ein RPM-Paket zurückgegriffen werden. Unter folgendem Link kann ein entsprechendes RPM-Paket heruntergeladen werden:

Folgende Perl-Module sind zur Ausführung von Postgrey notwendig:

Postgrey installieren

Unter CentOS besteht die Möglichkeit eine Installation über folgende Befehle durchzuführen, ausgehend davon das sich die RPM-Pakete im Verzeichnis /tmp befinden:

# yum localinstall --nogpgcheck /tmp/perl-BerkeleyDB-0.36-1.el5.rf.i386.rpm
# yum localinstall --nogpgcheck /tmp/perl-IO-Multiplex-1.10-1.el5.rf.noarch.rpm
# yum localinstall --nogpgcheck /tmp/perl-Net-Server-0.97-1.el5.rf.noarch.rpm
# yum localinstall --nogpgcheck /tmp/postgrey-1.31-1.el5.rf.noarch.rpm

Nach der Installation, kann mit folgendem Befehl überprüft werden, was alles im Paket postgrey.i386 enthalten ist:

# rpm -qil postgrey | more
Name        : postgrey                     Relocations: (not relocatable)
Version     : 1.31                              Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
Release     : 1.el5.rf                      Build Date: Fri 22 Feb 2008 04:21:47 PM CET
Install Date: Thu 18 Dec 2008 01:36:41 PM CET      Build Host: lisse.leuven.wieers.com
Group       : System Environment/Daemons    Source RPM: postgrey-1.31-1.el5.rf.src.rpm
Size        : 101072                           License: GPL
Signature   : DSA/SHA1, Tue 26 Feb 2008 02:24:57 AM CET, Key ID a20e52146b8d79e6
Packager    : Dag Wieers <dag@wieers.com>
URL         : http://postgrey.schweikert.ch/
Summary     : Postfix Greylisting Policy Server
Description :
Postgrey is a Postfix policy server implementing greylisting.  When a request
for delivery of a mail is received by Postfix via SMTP, the triplet CLIENT_IP /
SENDER / RECIPIENT is built.  If it is the first time that this triplet is
seen, or if the triplet was first seen less than 5 minutes, then the mail gets
rejected with a temporary error. Hopefully spammers or viruses will not try
again later, as it is however required per RFC.
/etc/postfix/postgrey_whitelist_clients
/etc/postfix/postgrey_whitelist_clients.local
/etc/postfix/postgrey_whitelist_recipients
/etc/rc.d/init.d/postgrey
/usr/sbin/postgrey
/usr/sbin/postgreyreport
/usr/share/doc/postgrey-1.31
/usr/share/doc/postgrey-1.31/COPYING
/usr/share/doc/postgrey-1.31/Changes
/usr/share/doc/postgrey-1.31/README
/usr/share/doc/postgrey-1.31/README-rpm
/usr/share/man/man8/postgrey.8.gz
/var/spool/postfix/postgrey

Folgender Benutzer wurde ebenfalls angelegt, was mit folgende Befehl überprüft werden kann:

# cat /etc/passwd | grep post
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
postgrey:x:100:103::/var/spool/postfix/postgrey:/sbin/nologin

Desweiteren wurden auch folgende Gruppen angelegt, was mit folgendem Befehl überprüft werden kann:

# cat /etc/group | grep post
mail:x:12:mail,postfix
postdrop:x:90:
postfix:x:89:
postgrey:x:103:

Um das Starten des Postgrey auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird Postgrey zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig postgrey on

Ein Überprüfung, ob nur noch der Postgrey in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep postgrey
postgrey        0:off   1:off   2:on    3:on    4:on    5:on    6:off

Abschließend ist ein Start von Postgrey notwendig, was mit folgendem Befehl realisiert werden kann:

# service postgrey start
Starting postgrey:                                         [  OK  ]

Die Ausgabe der „Start“-Meldung des Postgrey in der Log-Datei /var/log/maillog sollte in etwa wie folgt aussehen und kann mit folgendem Befehl Abgefragt werden (nur relevanter Ausschnitt):

# cat /var/log/maillog
...
Dec 18 13:57:11 nss postgrey[16526]: Process Backgrounded
Dec 18 13:57:11 nss postgrey[16526]: 2008/12/18-13:57:11 postgrey (type Net::Server::Multiplex) starting! pid(16526)
Dec 18 13:57:11 nss postgrey[16526]: Binding to UNIX socket file /var/spool/postfix/postgrey/socket using SOCK_STREAM#012
Dec 18 13:57:11 nss postgrey[16526]: Setting gid to "103 103"
Dec 18 13:57:11 nss postgrey[16526]: Setting uid to "100"
...

Postgrey in Postfix einbinden

Um Postgrey in Postfix einzubinden, bestehen zwei Möglichkeiten:

  1. Über einen UNIX-Socket, falls sich Postfix und Postgrey auf einem Server befinden
  2. Über eine TCP-Verbindung
UNIX-Socket

Ein Definition in der /etc/postfix/main.cf würde in diesem Fall wie folgt aussehen (nur relevanter Ausschnitt):

...
        reject_rhsbl_client blackhole.securitysage.com,
        check_policy_service unix:postgrey/socket,
        reject_unverified_recipient,
...
TCP-Verbindung

Ein Definition in der /etc/postfix/main.cf würde in diesem Fall wie folgt aussehen (nur relevanter Ausschnitt):

...
        reject_rhsbl_client blackhole.securitysage.com,
        check_policy_service inet:127.0.0.1:10023,
        reject_unverified_recipient,
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Erweiterte gewichtete Prüfungen mit policyd-weight

Ein weiterer dieser Policy-Daemon's bietet die Möglichkeit erweiterte gewichtete Prüfungen über policyd-weight zu realisieren.

policyd-weight herunterladen

Nach Möglichkeit sollte auf die Installation über ein RPM-Paket zurückgegriffen werden. Unter folgendem Link kann ein entsprechendes RPM-Paket heruntergeladen werden:

Folgende Perl-Module sind zur Ausführung von policyd-weight notwendig:

policyd-weight installieren

Unter CentOS besteht die Möglichkeit eine Installation über folgende Befehle durchzuführen, ausgehend davon das sich die RPM-Pakete im Verzeichnis /tmp befinden:

# yum localinstall --nogpgcheck /tmp/perl-Unix-Syslog-1.0-1.el5.rf.i386.rpm
# yum localinstall --nogpgcheck /tmp/policyd-weight-0.1.14b17-1.noarch.rpm

Nach der Installation, kann mit folgendem Befehl überprüft werden, was alles im Paket policyd-weight.noarch enthalten ist:

# rpm -qil policyd-weight | more
]# rpm -qil policyd-weight | more
Name        : policyd-weight               Relocations: (not relocatable)
Version     : 0.1.14b17                         Vendor: (none)
Release     : 1                             Build Date: Tue 03 Jun 2008 07:46:52 AM CEST
Install Date: Sun 21 Dec 2008 11:37:27 AM CET      Build Host: c4-lx-infbld01.corp1.local
Group       : Applications/System           Source RPM: policyd-weight-0.1.14b17-1.src.rpm
Size        : 189293                           License: GPL
Signature   : (none)
Packager    : Morgan Weetman <morganweetman@users.sourceforge.net>
URL         : http://www.policyd-weight.org
Summary     : Weighted Postfix SMTPD policy daemon written entirely in perl.
Description :
policyd-weight is a Perl policy daemon for the Postfix MTA (2.1 and later) intended to eliminate forged envelope senders and HELOs (i.e. in bogus mails). It allows you to score DNSBLs (RBL/RHSBL), HELO, MAIL FR
OM and client IP addresses before any queuing is done. It allows you to REJECT messages which have a score higher than allowed, providing improved blocking of spam and virus mails. policyd-weight caches the mos
t frequent client/sender combinations (SPAM as well as HAM) to reduce the number of DNS queries.
/etc/init.d/policyd-weight
/etc/policyd-weight.conf
/usr/sbin/policyd-weight
/usr/share/doc/policyd-weight-0.1.14b17/COPYING
/usr/share/doc/policyd-weight-0.1.14b17/LICENSE
/usr/share/doc/policyd-weight-0.1.14b17/changes.txt
/usr/share/doc/policyd-weight-0.1.14b17/documentation.txt
/usr/share/doc/policyd-weight-0.1.14b17/policyd-weight.conf.sample
/usr/share/doc/policyd-weight-0.1.14b17/todo.txt
/usr/share/man/man5/policyd-weight.conf.5.gz
/usr/share/man/man8/policyd-weight.8.gz

Folgender Benutzer wurde ebenfalls angelegt, was mit folgende Befehl überprüft werden kann:

# cat /etc/passwd | grep polw
polw:x:101:502:policyd-weight daemon:/home/polw:/sbin/nologin

Desweiteren wurden auch folgende Gruppen angelegt, was mit folgendem Befehl überprüft werden kann:

# cat /etc/group | grep polw
polw:x:502:

Um das Starten des policyd-weight auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird policyd-weight zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig policyd-weight on

Ein Überprüfung, ob nur noch der policyd-weight in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep policyd-weight
policyd-weight  0:off   1:off   2:on    3:on    4:on    5:on    6:off

Abschließend ist ein Start von policyd-weight notwendig, was mit folgendem Befehl realisiert werden kann:

# service policyd-weight start
Starting policyd-weight:                                   [  OK  ]

Die Ausgabe der „Start“-Meldung des policyd-weight in der Log-Datei /var/log/maillog sollte in etwa wie folgt aussehen und kann mit folgendem Befehl Abgefragt werden (nur relevanter Ausschnitt):

# cat /var/log/maillog
...
Dec 21 11:38:05 nss postfix/policyd-weight[24246]: warning: Got SIGINT. Daemon terminated.
Dec 21 11:43:25 nss postfix/policyd-weight[24320]: policyd-weight 0.1.14 beta-17 started and daemonized. conf:/etc/policyd-weight.conf; GID:502 502 EGID:502 502 UID:101 EUID:101; taint mode: 0
Dec 21 11:43:25 nss postfix/policyd-weight[24320]: warning: cache_query: $csock couln't be created: connect: No such file or directory, calling spawn_cache()
Dec 21 11:43:25 nss postfix/policyd-weight[24322]: cache spawned
...

Folgender Befehl, überprüft das laufen der benötigten Prozesse:

# ps aux | grep policyd-weight
polw     24320  0.0  0.8  12448  7996 ?        Ss   11:43   0:00 policyd-weight (master)
polw     24322  0.0  0.7  12448  7604 ?        Ss   11:43   0:00 policyd-weight (cache)
root     24353  0.0  0.0   3912   688 pts/2    R+   11:48   0:00 grep policyd-weight

Folgender Befehle zeigen, auf welchem Port policyd-weight (standardmäßig) lauscht:

]# netstat -tulpen | grep policyd
tcp        0      0 127.0.0.1:12525             0.0.0.0:*                   LISTEN      0          197701     24320/policyd-weigh

und wie policyd-weight gestartet wurde:

# lsof -i :12525
COMMAND     PID USER   FD   TYPE DEVICE SIZE NODE NAME
policyd-w 24320 polw    4u  IPv4 197701       TCP localhost.localdomain:12525 (LISTEN)

policyd-weight in Postfix einbinden

Um policyd-weight in Postfix einzubinden, muss folgende Definition in der /etc/postfix/main.cf erfolgen und würde in diesem Fall wie folgt aussehen (nur relevanter Ausschnitt):

...
        reject_rhsbl_client blackhole.securitysage.com,
        check_policy_service inet:127.0.0.1:12525,
        check_policy_service unix:postgrey/socket,
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

policyd-weight Ausnahmeregelungen

Um z.B. für gewisse Clients eine Ausnahme zu definieren, da bei kleineren aber durchaus auch bei größeren Providern, ein MX-Cluster (ein Verbund von mehreren Rechner mit derselben Aufgabe) sich verbergen können und gerade auch hier es vorkommt, dass diese nicht immer richtig konfiguriert sind, können in einer Ausnahme-Tabelle diese gepflegt werden.

Um für diesen Fall, Probleme bei der Bewertung von diesen e-Mails zu vermeiden, und dadurch evtl. „false positives“ zu produzieren, kann eine Ausnahme-Tabelle mit den z.B. Namen /etc/postfix/check_client_access_policyd_weight definiert werden und in der Konfigurationsdatei /etc/postfix/main.cf von Postfix wie folgt eingebunden werden (nur relevanter Ausschnitt):

...
        reject_rhsbl_client blackhole.securitysage.com,
        check_client_access btree:/etc/postfix/check_client_access_policyd_weight,
        check_policy_service inet:127.0.0.1:12525,
...

Hier wird als Beispiel die Annahme von e-Mails für example.com beschrieben.

Dafür ist die Konfigurationsdatei /etc/postfix/check_client_access_policyd_weight mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/check_client_access_policyd_weight

Danach sollte der Inhalt wie folgt aussehen:

example.com             OK

:!: 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!

:!: Zum Abschluss muss auch hier diese Text-Datei in ein hash-Format, oder besser noch in das Format btree mithilfe des Postfix eigenen Befehls postmap umgewandelt werden.

Der Aufruf für die Umwandlung in das z.B. btree-Format lautet wie folgt:

# postmap btree:/etc/postfix/check_client_access_policyd_weight

Anschließend sollte eine neue Datei mit dem Namen /etc/postfix/check_client_access_policyd_weight.db entstanden sein.

Dies kann mit folgendem Befehl überprüft werden:

# ll /etc/postfix/check_client_access_policyd_weight*
-rw-r--r-- 1 root root    0 Dec 21 12:33 /etc/postfix/check_client_access_policyd_weight
-rw-r--r-- 1 root root 8192 Dec 21 12:34 /etc/postfix/check_client_access_policyd_weight.db

Damit ist die Umwandung in das btree-Format abgeschlossen.

:!: SPAM läst meist auch nicht lange auf sich warten, wie folgendes Beispiel aus der LOG-Datei /var/log/maillog zeigt:

Dec 21 16:31:14 nss postfix/smtpd[25550]: connect from 124-11-193-25.static.tfn.net.tw[124.11.193.25]
Dec 21 16:31:16 nss postfix/policyd-weight[25555]: child: spawned
Dec 21 16:31:17 nss postfix/policyd-weight[25555]: weighted check:  NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_NE_HELO=1.5 RESOLVED_IP_IS_NOT_HELO=1.5 HELO_NUMERIC=2.5 (check from: .yahoo. - helo: .88.217.171.167. - helo-domain: .167.)  FROM_NOT_FAILED_HELO(DOMAIN)=3; <client=124.11.193.25> <helo=88.217.171.167> <from=jk9l3g4jle@yahoo.com> <to=sseenndd1201@yahoo.com.hk>; rate: 4
Dec 21 16:31:17 nss postfix/policyd-weight[25555]: decided action=550 Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs; MTA helo: 88.217.171.167, MTA hostname: 124-11-193-25.static.tfn.net.tw[124.11.193.25] (helo/hostname mismatch); <client=124.11.193.25> <helo=88.217.171.167> <from=jk9l3g4jle@yahoo.com> <to=sseenndd1201@yahoo.com.hk
>; delay: 1s
Dec 21 16:31:17 nss postfix/smtpd[25550]: NOQUEUE: reject: RCPT from 124-11-193-25.static.tfn.net.tw[124.11.193.25]: 550 5.7.1 <sseenndd1201@yahoo.com.hk>: Recipient address rejected: Mail appeared to be SPAM or forged. Ask your Mail/DNS-Administrator to correct HELO and DNS MX settings or to get removed from DNSBLs; MTA helo: 88.217.171.167, MTA hostname: 124-11-193-25.static.tfn.net.tw[124.11.193.25] (helo/hostname
 mismatch); from=<jk9l3g4jle@yahoo.com> to=<sseenndd1201@yahoo.com.hk> proto=SMTP helo=<88.217.171.167>
Dec 21 16:31:17 nss postfix/smtpd[25550]: lost connection after RCPT from 124-11-193-25.static.tfn.net.tw[124.11.193.25]
Dec 21 16:31:17 nss postfix/smtpd[25550]: disconnect from 124-11-193-25.static.tfn.net.tw[124.11.193.25]

Sender Policy Framework (SPF)

Der Einsatz des Sender Policy Frameworks ist eher 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!

Es würde auch die Möglichkeit verhindern, e-Mails mit eigener Absender-e-Mail-Adresse über einen dritten Rechner zu versenden. Es wäre also nur möglich e-Mails auch über den Mail-Server zu versenden, auf dem auch das Postfach liegt! Also wär der Versand über ein z.B. WebFormular, oder eine Web-Grußkarte über einen Drittanbieter 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) erstellt werden kann:

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

tachtler.net.                           IN      TXT     "v=spf1 ip4:88.217.171.167/32 a mx include:tachtler.net ?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
a Die im A-Record bezeichnete Adresse, 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
include:tachtler.net Jeder Server welcher mit tachtler.net endet, hat 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:

Konfiguration: Delivery Status Notifications (DSN)

Unter der Abkürzung DSN verbirgt sich hier im Zusammenhang Delivery Status Notifications - was so viel wie Benachrichtigung an den Absender über die normalen Bounce-Nachrichten hinaus bedeutet. Evtl. auch als „Benachrichtigung über gelesen an den Absender“ bekannt. Letztendlich vordert hier der Absender einer e-Mail Informationen (auch über eine erfolgreich zugestellte e-Mail) vom eigenen MTA Mail Transport Agent an. Folgende Beispiele sollen dieses Verfahren verdeutlichen.

Nachrichten an den Absender z.B. bei:

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

Die einzelnen Möglichkeiten sind ebenfalls sinnvoll miteinander kombinierbar!

:!: Aufgrund von evtl. unerwünschter Server-Last oder auch 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!

Delivery Status Notifications (DSN) deaktivieren

Es sind nur wenige Parameter notwendig um Delivery Status Notifications (DSN) zu deaktivieren. Eine Deaktivierung kann auch, je nach Herkunft des Clients deaktiviert werden. Letztere Option soll anhand eines Beispiels durchgeführt werden. Dabei soll nur für die evtl. lokal vorhandenen Clients - Delivery Status Notifications (DSN) erlaubt sein, für alle anderen Clients NICHT!

Dazu ist es notwendig unter folgendem Parameter in der Konfigurationsdatei /etc/postfix/main.cf nachfolgende Datei zu definieren (relevanter Ausschnitt):

...
smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/esmtp_access
...

Dabei gibt es zwei Optionen, welche jeweils hinter der entsprechenden IP-Adresse und der dazugehörigen Subnetz-Maske stehen dürfen:

  1. silent-dicard - Es werden keine LOG-Meldungen geschrieben
  2. dsn - Verschweigt im SMTP-Dialog die DSN-Fähigkeit vollständig!

:!: WICHTIG - Es können in einer „normalen“ access-Tabelle keine Netzwerkmasken angegeben werden. Darum kann es sinnvoll sein, hier den Konfigurationsdatei-Typ cidr zu verwenden!

Dafür ist die Konfigurationsdatei /etc/postfix/esmtp_access mit folgendem Befehl neu zu erstellen:

# touch /etc/postfix/esmtp_access

Danach sollte der Inhalt der Konfigurationsdatei z.B. wie folgt aussehen:

192.168.0.0/24          silent-discard
0.0.0.0/0               silent-discard, dsn
::/0                    silent-discard, dsn

:!: Falls weitere „Schlüsselwörter“ vom HELO/EHLO ausgeschlossen werden sollen, müssen diese ebenfalls hier aufgenommen werden und ggf. die Option smtpd_discard_ehlo_keywords auskommentiert werden, da ein Einsatz beider Optionen NICHT möglich ist!

Evtl. kann der Inhalt der Konfigurationsdatei z.B. auch wie folgt aussehen:

192.168.0.0/24          pipelining, silent-discard
0.0.0.0/0               pipelining, silent-discard, dsn
::/0                    pipelining, silent-discard, dsn

:!: 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 - Ein Aufruf für die Umwandlung der Konfigurationsdatei /etc/postfix/esmtp_access in das cidr-Format von postmap ist NICHT erforderlich. Es wird bei cidr die ACSII-Datei als solches von Postfix interpretiert!

:!: WICHTIG - Bei Änderungen ist ein reload von Postfix notwendig!

Zum Abschluss kann ein Test über den Aufruf von telnet an mx1.tachtler.net gerichtet, Aufschluss über die Möglichen HELO/EHLO Möglichkeiten des MTA geben:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO mx1.tachtler.net
250-mx1.tachtler.net
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250 8BITMIME
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Konfiguration: Rate-Limiting gegenüber Clients

Postfix bietet die Möglichkeit ein Rate-Limiting für Clients einzusetzen. Dabei wird das in Postfix normalerweise bereits eingebundene und aktive Modul - anvil genutzt. Beim Rate-Limiting wird überprüft

  1. wie viele Verbindungen pro Zeiteinheit ein Client aufbauen darf
  2. wie viele Empfänger pro Zeiteinheit bei einem Client zulässig sind

Zuerst ist es sinnvoll die Standardwerte der einzelnen Parameter zu kennen. Mit den nachfolgenden Befehlen können die Standardwerte ermittelt werden:

Zeiteinheit des Moduls - anvil

# postconf -d anvil_rate_time_unit
anvil_rate_time_unit = 60s

Erlaubte Anzahl von Verbidungen, pro Zeiteinheit eines Clients

# postconf -d smtpd_client_connection_count_limit
smtpd_client_connection_count_limit = 50

Erlaubte Anzahl von Empfängern, pro Zeiteinheit eines Clients

# postconf -d smtpd_client_recipient_rate_limit
smtpd_client_recipient_rate_limit = 0

* smtpd_client_recipient_rate_limit = 0 bedeuetet unlimitiert

:!: Eine Limitierung kann durchaus sinnvoll sein!

Um eine Limitierung in Postfix festzulegen, können folgende Definitionen in der /etc/postfix/main.cf durchgeführt werden (nur relevanter Ausschnitt):

...
smtpd_client_connection_count_limit = 10
smtpd_client_recipient_rate_limit = 10
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

Konfiguration: Queue-Haltezeiten anpassen

Wie andere MTA's auch, bietet Postfix die Möglichkeit „Wartezeiten“ welche in sogenannten Queue's realisiert werden variablen einzustellen.

Ein Beispiel dafür ist, wie lange Postfix versucht eine e-Mail zuzustellen, wenn der annehmende MTA diese aktuell nicht annimmt, bevor Postfix diese e-Mail als „gebounct“ - als unzustellbar - zurückweist und eine Bounce-Nachricht an den Absender zustellt.

Auch hier der Befehl, wie der Standardwert für die Versuche eine e-Mail zuzustellen, abgefragt werden kann:

# postconf -d maximal_queue_lifetime
maximal_queue_lifetime = 5d

:!: Der Absender einer e-Mail würde also erst nach fünf Tagen erfahren, dass seine e-Mail nicht zugestellt werden konnte!

Ebenso gibt es einen Wert für die „Wartezeit“ von „gebouncten“ e-Mails. Dies wäre praktisch die Information an den Absender, dass die e-Mail nicht zugestellt werden konnte, die ebenfalls NICHT zugestellt werden kann.

Auch hier der Befehl, wie der Standardwert für die Versuche eine „Bounce“-e-Mail zuzustellen, abgefragt werden kann:

# postconf -d bounce_queue_lifetime
bounce_queue_lifetime = 5d

:!: Die eingestellten Werte von fünf Tagen scheinen in der heutigen Zeit etwas lang und auch für das Verständnis vieler e-Mail-Nutzer sehr lange. Deshalb ist die Korrektur der Werte auf z.B. drei Tage oder gar einen Tag durchaus sinnvoll!

Um eine Änderung der Werte in Postfix zu realisieren, können folgende Definitionen in der /etc/postfix/main.cf durchgeführt werden (nur relevanter Ausschnitt):

...
maximal_queue_lifetime = 1d
bounce_queue_lifetime = 1d
...

Abschließend ist ein Neustart des Postfix mit folgendem Befehl notwendig:

# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]

SASL-Authentifikation

:!: Bevor mit der grundlegenden Konfiguration von Postfix-SASL begonnen werden kann, ist sicherzustellen, dass der der Daemon - saslauthd gestartet ist.

Um das Starten von saslauthd auch nach einem System-(re)-start auch in Zukunft dauerhaft zu realisieren, kann folgender Befehl genutzt werden. Hier wird saslauthd zu den Start-Scripten der einzelnen Runlevel des Betriebssystem hinzugefügt:

# chkconfig saslauthd on

Ein Überprüfung, ob saslauthd in den einzelnen Runlevel des Betriebssystems bei einem system-(re)-start mit gestartet wird, kann mit folgenden Befehlen abgefragt werden:

# chkconfig --list | grep saslauthd
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off

Es gibt verschiedene Möglichkeiten der Authentifizierung von Postfix gegen SASL. Standardmäßig authentifiziert sich Postfix gegen den Daemon saslauthd, wie beschrieben!

:!: Wenn als pwcheck_method: saslauthd angegeben ist, sind NUR die Methoden PLAIN und LOGIN nur erlaubt!

Dabei ist die Standardeinstellung in der Konfigurationsdatei /etc/sysconfig/saslauthd ist folgende:

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

Un die Standardeinstellung der Konfigurationsdatei /usr/lib/sasl2/smtpd.conf ist folgende:

pwcheck_method: saslauthd

:!: Um nun die Authentifizierung gegen LDAP zu erreichen, sind folgende Änderungen an den Konfigurationsdateien notwendig. Zuerst /etc/sysconfig/saslauthd:

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
# Tachtler
# default: MECH=pam
MECH=ldap

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

und die Konfigurationsdatei /usr/lib/sasl2/smtpd.conf:

pwcheck_method: auxprop
log_level: 3
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5

:!: Wenn als pwcheck_method: auxprop angegeben ist, sind AUCH die Methoden CRAM-MD5 und DIGEST-MD5 erlaubt!

:!: WICHTIG Jetzt müssen die LDAP-Aufruf-Parameter festgelegt werden, was die Anlage einer neuen Konfigurationsdatei im Verzeichnis /etc mit dem Namen saslauthd.conf erfordert, was mit folgendem Befehl realisiert werden kann:

# touch /etc/saslauthd.conf

Die Konfigurationsdatei /etc/saslauthd.conf sollte folgenden Inhalt haben:

ldap_servers: ldap://ldap.tachtler.net
ldap_search_base: dc=tachtler,dc=net
ldap_bind_dn: cn=Superbenutzer,dc=tachtler,dc=net
ldap_bind_pw: geheim
ldap_scope: sub
ldap_uidattr: uid
ldap_filter_mode: yes
ldap_filter: uid=%U

Zuletzt müssen noch in der Konfigurationsdatei /etc/postfix/main.cf folgende Einstellungen hinzugefügt werden:

smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes

Eine Anmeldung via telnet würde dann folgendes Ergebnis liefern:

# telnet mx1.tachtler.net 25
Trying 88.217.171.167...
Connected to mx1.tachtler.net (88.217.171.167).
Escape character is '^]'.
220 mx1.tachtler.net ESMTP Postfix
EHLO mx1.tachtler.net
250-mx1.tachtler.net
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
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

MX-Backup einrichten

Falls ein Backup-Server für Postfix eingesetzt werden soll sind folgende Schritte durchzuführen. Es wird hier davon ausgegangen, dass folgendes Szenario umgesetzte wird:

  • MX-Server Priorität 10: mx1.tachtler.net (eigener MX-Server)
  • MX-Server Priorität 20: mx1.nausch.org (backup MX-Server)

und natürlich auch umgekehrt!!! - :!: Diese „umgekehrte Konfiguration“ wird hier beschrieben!

Die Richtigkeit der DNS-Einträge, kann mit folgendem Befehl überprüft werden (nur relevanter Auszug aus der Antowrt des Befehls):

# dig tachtler.net MX
...
;; ANSWER SECTION:
tachtler.net.           86400   IN      MX      10 mx1.tachtler.net.
tachtler.net.           86400   IN      MX      20 mx1.nausch.org.
...

Es soll ein sogenannter „Store-and-Forward“ - Backup-Server umgesetzt werden. Hier werden die e-Mails vom Backup-Server angenommen und bei Widerverfügbarkeit an den eigentlichen MX-Server dann zugestellt.

/etc/postfix/master.cf

Folgende Einstellung muss in der Konfigurationsdatei /etc/postfix/master.cf überprüft werden:

...
verify    unix  -       -       n       -       1       verify
...

* Falls das Modul verify nicht aktiv sein sollte, sollte dieses aktiviert werden!

Dies dient später dem Backup-Server zur dynamischen Überprüfung, ob er für die entsprechende e-Mail-Adresse überhaupt e-Mails entgegennehmen darf bzw. kann! Falls ein positives Ergebnis zu Annahme für eine e-Mail-Adresse erfolgt, wird dieses Ergebnis in einer lokalen Datenbank (Berkely DB) für einen gewissen Zeitraum zwischengespeichert!

:!: HINWEIS - Die Überprüfung erfolgt, wenn VRFY nicht aktiv ist über HELO, MAIL FROM, RCPT TO, QUIT

/etc/postfix/main.cf

Folgende Änderungen sind an der Konfigurationsdatei /etc/postfix/main.cf durchzuführen:

Zuerst einmal sollte disable_vrfy_command = no eingestellt sein. Dies ist der Default-Wert, also muss hier kein Eintrag in der Konfigurationsdatei /etc/postfix/main.cf erfolgen!

Die folgende Änderung dient zum Aufbau einer Datei mit „erlaubten e-Mail-Adressen“ durchgeführt werden:

...
# Backup-Mailserver Verification Database
#
address_verify_map = btree:/var/spool/postfix/data/verify
permit_mx_backup_networks = 88.217.187.21/32
...

Als nächstes muss noch der Rückgabe-Wert, falls eine ungültige e-Mail-Adresse vom Backup-Server angefragt wird, von 450 auf 550 abgeändert werden, was mit folgendern ergänzung durchgeführt werden kann:

...
unverified_recipient_reject_code = 577
...

Als letztes muss noch sichergestellt werde, dass die Prüfungen unter smtpd_recipient_restrictions wie folgt in der richtigen Reihenfolge an der richtigen Stelle stehen:

...
# Greylisting check over UNIX-Socket - active -
        check_policy_service unix:postgrey/socket,
# Check dynamicly existing Relay-Recipient
        reject_unverified_recipient,
# Allow Backup-MX
        permit_mx_backup,
# Deny all other Relaying
        reject_unauth_destination,
...

Anschließend muss ein Verzeichnis mit dem Namen /var/sool/postfix/data mit nachfolgendem Befehl angelegt werden:

# mkdir /var/spool/postfix/data

Die entsprechenden Besitzrechte können mit folgendem Befehl wie folgt angepasst werden:

# chown -R postfix.root /var/spool/postfix/data

Die entsprechenden Zugriffsrechte können mit folgendem Befehl wie folgt angepasst werden:

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

Postfix erster Test

Jetzt ist der Zeitpunkt für einen ersten Test gekommen, um zu sehen ob der auch korrekt konfiguriert ist!

Unter dem folgendem Link, kann ein solcher Test durchgeführt werden. :!: WICHTIG - Die Firewall z.B. iptables sollte jetzt auf Port 25 (SMTP) offen sein!

Ein Ergebnis eines Testes sollte dann wie folgt aussehen:

Mail relay testing
Connecting to 88.217.171.167 for anonymous test ...

<<< 220 mx1.tachtler.net ESMTP Postfix
>>> HELO www.abuse.net
<<< 250 mx1.tachtler.net
Relay test 1
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@abuse.net>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 2
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 504 5.5.2 <spamtest>: Sender address rejected: need fully-qualified address
Relay test 3
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 4
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 5
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@tachtler.net>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 6
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest%abuse.net@[88.217.171.167]>
<<< 450 4.1.1 <securitytest%abuse.net@[88.217.171.167]>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 7
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest%abuse.net@tachtler.net>
<<< 450 4.1.1 <securitytest%abuse.net@tachtler.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 8
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<"securitytest@abuse.net">
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 9
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<"securitytest%abuse.net">
<<< 504 5.5.2 <securitytest%abuse.net>: Recipient address rejected: need fully-qualified address
Relay test 10
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net@[88.217.171.167]>
<<< 450 4.1.1 <securitytest@abuse.net@[88.217.171.167]>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 11
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<"securitytest@abuse.net"@[88.217.171.167]>
<<< 450 4.1.1 <securitytest@abuse.net@[88.217.171.167]>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 12
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<securitytest@abuse.net@tachtler.net>
<<< 450 4.1.1 <securitytest@abuse.net@tachtler.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 13
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<@[88.217.171.167]:securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 14
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<@tachtler.net:securitytest@abuse.net>
<<< 450 4.1.1 <securitytest@abuse.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 15
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<abuse.net!securitytest>
<<< 504 5.5.2 <abuse.net!securitytest>: Recipient address rejected: need fully-qualified address
Relay test 16
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<abuse.net!securitytest@[88.217.171.167]>
<<< 450 4.1.1 <abuse.net!securitytest@[88.217.171.167]>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test 17
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<spamtest@[88.217.171.167]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<abuse.net!securitytest@tachtler.net>
<<< 450 4.1.1 <abuse.net!securitytest@tachtler.net>: Recipient address rejected: undeliverable address: host smtp.abuse.net[208.31.42.109] said: 553 Not a valid address at abuse.net (5.1.1) (in reply to RCPT TO command)
Relay test result
All tests performed, no relays accepted.
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.txt · Zuletzt geändert: 2013/03/11 21:05 von klaus