Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
tachtler:postfix_centos_7_-_spf_anbinden_spf-milter [2015/10/19 10:40] – [/etc/postfix/master.cf] klaus | tachtler:postfix_centos_7_-_spf_anbinden_spf-milter [2024/02/08 10:03] (aktuell) – 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 ===== |
===== iptables Regel ====== | ===== iptables Regel ====== |
| |
Damit der [[http://www.openspf.org/|SPF]] auch über den [[http://www.postfix.org|Postfix]] - **''spf-milter''** erreichbar ist und nicht das Empfangen der IP-Paket vom Paketfilter ''iptables'' blockiert wird, muss nachfolgende Regel zum ''iptables''-Regelwerk hinzugefügt werden. | Damit der [[http://www.open-spf.org/|SPF]] auch über den [[http://www.postfix.org|Postfix]] - **''spf-milter''** erreichbar ist und nicht das Empfangen der IP-Paket vom Paketfilter ''iptables'' blockiert wird, muss nachfolgende Regel zum ''iptables''-Regelwerk hinzugefügt werden. |
| |
Um die aktuellen ''iptables''-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann: | Um die aktuellen ''iptables''-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann: |
==== /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.open-spf.org/|SPF]] - **''spf-milter''** in nachfolgendem Verzeichnis mit nachfolgendem Namen die Konfigurationsdatei für den [[http://www.open-spf.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 bash>Socket inet:10011@192.168.0.70</code> | * <code bash>Socket inet:10011@192.168.0.70</code> |
| |
Socket über den mit dem [[http://www.openspf.org/|SPF]] - **''spf-milter''** über die **IP-Adresse: ''192.168.0.70''** und den **Port: ''10011''** kommuniziert werden kann. | Socket über den mit dem [[http://www.open-spf.org/|SPF]] - **''spf-milter''** über die **IP-Adresse: ''192.168.0.70''** und den **Port: ''10011''** kommuniziert werden kann. |
| |
==== SPF Dienst/Daemon-Start einrichten ==== | ==== SPF Dienst/Daemon-Start einrichten ==== |
| |
Um den [[http://www.openspf.org/|SPF]] 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: | Um den [[http://www.open-spf.org/|SPF]] 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: |
<code> | <code> |
# systemctl enable smf-spf | # systemctl enable smf-spf |
</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 |
==== Erster Start SPF ==== | ==== Erster Start SPF ==== |
| |
Um den [[http://www.openspf.org/|SPF]] zu starten kann nachfolgender Befehl angewandt werden: | Um den [[http://www.open-spf.org/|SPF]] zu starten kann nachfolgender Befehl angewandt werden: |
<code> | <code> |
# systemctl start smf-spf | # systemctl start smf-spf |
</code> | </code> |
| |
Eine Überprüfung ob der Start des [[http://www.openspf.org/|SPF]] erfolgreich war kann mit nachfolgendem Befehl durchgeführt werden, welcher eine Ausgabe in etwa wie nachfolgende erzeugen sollte: | Eine Überprüfung ob der Start des [[http://www.open-spf.org/|SPF]] erfolgreich war kann mit nachfolgendem Befehl durchgeführt werden, welcher eine Ausgabe in etwa wie nachfolgende erzeugen sollte: |
<code> | <code> |
# systemctl status smf-spf | # systemctl status smf-spf |
* **''/etc/postfix/main.cf''** | * **''/etc/postfix/main.cf''** |
* **''/etc/postfix/master.cf''** | * **''/etc/postfix/master.cf''** |
durchgeführt, um eine Anbindung des [[http://www.postfix.org|Postfix]] an den [[http://www.openspf.org/|SPF]] zu realisieren. | durchgeführt, um eine Anbindung des [[http://www.postfix.org|Postfix]] an den [[http://www.open-spf.org/|SPF]] zu realisieren. |
| |
Dabei soll die Anbindung von [[http://www.postfix.org|Postfix]] an den [[http://www.openspf.org/|SPF]] mit dem Verfahren | Dabei soll die Anbindung von [[http://www.postfix.org|Postfix]] an den [[http://www.open-spf.org/|SPF]] mit dem Verfahren |
* **''spf-milter''** erfolgen. | * **''spf-milter''** erfolgen. |
| |
<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 |
... | ... |
# 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=192.168.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=192.168.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=192.168.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= | |
... | |
... | |
... | |
# Tachtler - enabled - | |
submission inet n - n - - smtpd | |
-o syslog_name=postfix/submission | |
-o content_filter=lmtp:[192.168.0.70]:10026 | |
-o smtpd_tls_security_level=encrypt | |
-o smtpd_sasl_auth_enable=yes | |
-o smtpd_reject_unlisted_recipient=no | |
# -o smtpd_client_restrictions=$mua_client_restrictions | |
# -o smtpd_helo_restrictions=$mua_helo_restrictions | |
# -o smtpd_sender_restrictions=$mua_sender_restrictions | |
-o smtpd_recipient_restrictions= | |
-o smtpd_relay_restrictions=permit_sasl_authenticated,reject | |
-o milter_macro_daemon_name=ORIGINATING | |
... | |
... | |
... | |
pickup unix n - n 60 1 pickup | |
-o content_filter=lmtp:[192.168.0.70]:10024 | |
... | ... |
</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> | |
* <code ini> -o content_filter=lmtp:[192.168.0.70]:10026</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> bzw. <code ini>$forward_method = 'smtp:[192.168.0.60]:10027';</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.open-spf.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.open-spf.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.open-spf.org/|SPF]] - **''spf-milter''** läuft bei einer **eingehenden e-Mail** zu finden sein, um das Ergebnis der [[http://www.open-spf.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.open-spf.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]] |
| |