Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
centos:mail_c7:spam_11 [03.12.2014 18:15. ] – SRS - Sender Rewriting Scheme unter CentOS 7.x #srs #postfix #email #spf django | centos:mail_c7:spam_11 [18.11.2024 19:11. ] (aktuell) – Externe Bearbeitung 127.0.0.1 |
---|
====== SRS - Sender Rewriting Scheme unter CentOS 7.x ====== | ====== SRS - Sender Rewriting Scheme unter CentOS 7.x ====== |
{{:centos:mail_c6:spf-logo-medium.png?nolink |SPF Logo}} | {{:centos:mail_c6:spf-logo-medium.png?nolink |SPF Logo}} |
Im Kapitel [[centos:mail_c7:mta_10|SPF - Sender Policy Framework]] sind wir bereits darauf eingegangen, dass mit unter Probleme bei Mailumleitungen und/oder WebFormularen auftauchen können. Mit **[[http://www.openspf.org/SRS|SRS]]**((**S**ender **R**ewriting **S**cheme)) kann ein Mailserver die eMail-Adresse im Envelop umschreiben und anpassen. | Im Kapitel [[centos:mail_c7:spam_10|SPF - Sender Policy Framework]] sind wir bereits darauf eingegangen, dass mit unter Probleme bei Mailumleitungen und/oder WebFormularen auftauchen können. Mit **[[http://www.openspf.org/SRS|SRS]]**((**S**ender **R**ewriting **S**cheme)) kann ein Mailserver die eMail-Adresse im Envelope umschreiben und anpassen. |
| |
Das nachfolgende Schaubild verdeutlicht, warum bei zu strenger Wahl des SPF-Records der Versand bei einer Weiterleitung (alias) fehlschlägt. Der empfangende Mailserver überprüft die Angaben **HELO** und **MAIL FROM** im **Envelop** der eMail. Hierzu frägt der Mailserver den SPF-Record des sendenden Systems ab und vergleicht die IP-Adresse/Namen des einliefernden Empfängers mit den legitimen Sendern des SMF-Records. Ist der einliefernde Mailserver berechtigt, kann mit der weiteren Annahme und Prüfung fortgefahren werden. Ist der einliefernde Mailserver aber __**nicht**__ berechtigt, quittiert das System den Zustellversuch mit einem Fehler-(code) **550**. | Das nachfolgende Schaubild verdeutlicht, warum bei zu strenger Wahl des SPF-Records der Versand bei einer Weiterleitung (alias) fehlschlägt. Der empfangende Mailserver überprüft die Angaben **HELO** und **MAIL FROM** im **Envelop** der eMail. Hierzu frägt der Mailserver den SPF-Record des sendenden Systems ab und vergleicht die IP-Adresse/Namen des einliefernden Empfängers mit den legitimen Sendern des SMF-Records. Ist der einliefernde Mailserver berechtigt, kann mit der weiteren Annahme und Prüfung fortgefahren werden. Ist der einliefernde Mailserver aber __**nicht**__ berechtigt, quittiert das System den Zustellversuch mit einem Fehler-(code) **550**. |
| |
<uml w=900> | <uml> |
title Mailversand einer eMail bei Weiterleitung (alias)\n | title Mailversand einer eMail bei Weiterleitung (alias)\n |
skin BlueModern | |
participant "\n Mail-Server mx1.example.org \n 88.217.127.21 \n" as links | participant "\n Mail-Server mx1.example.org \n 88.217.127.21 \n" as links |
participant "\n Mail-Server mx01.nausch.org \n 217.91.103.190 \n" as mitte | participant "\n Mail-Server mx01.nausch.org \n 217.91.103.190 \n" as mitte |
</uml> | </uml> |
| |
Da in dem fiktiven Beispiel der Mailserver mx01.nausch.org __**nicht berechtigt**__ ist Nachrichten der Domain example.org zu verschicken, schlägt die Zustellung an das Zielsystemfehl und der Mailserver wird die zuvor angenommene eMail zurück an den Absender bouncen! | Da in dem fiktiven Beispiel der Mailserver mx01.nausch.org __**nicht berechtigt**__ ist Nachrichten der Domain example.org zu verschicken, schlägt die Zustellung an das Zielsystemfehl und der Mailserver wird die zuvor angenommene eMail zurück an den Absender bouncen! |
| |
Damit die Nachricht nun beim eigentlichen Zielsystem ankommt, müssen wir dafür Sorge tragen, dass das relayende System, also unser Mailserver, beim **MAIL FROM** im **Envelope** unsere Domain als Absender setzt. Dann kann das eigentliche Zielsystem, unsere eMail annehmen, da wir für unseren Mailserver einen entsprechend gültigen SPF-Record vorweisen können. Für den Fall, dass die Nachricht aber vom Zielsystem nicht zugestellt werden kann, oder eben von diesem später gebounced werden könnte, müssen wir uns nun die Absender-Adresse des ursprünglichen Mailservers merken. Nur so haben wir die Möglichkeit, den ursprünglichen Absender über den Zustellfehlversuch zu informieren. | Damit die Nachricht nun beim eigentlichen Zielsystem ankommt, müssen wir dafür Sorge tragen, dass das relayende System, also unser Mailserver, beim **MAIL FROM** im **Envelope** unsere Domain als Absender setzt. Dann kann das eigentliche Zielsystem, unsere eMail annehmen, da wir für unseren Mailserver einen entsprechend gültigen SPF-Record vorweisen können. Für den Fall, dass die Nachricht aber vom Zielsystem nicht zugestellt werden kann, oder eben von diesem später gebounced werden könnte, müssen wir uns nun die Absender-Adresse des ursprünglichen Mailservers merken. Nur so haben wir die Möglichkeit, den ursprünglichen Absender über den Zustellfehlversuch zu informieren. |
Und an dieser Stelle setzt nun Sender Rewriting Scheme (kurz **SRS**) an! Wird eine eMail weitergeleitet, so setzt der SRS-Deamon die Envelop-Adresse **MAIL FROM** nach folgendem Schema: //**SRS0+xxxx=yy=example.com=alice@yourdomain.org**//, den wird dann auch als **Return-Path** im Mailheader unserer eMail beim entsprechenden Zielsystem vorfinden. | Und an dieser Stelle setzt nun Sender Rewriting Scheme (kurz **SRS**) an! Wird eine eMail weitergeleitet, so setzt der SRS-Deamon die Envelop-Adresse **MAIL FROM** nach folgendem Schema: //**SRS0+xxxx=yy=example.com=alice@yourdomain.org**//, den wird dann auch als **Return-Path** im Mailheader unserer eMail beim entsprechenden Zielsystem vorfinden. |
Return-Path: <SRS0+bCEv=YT=web.de=honeypot_for_spam@nausch.org> | Return-Path: <SRS0+bCEv=YT=web.de=honeypot_for_spam@nausch.org> |
Sollte die eMail zu uns zurück-bouncen, so kann unser Mailserver mit den Angaben dann, den ursprünglichen Absender, in dem Beispiel also //honeypot_for_spam@web.de// rekonstruieren und den Bounce an den richtigen Absender zurück schicken. Damit nun der //**revers-SRS**// nicht als open-relay-Adresse missbraucht werden kann, werden bei der Envelop-Adresse die beiden Feder **xxx** und **yy** eingesetzt, die zum einen eine kryptografische Signatur und einen Zeitstempel repräsentieren. Sollten bei einem Bounce diese Angaben nicht stimmen, wird die Annahme der Nachricht verweigert, also verworfen. | Sollte die eMail zu uns zurück-bouncen, so kann unser Mailserver mit den Angaben dann, den ursprünglichen Absender, in dem Beispiel also //honeypot_for_spam@web.de// rekonstruieren und den Bounce an den richtigen Absender zurück schicken. Damit nun der //**reverse-SRS**// nicht als open-relay-Adresse missbraucht werden kann, werden bei der Envelope-Adresse die beiden Feder **xxx** und **yy** eingesetzt, die zum einen eine kryptografische Signatur und einen Zeitstempel repräsentieren. Sollten bei einem Bounce diese Angaben nicht stimmen, wird die Annahme der Nachricht verweigert, also verworfen. |
| |
===== Postfix Voraussetzungen ===== | ===== Postfix Voraussetzungen ===== |
TCP_TABLE(5) | TCP_TABLE(5) |
</code> | </code> |
Ob der im Einsatz befindliche Postfix diese Tabellen unterstützt, können wir wie folgt abfragen. | Ob der im Einsatz befindliche Postfix diese //**TCP**//-Lookup-Tabellen unterstützt, können wir wie folgt abfragen. |
# postconf -d | grep mail_version && postconf -m | # postconf -d | grep mail_version && postconf -m |
| |
| |
===== Installation ===== | ===== Installation ===== |
==== repository.mailserver.guru ==== | ==== repository.nausch.org ==== |
Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository **[[centos:mailserver.guru|mailserver.guru]]**. Hier reicht ein einfacher Aufruf von **yum** und alles wird automatisch installiert. | Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository **[[centos:nausch.org|nausch.org]]**. Hier reicht ein einfacher Aufruf von **yum** und alles wird automatisch installiert. |
yum install postsrsd -y | yum install postsrsd -y |
| |
==== localinstall ==== | ==== localinstall ==== |
Will man das **[[http://repo.mailserver.guru/|Repository mailserver.guru]]** __nicht__ einbinden kann man natürlich auch das betreffende Paket lokal installieren. | Will man das **[[http://repo.nausch.org/|Repository nausch.org]]** __nicht__ einbinden kann man natürlich auch das betreffende Paket lokal installieren. |
# yum localinstall http://repo7.mailserver.guru/7/x86_64/postsrsd-1.2-1.el7.centos.x86_64.rpm | # yum localinstall http://repo7.nausch.org/7/x86_64/postsrsd-1.2-1.el7.centos.x86_64.rpm |
| |
Ein Update des Paketes geht entsprechend der Installation. | Ein Update des Paketes geht entsprechend der Installation. |
# yum localupdate http://repo7.mailserver.guru/7/x86_64/postsrsd-1.2-1.el7.centos.x86_64.rpm | # yum localupdate http://repo7.nausch.org/7/x86_64/postsrsd-1.2-1.el7.centos.x86_64.rpm |
| |
===== Paketinhalt ===== | ===== Paketinhalt ===== |
Build Host : vml000200.dmz.nausch.org | Build Host : vml000200.dmz.nausch.org |
Relocations : (not relocatable) | Relocations : (not relocatable) |
Packager : Django <django@mailserver.guru> | Packager : Django <django@nausch.org> |
URL : https://github.com/roehling/postsrsd/archive/1.2.tar.gz | 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. | Summary : PostSRSd provides the Sender Rewriting Scheme (SRS) via TCP-based lookup tables for Postfix. |
# systemctl status postsrsd | # systemctl status postsrsd |
| |
<code>postsrsd.service - PostSRSd Daemon | <html><pre class="code"> |
| <font style="color: rgb(0, 255, 0)"><b>● </b></font>postsrsd.service - PostSRSd Daemon |
Loaded: loaded (/usr/lib/systemd/system/postsrsd.service; enabled) | Loaded: loaded (/usr/lib/systemd/system/postsrsd.service; enabled) |
Active: active (running) since Wed 2014-12-03 14:39:49 CET; 2s ago | Active: <font style="color: rgb(0, 255, 0)"><b>active (running)</b></font>since Wed 2014-12-03 14:39:49 CET; 2s ago |
Main PID: 29588 (postsrsd) | Main PID: 29588 (postsrsd) |
CGroup: /system.slice/postsrsd.service | CGroup: /system.slice/postsrsd.service |
| |
Dec 03 14:39:49 vml000087.dmz.nausch.org systemd[1]: Starting PostSRSd Daemon... | Dec 03 14:39:49 vml000087.dmz.nausch.org systemd[1]: Starting PostSRSd Daemon... |
Dec 03 14:39:49 vml000087.dmz.nausch.org systemd[1]: Started PostSRSd Daemon. | Dec 03 14:39:49 vml000087.dmz.nausch.org systemd[1]: Started PostSRSd Daemon.</font> |
</code> | </pre> |
| </html> |
| |
In der Prozessliste finden wir mindestens einen neuen Prozess, der gestartet wurde. | In der Prozessliste finden wir mindestens einen neuen Prozess, der gestartet wurde. |
nobody 29588 0.0 0.0 6420 740 ? Ss 14:39 0:00 /usr/sbin/postsrsd -f10001 -r10002 -dnausch.org -s/etc/postsrsd.secret -unobody -c/var/lib/postsrsd -Xpgp.guru | nobody 29588 0.0 0.0 6420 740 ? Ss 14:39 0:00 /usr/sbin/postsrsd -f10001 -r10002 -dnausch.org -s/etc/postsrsd.secret -unobody -c/var/lib/postsrsd -Xpgp.guru |
| |
Mittels **netstat** können wir überpfüfen, ob die beiden Ports 10001 und 10002 geöffnet wurden. | Mittels **netstat** können wir überprüfen, ob die beiden Ports 10001 und 10002 geöffnet wurden. |
# netstat -tulpen | grep 1000 | # netstat -tulpen | grep 1000 |
| |
tcp 0 0 127.0.0.1:10002 0.0.0.0:* LISTEN 0 290003 29588/postsrsd | tcp 0 0 127.0.0.1:10002 0.0.0.0:* LISTEN 0 290003 29588/postsrsd |
| |
Läuft unser Daemon kann mit Hilfe von **lsof** sehen wir nicht nur den geöffneten port, sondern auch die Verbindungen die dort anliegen. | Läuft unser Daemon kann mit Hilfe von **lsof** sehen wir nicht nur den geöffneten Port, sondern auch die Verbindungen die dort anliegen. |
# lsof -i :10001 | # lsof -i :10001 |
| |
* **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]** | * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]** |
* **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]** | * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]** |
| |
~~DISCUSSION~~ | |
~~AUTOTWEET:~~ | |
| |
| |
| |
| |
| |
| |
| |