Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision |
tachtler:postfix_centos_7_-_spf_anbinden_spf-milter [2015/10/19 10:29] – [/etc/postfix/master.cf] klaus | tachtler:postfix_centos_7_-_spf_anbinden_spf-milter [2024/02/08 10:01] – [Postfix CentOS 7 - SPF anbinden (spf-milter)] klaus |
---|
====== Postfix CentOS 7 - SPF anbinden (spf-milter) ====== | ====== Postfix CentOS 7 - SPF anbinden (spf-milter) ====== |
| |
Mit Hilfe von [[http://www.openspf.org/|SPF]] kann definiert werden, welche Mailserver für welche Domains e-Mails verschicken darf, oder eben nicht darf. Dies soll das Fälschen von Absender-Angaben erschwert werden. Dabei wird via [[http://www.openspf.org/|SPF]] festgelegt, welcher **MTA** (Mail Transport Agent) z.B. [[http://www.postfix.org|Postfix]] **ausgehend** für den Versandt von e-Mails einer Domain zugelassen ist. | Mit Hilfe von [[http://www.open-spf.org/|SPF]] kann definiert werden, welche Mailserver für welche Domains e-Mails verschicken darf, oder eben nicht darf. Dies soll das Fälschen von Absender-Angaben erschwert werden. Dabei wird via [[http://www.open-spf.org//|SPF]] festgelegt, welcher **MTA** (Mail Transport Agent) z.B. [[http://www.postfix.org|Postfix]] **ausgehend** für den Versandt von e-Mails einer Domain zugelassen ist. |
| |
Mit [[http://www.openspf.org/|SPF]] soll hauptsächlich das fälschen von e-Mail Absender Adressen verhindert werden. | Mit [http://www.open-spf.org/|SPF]] soll hauptsächlich das fälschen von e-Mail Absender Adressen verhindert werden. |
| |
Probleme tauchen mit unter bei Mailumleitungen, Mailinglisten und/oder Webformularen bzw. elektronischen Grusskarten auf. Auch wird bei sehr konservativen SPF-Definition die Möglichkeit verhindert, e-Mails mit der eigenen Absender e-Mail-Adresse über einen dritten Server zu versenden. Es wäre also nur möglich e-Mails über den Mail-Server zu versenden, auf dem auch das Postfach liegt! | Probleme tauchen mit unter bei Mailumleitungen, Mailinglisten und/oder Webformularen bzw. elektronischen Grusskarten auf. Auch wird bei sehr konservativen SPF-Definition die Möglichkeit verhindert, e-Mails mit der eigenen Absender e-Mail-Adresse über einen dritten Server zu versenden. Es wäre also nur möglich e-Mails über den Mail-Server zu versenden, auf dem auch das Postfach liegt! |
| |
Technisch gesehen wird bei [[http://www.openspf.org/|SPF]] ein **TXT-Record** im DNS in der Zonendatei der betreffenden Domain eingetragen. Hier wird definiert, welche SMTP-Server berechtigt sind, Nachrichten für diese Domain zu verschicken. Mailserver können dann bei der Annahme einer e-Mail abfragen, ob der sendende Mailserver überhaupt berechtigt ist, diese Nachricht zuzustellen. | Technisch gesehen wird bei [[http://www.open-spf.org/|SPF]] ein **TXT-Record** im DNS in der Zonendatei der betreffenden Domain eingetragen. Hier wird definiert, welche SMTP-Server berechtigt sind, Nachrichten für diese Domain zu verschicken. Mailserver können dann bei der Annahme einer e-Mail abfragen, ob der sendende Mailserver überhaupt berechtigt ist, diese Nachricht zuzustellen. |
| |
| ^ Beschreibung ^ Externer Link ^ |
| | Homepage | [[http://www.open-spf.org/]] | |
| | Dokumentation | [[http://www.open-spf.org/SPF_Record_Syntax]] | |
| | FAQ | [[http://www.open-spf.org/FAQ]] | |
| |
| 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'': |
| <code> |
| $ su - |
| Password: |
| </code> |
| |
===== Herunterladen ===== | ===== Herunterladen ===== |
==== /etc/mail/smfs/smf-spf.conf ==== | ==== /etc/mail/smfs/smf-spf.conf ==== |
| |
Standardmäßig wird nach der Installation von [[http://www.openspf.org/|SPF]] - **''spf-milter''** in nachfolgendem Verzeichnis mit nachfolgendem Namen die Konfigurationsdatei für den [[http://www.openspf.org/|SPF]] - **''spf-milter''** hinterlegt: | Standardmäßig wird nach der Installation von [[http://www.openspf.org/|SPF]] - **''spf-milter''** in nachfolgendem Verzeichnis mit nachfolgendem Namen die Konfigurationsdatei für den [[http://www.openspf.org/|SPF]] - **''spf-milter''** hinterlegt: |
* **''etc/mail/smfs/smf-spf.conf''** | * **''/etc/mail/smfs/smf-spf.conf''** |
| |
Nachfolgende Änderungen sind an der Konfigurationsdatei ''etc/mail/smfs/smf-spf.conf'' durchzuführen: | Nachfolgende Änderungen sind an der Konfigurationsdatei ''/etc/mail/smfs/smf-spf.conf'' durchzuführen: |
| |
(**Komplette Konfigurationsdatei**) | (**Komplette Konfigurationsdatei**) |
</code> | </code> |
| |
Eine Überprüfung, ob beim Neustart des Server der ''spamassassin''-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben: | Eine Überprüfung, ob beim Neustart des Server der ''smf-spf''-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben: |
<code> | <code> |
# systemctl list-unit-files --type=service | grep -e smf-spf | # systemctl list-unit-files --type=service | grep -e smf-spf |
<code ini> | <code ini> |
... | ... |
# AMaViS (amavisd-milter) | # SPF (spf-milter) |
spf_milter = inet:192.168.0.70:10011 | spf_milter = inet:192.168.0.70:10011 |
... | ... |
| |
<code ini> | <code ini> |
# ========================================================================== | |
# service type private unpriv chroot wakeup maxproc command + args | |
# (yes) (yes) (yes) (never) (100) | |
# ========================================================================== | |
... | |
... | |
... | |
# Tachtler - enabled - | |
# Outgoing FROM Postfix TO AMaViS | |
smtpd pass - - n - - smtpd | |
-o smtpd_milters=${spf_milter},${amavisd_milter} | |
# Tachtler - new - | |
# Incoming FROM AMaViS TO Postfix | |
192.168.0.60:10025 inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter= | |
-o smtpd_milters= | |
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 | |
-o smtpd_client_restrictions= | |
-o smtpd_helo_restrictions= | |
-o smtpd_sender_restrictions= | |
-o smtpd_relay_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,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 | |
-o receive_override_options=no_unknown_recipient_checks | |
... | |
... | |
... | |
# | # |
# Postfix master process configuration file. For details on the format | # Postfix master process configuration file. For details on the format |
# Incoming traffic passed from untrust networks, with postscreen. | # Incoming traffic passed from untrust networks, with postscreen. |
smtpd pass - - n - - smtpd | smtpd pass - - n - - smtpd |
-o smtpd_milters=${spf_milter},${amavisd_milter} | -o smtpd_milters=${spf_milter} |
# Tachtler - new - | |
# Outgoing traffic from trusted networks, with amavisd-new (altermime). | |
192.168.1.60:smtp inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter=10.7.0.70:10024 | |
-o smtpd_client_connection_count_limit=4 | |
-o smtpd_proxy_options=speed_adjust | |
192.168.0.60:smtp inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter=10.7.0.70:10024 | |
-o smtpd_client_connection_count_limit=4 | |
-o smtpd_proxy_options=speed_adjust | |
127.0.0.1:smtp inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter=10.7.0.70:10024 | |
-o smtpd_client_connection_count_limit=4 | |
-o smtpd_proxy_options=speed_adjust | |
# Tachtler - new - | |
# Outgoing traffic, BACK from amavisd-new from smtpd_proxy_filter. | |
192.168.0.60:10025 inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter= | |
-o smtpd_milters= | |
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 | |
-o smtpd_client_restrictions= | |
-o smtpd_helo_restrictions= | |
-o smtpd_sender_restrictions= | |
-o smtpd_relay_restrictions= | |
-o smtpd_recipient_restrictions=permit_mynetworks,reject | |
-o smtpd_data_restrictions= | |
-o mynetworks=0.0.0.0/32,127.0.0.0/8,10.7.0.0/24,10.7.1.0/24,192.168.0.0/25,88.217.171.167/32 | |
-o receive_override_options=no_unknown_recipient_checks | |
# Tachtler - new - | |
# Outgoing traffic, BACK from amavisd-new from content_filter. | |
192.168.0.60:10027 inet n - n - - smtpd | |
-o content_filter= | |
-o smtpd_proxy_filter= | |
-o smtpd_milters= | |
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32 | |
-o smtpd_delay_reject=no | |
-o smtpd_client_restrictions= | |
-o smtpd_helo_restrictions= | |
-o smtpd_sender_restrictions= | |
-o smtpd_relay_restrictions= | |
-o smtpd_recipient_restrictions=permit_mynetworks,reject | |
-o smtpd_data_restrictions=reject_unauth_pipelining | |
-o smtpd_end_of_data_restrictions= | |
-o smtpd_restriction_classes= | |
-o mynetworks=0.0.0.0/32,127.0.0.0/8,10.7.0.0/24,10.7.1.0/24,192.168.0.0/25,88.217.171.167/32 | |
-o smtpd_error_sleep_time=0 | |
-o smtpd_soft_error_limit=1001 | |
-o smtpd_hard_error_limit=1000 | |
-o smtpd_client_connection_count_limit=0 | |
-o smtpd_client_connection_rate_limit=0 | |
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters | |
-o local_header_rewrite_clients= | |
... | ... |
</code> | </code> |
| |
**__Nachfolgend Erklärungen zu den einzelnen Konfigurationen:__** | **__Nachfolgend Erklärungen zu den WICHTIGSTEN Konfigurationen:__** |
| |
* <code ini> -o smtpd_milters=${spf_milter},${amavisd_milter}</code> | * <code ini> -o smtpd_milters=${spf_milter}</code> |
| |
Die Option sorgt dafür, dass dem Parameter ''smtpd_milter'' der Inhalt des Parameters ''spf_milter'' und des Parameters ''amavisd_milter'' übergeben wird. **Falls mehrere MILTER zum Einsatz kommen, wird hier die __Reihenfolge__ festgelegt, in der diese aufgerufen werden!** | Die Option sorgt dafür, dass dem Parameter ''smtpd_milter'' der Inhalt des Parameters ''spf_milter'' übergeben wird. **Falls mehrere MILTER zum Einsatz kommen, wird hier die __Reihenfolge__ festgelegt, in der diese aufgerufen werden!** |
| |
* <code ini>192.168.0.60:10025 inet n - n - - smtpd</code> | |
| |
Festlegung auf welcher **IP-Adresse** und welchem **Port** ein weiterer ''smtpd''-Dienst/Daemon des [[http://www.postfix.org|Postfix]] läuft, um e-Mails entgegenzunehmen, welche von [[http://www.ijs.si/software/amavisd/|AMaViS]] bereits überprüft wurden. **Dies ist erforderlich, dass keine __e-Mail-Schleife__ entsteht und bei der Einlieferung nicht noch einmal alle Überprüfungen der e-Mail durchgeführt werden!** | |
| |
* <code ini> -o content_filter= | |
-o smtpd_proxy_filter= | |
-o smtpd_milters=</code> | |
| |
Deaktivieren der Weitergabe der auf diesem Weg eingelieferten e-Mails an weitere Filter/Milter. | |
| |
* <code ini> -o smtpd_authorized_xforward_hosts=127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32</code> | |
| |
Angabe von Clients, welche die ''XFORWARD'' Funktion nützen dürfen. Siehe auch: | |
| |
^ Information ^ Beschreibung ^ | |
| Dokumentation | [[http://www.postfix.org/XFORWARD_README.html]] \\ [[http://www.postfix.org/postconf.5.html#smtpd_authorized_xforward_hosts]] | | |
| |
* <code ini> -o smtpd_client_restrictions= | |
-o smtpd_helo_restrictions= | |
-o smtpd_sender_restrictions= | |
-o smtpd_relay_restrictions= | |
-o smtpd_recipient_restrictions=permit_mynetworks,reject | |
-o smtpd_data_restrictions=</code> | |
* <code ini> -o smtpd_data_restrictions=reject_unauth_pipelining</code> | |
| |
Setzen der einzelnen Restrictions auf leeren Inhalt, somit finden keinerlei Prüfungen bei der Wiedereinlieferung nach [[http://www.postfix.org|Postfix]] statt. **Eine bzw. zwei Ausnahmen von diesen Regelungen bestehen bei den ''smtpd_recipient_restrictions=permit_mynetworks,reject'', was sicherstellt, dass nur Clients aus ''mynetworks'' auf [[http://www.postfix.org|Postfix]] Wiedereinliefern dürfen und bei ''smtpd_data_restrictions=reject_unauth_pipelining'' das ''PIPELINING'' deaktiviert ist!** | |
| |
* <code ini> -o mynetworks=0.0.0.0/32,127.0.0.0/8,192.168.0.0/24,192.168.1.0/24,192.168.2.0/24,88.217.171.167/32</code> | |
| |
Definition von ''mynetworks'', kann für die Wiedereinlieferung nach [[http://www.postfix.org|Postfix]] von den sonstigen Definitionen für ''mynetworks'' abweichen. | |
| |
* <code ini> -o receive_override_options=no_unknown_recipient_checks</code> | |
* <code ini> -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters</code> | |
| |
Keine Überprüfung von Empfängern, dies sollte bei der Wiedereinlieferung nach [[http://www.postfix.org|Postfix]] durch [[http://www.ijs.si/software/amavisd/|AMaViS]] gesetzt sein, um keine unnötige Überprüfungen durchzuführen, da dies ggf. dann auch fehlschlagen könnte. | |
| |
* <code ini> -o content_filter=lmtp:[192.168.0.70]:10024</code> | |
| |
Dies **__kann__** für die Einlieferung von e-Mails, welche **lokal** auf dem Server mit [[http://www.postfix.org|Postfix]] erzeugt werden, z.B. via ''/etc/cron.daily'' Skripten genutzt werden. In diesem Fall werden die e-Mail via ''pickup'' bei [[http://www.postfix.org|Postfix]] eingeliefert und können so auch an [[http://www.ijs.si/software/amavisd/|AMaViS]], **jedoch __nicht__ via MILTER** eingeliefert werden. | |
| |
:!: **WICHTIG** - Falls dies zum Einsatz kommt, **__muss__** im [[http://www.ijs.si/software/amavisd/|AMaViS]] in der Konfigurationsdatei ''/etc/amavisd/amavisd.conf'' der Parameter <code ini>$forward_method = 'smtp:[192.168.0.60]:10025';</code> gesetzt werden, da sonst bei der Weitergabe der e-Mail nach [[http://www.ijs.si/software/amavisd/|AMaViS]] über die Methode "Post-Queue" - ''content_filter'' der Rückweg zu [[http://www.postfix.org|Postfix]] nicht mehr funktionieren würde, was bei einer reinen Einlieferung via **MILTER** nicht erforderlich wäre. Nachfolgende Fehlermeldungen würden erscheinen: | |
<code> | |
Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!!)TROUBLE in process_request: NOT ALL RECIPIENTS DONE, | |
EMPTY DELIVERY_METHOD! at (eval 93) line 1184. | |
Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!)Requesting process rundown after fatal error | |
Oct 15 09:50:15 server70 amavis[3639]: (03639-01) (!)TempDir removal: tempdir is to be PRESERVED: | |
/var/spool/amavisd/tmp/amavis-20151015T095010-03239-XVCbqPsd | |
</code> | |
und die Zustellung wäre nicht erfolgreich, was auch in der LOG-Datei von [[http://www.postfix.org|Postfix]] mit einem **temporären Fehler** zu sehen wäre, wie nachfolgender LOG-Datei-Ausschnitt zeigt: | |
<code> | |
... | |
Oct 15 09:39:16 server60 postfix/lmtp[31788]: 905B4180008F: to=<klaus@tachtler.net>, orig_to=<root>, | |
relay=192.168.0.70[192.168.0.70]:10024, delay=22626, delays=22 | |
620/0.04/0.01/5.6, dsn=4.3.2, status=deferred (host 192.168.0.70[192.168.0.70] said: 421 4.3.2 Service | |
shutting down, closing channel (in reply to end of DATA command)) | |
... | |
</code> | |
| |
===== Neustart ===== | ===== Neustart ===== |
Hint: Some lines were ellipsized, use -l to show in full. | Hint: Some lines were ellipsized, use -l to show in full. |
</code> | </code> |
| |
| ===== Test ===== |
| |
| Nachfolgend soll ein Test darin bestehen, dass eine e-Mail von einem externen Server an [[http://www.postfix.com|Postfix]] gesendet wird, und dieser dann den SPF-Record des absendenden e-Mail-Servers prüft. |
| |
| Wichtig sind zwei **Einträge**, in |
| * den **Header-Zeilen** der **eingehenden e-Mail** |
| * die **LOG-Einträge** im Server, auf dem [[http://www.openspf.org/|SPF]] - **''spf-milter''** läuft: |
| |
| ==== Überprüfung: Header-Zeilen ==== |
| |
| Nachfolgender Eintrag sollte in den **Header-Zeilen** einer **eingehenden e-Mail** zu finden sein, um das Ergebnis der [[http://www.openspf.org/|SPF]] - **''spf-milter''** Überprüfung zu zeigen: |
| <code> |
| Authentication-Results: mx1.tachtler.net; spf=pass smtp.mailfrom=<michael@nausch.org> smtp.helo=mx01.nausch.org |
| </code> |
| * //Das Ergbenis kann hier ''pass'', ''fail'' und ''none'' sein.// |
| |
| ==== Überprüfung: /var/log/maillog ==== |
| |
| Nachfolgender Eintrag sollte in den **LOG-Einträgen** des Servers auf dem der [[http://www.openspf.org/|SPF]] - **''spf-milter''** läuft bei einer **eingehenden e-Mail** zu finden sein, um das Ergebnis der [[http://www.openspf.org/|SPF]] - **''spf-milter''** Überprüfung zu dokumentieren: |
| <code> |
| Oct 19 06:56:56 server70 smf-spf[2157]: SPF pass: ip=217.91.103.190, fqdn=mx01.nausch.org, helo=mx01.nausch.org, from=<michael@nausch.org> |
| </code> |
| * //Das Ergbenis kann hier ''pass'', ''fail'' und ''none'' sein.// |
| |
| ===== Test Werkzeuge ===== |
| |
| Nachfolgende externe Links führen zu verschiedenen Test Werkzeugen: |
| * **[[http://www.openspf.org/|SPF]]** - [[https://dmarcian.com/spf-survey/|dmarcian - SPF Surveyor]] |
| * **[[http://www.opendkim.org/|OpenDKIM]]** - [[http://protodave.com/tools/dkim-key-checker/|protodave - DKIM Key Checker]] |
| * **[[http://www.trusteddomain.org/opendmarc/|OpenDMARC]]** - [[https://dmarcian.com/dmarc-inspector/|dmarcian - DMARC Inspector]] |
| |