Inhaltsverzeichnis
Postfix CentOS 7 - SRS einsetzen
SPF kann Probleme bei der E-Mail Umleitungen z.B. bei Web-Formularen verursachen. SRS (Sender Rewriting Scheme) ist eine Möglichkeit, eine E-Mail so umzuschreiben, dass das SPF (Sender Policy Framework) auch mit E-Mail-Umleitungen funktioniert.
SRS (Sender Rewriting Scheme) ist eine einfache Möglichkeit bei der Weiterleitung von E-Mails durch den MTA, die E-Mail-Adresse des Absenders im Envelop umzuschreiben und anzupassen bzw. zu erweitern. Das ursprüngliche Konzept wurde im Entwurf, welcher unter nachfolgendem externen Link einsehbar ist draft-mengwong-sender-rewrite veröffentlicht und weiter in nachfolgender Spezifikation, ebenfalls in nachfolgendem externen Link einsehbar The Sender Rewriting Scheme spezifiziert.
Das Sender Rewriting Scheme (kurz SRS) ist eine Methode, um den Absender (genauer: den Envelope Sender) einer E-Mail so umzuschreiben, dass das Sender Policy Framework (SPF) auch mit E-Mail-Umleitungen funktioniert.
Bei einer E-Mail-Umleitung werden nicht nur den Absender im Header unverändert gelassen, sondern auch der im SMTP vorgesehene Envelope Sender, der mit SPF überprüft wird. In so einem Fall ist der weiterleitende E-Mail-Server möglicherweise nicht im Sinne von SPF berechtigt, die E-Mail zu versenden.
Wird als Lösung jedoch der Envelope Sender einfach umgeschrieben, kann es passieren, dass Fehlermeldungen nicht mehr ankommen.
Beispiel:
a@d1.example
schreibt eine E-Mail an b@d2.example
; die E-Mail an b@d2.example
wird jedoch an c@d3.example
weitergeleitet. Der E-Mail-Server von d2.example
ist nicht berechtigt die E-Mail von d1.example
zu versenden, also ist die E-Mail aus Sicht von d3.example
ungültig. Würde der E-Mail-Server von d2.example
die Adresse b@d2.example
als Absender nehmen, könnte d3.example
den ursprünglichen Absender a@d1.example
nicht informieren, wenn ein Fehler bei der Zustellung stattfände, denn d3.example
würde die Fehlernachricht an b@d2.example
versenden, was wieder weitergeleitet würde und damit wieder fehlschlagen würde.
SRS löst das Problem dadurch, dass der ursprüngliche Absender im neuen Absender kodiert wird, im obigen Beispiel z.B. in der Form a#d1.example-b@d2.example
.
Da das aber dazu führen könnte, dass man E-Mails mit gefälschtem Absender über SRS versenden könnte, ist in der SRS-Adresse ein zusätzlicher kryptographischer Hash vorgesehen, der die Adresse sichert. Eine vollständige SRS-Adresse hat die Form.
SRS0=HHH=TT=hostname=local-part@domain
wobei HHH
für den Hash und TT
für einen Zeitstempel steht.
HINWEIS - Aus Sicht des Versenders einer E-Mail kann SRS eine unbefriedigende Lösung sein, da er zwar mit SPF bestimmen kann, welche E-Mail-Server mit eigenen Absenderadressen versenden dürfen, er aber darauf angewiesen ist, dass alle weiterleitenden E-Mail-Server SRS implementieren, damit die E-Mail sicher zugestellt wird, was jedoch letztendlich außerhalb seines Einflussbereiches liegt.
* Quelle: Wikipedia: Sender Rewriting Scheme
WICHTIG - Bei CentOS ab der Version 7.x ist Postfix in der Version 2.10.1 enthalten, was die Nutzung einiger Möglichkeiten neuerer Postfix Versionen verhindert. Deshalb soll Postfix aus nachfolgendem Drittanbieter-Repository installiert werden! - Siehe dazu den nachfolgenden internen Link:
Postfix wird von Wietse Venema entwickelt.
PostSRSd (Postfix SRS Deamon) wird von Timo Röhling entwickelt.
Beschreibung | Externer Link |
---|---|
Homepage | http://www.openspf.org/SRS |
Dokumentation | http://www.openspf.org/svn/project/specs/drafts/draft-mengwong-sender-rewrite-01.txt http://www.libsrs2.org/srs/srs.pdf |
Wikipedia | https://de.wikipedia.org/wiki/Sender_Rewriting_Scheme |
Beschreibung | Externer Link |
---|---|
Homepage | https://github.com/roehling |
Dokumentation | https://github.com/roehling/postsrsd |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Herunterladen
Nachfolgend soll das Drittanbieter-Repository, welches von dem von mir sehr geschätzten Michael Nausch betrieben und eine sichere und verlässliche Quelle für rpm-Pakete ist, wie unter nachfolgendem internen Link dargestellt, eingebunden werden:
Installation
Nachfolgendes rpm
-Paket ist zur Installation erforderlich:
Die Installation von postsrsd
, kann durch ausführen des nachfolgenden Befehls durchgeführt werden:
# yum install postsrsd Loaded plugins: changelog, priorities 224 packages excluded due to repository priority protections Resolving Dependencies --> Running transaction check ---> Package postsrsd.x86_64 0:1.2-1.el7.centos will be installed --> Finished Dependency Resolution Changes in packages about to be updated: Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: postsrsd x86_64 1.2-1.el7.centos mailserver.guru-os 23 k Transaction Summary ================================================================================ Install 1 Package Total download size: 23 k Installed size: 45 k Is this ok [y/d/N]: y Downloading packages: postsrsd-1.2-1.el7.centos.x86_64.rpm | 23 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : postsrsd-1.2-1.el7.centos.x86_64 1/1 Verifying : postsrsd-1.2-1.el7.centos.x86_64 1/1 Installed: postsrsd.x86_64 0:1.2-1.el7.centos Complete!
Die Installation von postsrsd
, kann durch ausführen des nachfolgenden Befehls durchgeführt werden:
# rpm -qil postsrsd Name : postsrsd Version : 1.2 Release : 1.el7.centos Architecture: x86_64 Install Date: Thu 10 Nov 2016 09:51:19 AM CET Group : System Environment/Daemons Size : 46260 License : GPL Signature : RSA/SHA1, Wed 03 Dec 2014 01:04:43 PM CET, Key ID 60ecfb9e8195aea0 Source RPM : postsrsd-1.2-1.el7.centos.src.rpm Build Date : Wed 03 Dec 2014 01:04:33 PM CET Build Host : vml000200.dmz.nausch.org Relocations : (not relocatable) Packager : Django <django@mailserver.guru> URL : https://github.com/roehling/postsrsd/archive/1.2.tar.gz Summary : PostSRSd provides the Sender Rewriting Scheme (SRS) via TCP-based lookup tables for Postfix. Description : PostSRSd provides the Sender Rewriting Scheme (SRS) via TCP-based lookup tables for Postfix. SRS is needed if your mail server acts as forwarder. /etc/sysconfig/postsrsd /usr/lib/systemd/system/postsrsd.service /usr/sbin/postsrsd /usr/share/doc/postsrsd-1.2 /usr/share/doc/postsrsd-1.2/README.md /usr/share/doc/postsrsd-1.2/main.cf.ex /var/lib/postsrsd
Konfiguration: SRS
/etc/sysconfig/postsrsd
Standardmäßig wird nach der Installation von SRS - postsrsd
in nachfolgendem Verzeichnis mit nachfolgendem Namen die Konfigurationsdatei für den SRS - postsrsd
hinterlegt:
/etc/sysconfig/postsrsd
Nachfolgende Änderungen sind an der Konfigurationsdatei /etc/sysconfig/postsrsd
durchzuführen:
(Komplette Konfigurationsdatei)
# Default settings for postsrsd # Local domain name. # Addresses are rewritten to originate from this domain. The default value # is taken from `postconf -h mydomain` and probably okay. # # Tachtler # default: #SRS_DOMAIN=example.com SRS_DOMAIN=tachtler.net # Exclude additional domains. # You may list domains which shall not be subjected to address rewriting. # If a domain name starts with a dot, it matches all subdomains, but not # the domain itself. Separate multiple domains by space or comma. # # Tachtler #SRS_EXCLUDE_DOMAINS=.example.com,example.org SRS_EXCLUDE_DOMAINS=.edmz.tachtler.net,.idmz.tachtler.net,.intra.tachtler.net,dmarc.tachtler.net,dmarcreports.tachtler.net # Secret key to sign rewritten addresses. # When postsrsd is installed for the first time, a random secret is generated # and stored in /etc/postsrsd.secret. For most installations, that's just fine. # SRS_SECRET=/etc/postsrsd.secret # Local ports for TCP list. # These ports are used to bind the TCP list for postfix. If you change # these, you have to modify the postfix settings accordingly. The ports # are bound to the loopback interface, and should never be exposed on # the internet. # SRS_FORWARD_PORT=10001 SRS_REVERSE_PORT=10002 # Drop root privileges and run as another user after initialization. # This is highly recommended as postsrsd handles untrusted input. # RUN_AS=nobody # Jail daemon in chroot environment CHROOT=/var/lib/postsrsd
Nachfolgende Änderungen sollten vorgenommen werden:
SRS_DOMAIN=tachtler.net
Definition der Domain für die SRS (Sender Rewriting Scheme) zur Anwendung kommen soll.
SRS_EXCLUDE_DOMAINS=.edmz.tachtler.net,.idmz.tachtler.net,.intra.tachtler.net,dmarc.tachtler.net,dmarcreports.tachtler.net
Definition der Domain und Sub-Domain die vom SRS (Sender Rewriting Scheme) zur Anwendung ausgeschlossen werden sollen. Das können z.B. alle internen und weitere besondere Domains und Sub-Domains sein.
Konfiguration: Postfix
/etc/postfix/main.cf
Hier die Änderungen an der Konfigurationsdatei /etc/postfix/main.cf
(Nur relevanter Ausschnitt):
... # ADDRESS REWRITING # # The ADDRESS_REWRITING_README document gives information about # address masquerading or other forms of address rewriting including # username->Firstname.Lastname mapping. # Tachtler - new - Das Postfix Buch - Seite 116-119. # without SRS: recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps, tcp:127.0.0.1:10002 # Tachtler - new - # default: recipient_canonical_classes = envelope_recipient, header_recipient recipient_canonical_classes = envelope_recipient # without SRS: sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps, tcp:127.0.0.1:10001 # Tachtler - new - # default: sender_canonical_classes = envelope_sender, header_sender sender_canonical_classes = envelope_sender ...
Nachfolgende Änderungen sollten vorgenommen werden:
recipient_canonical_maps = btree:/etc/postfix/recipient_canonical_maps, tcp:127.0.0.1:10002
Angabe der TCP lookup table
, über die der Empfänger umgeschrieben werden soll.
recipient_canonical_classes = envelope_recipient
Welche Klassen sind der Adresszuordnung von recipient_canonical_maps
unterworfen. Standardmäßig wird die Adresszuordnung von recipient_canonical_maps
auf Envelop-Empfängeradressen und auf Header-Empfängeradressen angewendet.
sender_canonical_maps = btree:/etc/postfix/sender_canonical_maps, tcp:127.0.0.1:10001
Angabe der TCP lookup table
, über die der Sender umgeschrieben werden soll.
sender_canonical_classes = envelope_sender
Welche Klassen sind der Adresszuordnung von sender_canonical_maps
unterworfen. Standardmäßig wird die Adresszuordnung von sender_canonical_maps
auf Envelop-Absenderadressen und auf Header-Absenderadressen angewendet.
Erster Start/Neustart
SRS Dienst/Daemon-Start einrichten
Um den SRS (Sender Rewriting Scheme) der als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# systemctl enable postsrsd Created symlink from /etc/systemd/system/multi-user.target.wants/postsrsd.service to /usr/lib/systemd/system/postsrsd.service.
Eine Überprüfung, ob beim Neustart des Server der postsrsd
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# systemctl list-unit-files --type=service | grep -e postsrsd postsrsd.service enabled
bzw.
# systemctl is-enabled postsrsd enabled
Erster Start SRS
Um den SRS (Sender Rewriting Scheme) zu starten kann nachfolgender Befehl angewandt werden:
# systemctl start postsrsd
Eine Überprüfung ob der Start des SRS (Sender Rewriting Scheme) erfolgreich war kann mit nachfolgendem Befehl durchgeführt werden, welcher eine Ausgabe in etwa wie nachfolgende erzeugen sollte:
# systemctl status postsrsd ● postsrsd.service - PostSRSd Daemon Loaded: loaded (/usr/lib/systemd/system/postsrsd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2016-11-10 10:36:03 CET; 5s ago Main PID: 2241 (postsrsd) CGroup: /system.slice/postsrsd.service └─2241 /usr/sbin/postsrsd -f10001 -r10002 -dtachtler.net -s/etc/po... Nov 10 10:36:03 server60.idmz.tachtler.net systemd[1]: Started PostSRSd Daemon. Nov 10 10:36:03 server60.idmz.tachtler.net systemd[1]: Starting PostSRSd Daem... Hint: Some lines were ellipsized, use -l to show in full
bzw. mit nachfolgendem Befehl, ob der Dienst/Daemon in der Prozessliste erscheint:
# ps aux | grep postsrsd nobody 2241 0.0 0.0 6452 712 ? Ss 10:36 0:00 /usr/sbin/postsrsd -f10001 -r10002 -dtachtler.net -s/etc/postsrsd.secret -unobody -c/var/lib/postsrsd -X root 2264 0.0 0.0 112648 932 pts/0 S+ 10:36 0:00 grep --color=auto postsrsd
Neustart Postfix
Um den Postfix neu zu starten kann nachfolgender Befehl angewandt werden:
# systemctl restart postfix
Eine Überprüfung ob der Neustart des Postfix erfolgreich war kann mit nachfolgendem Befehl durchgeführt werden, welcher eine Ausgabe in etwa wie nachfolgende erzeugen sollte:
# systemctl status postfix ● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2016-11-10 10:39:08 CET; 4s ago Process: 2648 ExecStop=/usr/sbin/postfix stop (code=exited, status=0/SUCCESS) Process: 2666 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS) Process: 2663 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS) Process: 2660 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS) Main PID: 2738 (master) CGroup: /system.slice/postfix.service ├─2738 /usr/libexec/postfix/master -w ├─2739 pickup -l -t unix -u -o content_filter=lmtp:[192.168.0.70]:10024 -o lmtp_use_tls=yes └─2740 qmgr -l -t unix -u Nov 10 10:39:07 server60.idmz.tachtler.net systemd[1]: Starting Postfix Mail Transport Agent... Nov 10 10:39:08 server60.idmz.tachtler.net postfix/master[2738]: daemon started -- version 2.11.8, configuration /etc/postfix Nov 10 10:39:08 server60.idmz.tachtler.net systemd[1]: Started Postfix Mail Transport Agent.
Überprüfungen
Nachfolgende soll überprüft werden, ob die Umschreibungen auch tatsächlich durchgeführt werden.
/var/log/maillog
Nachfolgende Zeile sollte in der LOG-Datei /var/log/maillog
erscheinen, solbald eine Umschreibung durchgeführt wird:
(Nur relevanter Ausschnitt):
... Nov 10 10:53:52 server60 postsrsd[4658]: srs_forward: <nick.kerchen@mnet-online.de> rewritten as <SRS0+yx42=Y1=mnet-online.de=nick.kerchen@tachtler.net>
Wird ein bounce vom Zielsystem der Nachricht durchgeführt, kann das relayende System den eigentlichen Absender informieren, da vom SRS (Sender Rewriting Scheme) Dienst/Deamon die Zieladresse wieder ermitteln und zurück umgeschrieben werden kann (srs_reverse
).
(Nur relevanter Ausschnitt):
... Nov 10 10:55:35 server60 postsrsd[6883]: srs_reverse: <SRS0+yx42=Y1=mnet-online.de=nick.kerchen@tachtler.net> rewritten as <nick.kerchen@mnet-online.de> ... ... Nov 10 10:56:12 server60 postfix/smtp[6883]: 8413383: to=<nick.kerche@mnet-online.de>, orig_to= <SRS0+yx42=Y1=mnet-online.de=nick.kerchen@tachtler.net>, relay=mail-out.m-online.net[212.18.0.9]:25, delay=0.75, delays=0.06/0/0.41/0.29, dsn=2.0.0, status=sent (250 Requested mail action okay, completed: id=0Btr1f-2Y2H7s3AB3-012SFG) ...
E-Mail-Header
Auch im Header der zugestellten E-Mail wird beim Empfänger die Umschreibung auch im Return-Path hinterlegt:
(Nur relevanter Ausschnitt):
... Return-Path: <SRS0+yx42=Y1=mnet-online.de=nick.kerchen@tachtler.net> ...