Mit Hilfe von SPF1) kann definiert werden, welche Mailserver für welche Domains eMails verschickt werden (können), oder nicht, oder anders ausgedrückt, soll das Fälschen von Absender-Angaben mit Hilfe von SPF erschwert werden. Genauer gesagt schreibt das SPF fest, welcher MTA2) abgehend für den Versandt von e-Mails einer Domain zugelassen ist. Wichtige Hinweise zu SPF findet man bei Bedarf in der überarbeiteten Version RFC 7208 oder auch auf der Webseite von openspf.org.
Dieses here Ziel wirft bei genauerer Betrachtung viele Fragen auf und erzeugt bei manchen Mailserver-Betreibern nicht gerade viel Begeisterungsstürme. Probleme tauchen mit unter bei Mailumleitungen, Mailinglisten und/oder WebFormularen auf. Auch wird bei sehr konservativen SPF-Definition die Möglichkeit verhindert, eMails mit eigener Absender-eMail-Adresse über einen dritten Rechner zu versenden. Es wäre also nur möglich eMails auch über den Mail-Server zu versenden, auf dem auch das Postfach liegt! Speziell auch Beim Versand über ein z.B. WebFormular, oder eine Web-Grusskarte über einen Drittanbieter wäre dann kein Versand mehr möglich!
Beim SPF wird ein TXT-Record in der Zonendatei im DNS der betreffenden (Mail)Domain eingetragen. Dort wird definiert, welche SMTP-Server berechtigt sind, Nachrichten der (Mail)Domain zu verschicken. Mailserver können dann bei der Annahme der eMails abfragen, ob der sendende Mailserver überhaupt berechtigt ist, diese Nachricht zu verschicken. So soll bzw. kann mit Hilfe von SPF versucht werden, Absenderadressfälschungen - eine Form des eMail-Identitätsbetrugs - zu verhindern. SPAM kann aber mit Hilfe des Sender Policy Framework nicht direkt bekämpft werden!
Nachfolgende Skizze zeigt exemplarisch auf, wo genau SPF beim Verarbeiten einer eMail beim Kommunikationsaufbau und -ablauf zweier MTA3) das SPF zum Tragen kommt. Sobald eine eMail von einem Mailserver empfangen wird, benutzt dieses das SPF um festzustellen, ob das sendende System (MTA) dazu berechtigt ist. Besteht der Absender die SPF-Prüfung nicht, wird die Annahme der Nachricht je nach Konfiguration abgelehnt, zugestellt und|oder ggf. als Spam bzw. Betrug gekennzeichnet.
eMail<rect fill="#000000" fill-opacity="0.00000" height="605.4531" width="8" x="197.3188" y="138.7813"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="201" x2="201" y1="138.7813" y2="744.2344"/></g><g><title/><rect fill="#000000" fill-opacity="0.00000" height="605.4531" width="8" x="550.667" y="138.7813"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="554.0444" x2="554.0444" y1="138.7813" y2="744.2344"/></g><g><title/><rect fill="#000000" fill-opacity="0.00000" height="605.4531" width="8" x="1019.0918" y="138.7813"/><line style="stroke:#181818;stroke-width:0.5;stroke-dasharray:5.0,5.0;" x1="1022.4785" x2="1022.4785" y1="138.7813" y2="744.2344"/></g><g class="participant participant-head" data-participant="links"><rect fill="#E2E2F0" height="79.1875" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="286.6377" x="58" y="58.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="199.0938" y="78.5889"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="205.8848" x="96.1514" y="94.8857">Mail-Server mx01.nausch.org</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="111.3301" x="150.104" y="111.1826">217.91.103.190</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="199.0938" y="127.4795"> </text></g><g class="participant participant-tail" data-participant="links"><rect fill="#E2E2F0" height="79.1875" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="286.6377" x="58" y="743.2344"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="199.0938" y="763.2295"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="205.8848" x="96.1514" y="779.5264">Mail-Server mx01.nausch.org</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="111.3301" x="150.104" y="795.8232">217.91.103.190</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="199.0938" y="812.1201"> </text></g><g class="participant participant-head" data-participant="mitte"><rect fill="#E2E2F0" height="79.1875" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="277.2451" x="416.0444" y="58.5938"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="552.4419" y="78.5889"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="200.9424" x="454.1958" y="94.8857">Mail-Server mx1.tachtler.net</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="111.3301" x="503.4521" y="111.1826">88.217.171.167</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="552.4419" y="127.4795"> </text></g><g class="participant participant-tail" data-participant="mitte"><rect fill="#E2E2F0" height="79.1875" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="277.2451" x="416.0444" y="743.2344"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="552.4419" y="763.2295"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="200.9424" x="454.1958" y="779.5264">Mail-Server mx1.tachtler.net</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="111.3301" x="503.4521" y="795.8232">88.217.171.167</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="552.4419" y="812.1201"> </text></g><g class="participant participant-head" data-participant="rechts"><rect fill="#E2E2F0" height="62.8906" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="283.2266" x="881.4785" y="74.8906"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="1020.8667" y="94.8857"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="193.5732" x="928.5303" y="111.1826">DNS-Server von nausch.org</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="1020.8667" y="127.4795"> </text></g><g class="participant participant-tail" data-participant="rechts"><rect fill="#E2E2F0" height="62.8906" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="283.2266" x="881.4785" y="743.2344"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="1020.8667" y="763.2295"> </text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="193.5732" x="928.5303" y="779.5264">DNS-Server von nausch.org</text><text fill="#000000" font-family="sans-serif" font-size="14" lengthadjust="spacing" textlength="4.4502" x="1020.8667" y="795.8232"> </text></g><g class="message" data-participant-1="links" data-participant-2="mitte"><polygon fill="#181818" points="542.667,199.1797,552.667,203.1797,542.667,207.1797,546.667,203.1797" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="201.3188" x2="548.667" y1="203.1797" y2="203.1797"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="329.3481" x="208.3188" y="198.1138">connect von mx01.nausch.org zu mx1.tachtler.net</text></g><path d="M39,153.7813 L39,238.7813 L195,238.7813 L195,163.7813 L185,153.7813 L39,153.7813" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M185,153.7813 L185,163.7813 L195,163.7813 L185,153.7813" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="45" y="170.8481"> </text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="127.334" x="49.1323" y="185.981">Verbindungsaufbau</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="102.686" x="49.1323" y="201.1138">vom Quell- zum</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="65.2793" x="49.1323" y="216.2466">Zielserver</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="45" y="231.3794"> </text><g class="message" data-participant-1="mitte" data-participant-2="links"><polygon fill="#181818" points="212.3188,261.5781,202.3188,265.5781,212.3188,269.5781,208.3188,265.5781" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="206.3188" x2="553.667" y1="265.5781" y2="265.5781"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="294.9312" x="218.3188" y="260.5122">. 220 mx1.tachtler.net ESMTP Postfix</text></g><g class="message" data-participant-1="links" data-participant-2="mitte"><polygon fill="#181818" points="542.667,290.7109,552.667,294.7109,542.667,298.7109,546.667,294.7109" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="201.3188" x2="548.667" y1="294.7109" y2="294.7109"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="152.915" x="208.3188" y="289.645">HELO mx01.nausch.org</text></g><g class="message" data-participant-1="mitte" data-participant-2="links"><polygon fill="#181818" points="212.3188,319.8438,202.3188,323.8438,212.3188,327.8438,208.3188,323.8438" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="206.3188" x2="553.667" y1="323.8438" y2="323.8438"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="199.6592" x="218.3188" y="318.7778">. 250 mx1.tachtler.net</text></g><g class="message" data-participant-1="links" data-participant-2="mitte"><polygon fill="#181818" points="542.667,348.9766,552.667,352.9766,542.667,356.9766,546.667,352.9766" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="201.3188" x2="548.667" y1="352.9766" y2="352.9766"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="229.0044" x="208.3188" y="347.9106">MAIL FROM:<django@nausch.org></text></g><g class="message" data-participant-1="mitte" data-participant-2="rechts"><polygon fill="#181818" points="1011.0918,403.8086,1021.0918,407.8086,1011.0918,411.8086,1015.0918,407.8086" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="554.667" x2="1017.0918" y1="407.8086" y2="407.8086"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="147.3228" x="561.667" y="402.7427">host -t TXT nausch.org</text></g><path d="M1028,365.9766 L1028,435.9766 L1138,435.9766 L1138,375.9766 L1128,365.9766 L1028,365.9766" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M1128,365.9766 L1128,375.9766 L1138,375.9766 L1128,365.9766" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="1034" y="383.0435"> </text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="77.0098" x="1038.1323" y="398.1763">Abfrage der</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="80.7612" x="1038.1323" y="413.3091">SPF-Records</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="1034" y="428.4419"> </text><g class="message" data-participant-1="rechts" data-participant-2="mitte"><polygon fill="#181818" points="565.667,499.4727,555.667,503.4727,565.667,507.4727,561.667,503.4727" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;" x1="559.667" x2="1022.0918" y1="503.4727" y2="503.4727"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="444.4248" x="571.667" y="498.4067">nausch.org descriptive text "v=spf1 ip4:217.91.103.190/32 mx ?all"</text></g><path d="M310,446.5078 L310,546.5078 L549,546.5078 L549,456.5078 L539,446.5078 L310,446.5078" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M539,446.5078 L539,456.5078 L549,456.5078 L539,446.5078" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="316" y="463.5747"> </text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="146.2754" x="320.1323" y="478.7075">Der Mailserver mit der</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="209.9678" x="320.1323" y="493.8403">IP 217.91.103.190 ist berechtigt</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="152.5786" x="320.1323" y="508.9731"><span class="search_hit">eMail</span>s der Mail-Domain</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="164.1504" x="320.1323" y="524.106">nausch.org zu versenden</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="316" y="539.2388"> </text><g class="message" data-participant-1="mitte" data-participant-2="links"><polygon fill="#181818" points="212.3188,569.4375,202.3188,573.4375,212.3188,577.4375,208.3188,573.4375" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="206.3188" x2="553.667" y1="573.4375" y2="573.4375"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="145.9009" x="218.3188" y="568.3716">. 250 2.1.0 Ok</text></g><g class="message" data-participant-1="links" data-participant-2="mitte"><polygon fill="#181818" points="542.667,598.5703,552.667,602.5703,542.667,606.5703,546.667,602.5703" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="201.3188" x2="548.667" y1="602.5703" y2="602.5703"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="205.4482" x="208.3188" y="597.5044">RCPT TO:<klaus@tachtler.net></text></g><g class="message" data-participant-1="mitte" data-participant-2="links"><polygon fill="#181818" points="212.3188,627.7031,202.3188,631.7031,212.3188,635.7031,208.3188,631.7031" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="206.3188" x2="553.667" y1="631.7031" y2="631.7031"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="145.9009" x="218.3188" y="626.6372">. 250 2.1.0 Ok</text></g><g class="message" data-participant-1="links" data-participant-2="mitte"><polygon fill="#181818" points="542.667,656.8359,552.667,660.8359,542.667,664.8359,546.667,660.8359" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="201.3188" x2="548.667" y1="660.8359" y2="660.8359"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="178.2993" x="208.3188" y="655.77">Übermittlung der Nachricht</text></g><g class="message" data-participant-1="mitte" data-participant-2="links"><polygon fill="#181818" points="212.3188,704.1016,202.3188,708.1016,212.3188,712.1016,208.3188,708.1016" style="stroke:#181818;stroke-width:1;"/><line style="stroke:#181818;stroke-width:1;stroke-dasharray:2.0,2.0;" x1="206.3188" x2="553.667" y1="708.1016" y2="708.1016"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="222.3076" x="218.3188" y="703.0356">250 2.0.0 Ok: queued as 5950581</text></g><path d="M5,673.8359 L5,728.8359 L197,728.8359 L197,683.8359 L187,673.8359 L5,673.8359" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M187,673.8359 L187,683.8359 L197,683.8359 L187,673.8359" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="11" y="690.9028"> </text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="162.8237" x="15.1323" y="706.0356">Beenden der Verbindung</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthadjust="spacing" textlength="4.1323" x="11" y="721.1685"> </text><!--SRC=[fLFRZjem47tFLunuZvjaIu68qjsMNNMbPQ60gghQ5vCCmSKur7OGwhVqR_fZ7ISibq0bfFhDzimvPyxCM64bme0BkK5jk4e1XK8Dw9vUbEUjkROY4MkkB3HU55J7_VeJr9G4gsqGCiKBaonOhhDT1EnZ0QAmnJeX2uCR5dQ2_Ny3k04frD9SnH8oovC5oTLCeJrdQRUP8mfRnFIkTSgo4jRYFrW0-i-JLvfDhk1IBIMAHk8tdbTg1hzNmGB4aEHAOMBBzBeVluepyPxAAK_Yt58k2VcAUYPKMgZCy68-uuLxtEGh-5AWb3v1hDpBTu7IL3gfDPMAhk_lPCJ0uEH4KN1ks_raC1t1A3TsBhQlbUnBYU7p_TEmNi8LLCrpgWlWWxl79tWO3mTnD_t1LPRV7aXwdbU5KNnbD2KiI2Vu5gRVfaTjgUpJ8bli_BkRpJNF459onjqdemT_Z4ckK-ESgd2x_W7tg3qfcaIBjHKR18jRcepDUxEUXo3MR-FJoNrp4r6Ly85BsQYti4_KRbvt_I7AlPh7KNq315KrmrADoAoBAVVDb2dbrFVp5HVA_PnEajjIL2cgwoQ0sXAna0KmN7eN-Z7-D9h2T1Xtbv9ORe-xr_j_z3-_gKPtaJJOPMdFHA05aLm0hz224Ys6dmKMcBgbQtQQGRCTrlt-Y9KD3lQmFlJp5m00]--></g></svg></div>
</p>
<p>
Weitere Informationen rund um SPF findet man im übrigen auf der <a href="http://de.wikipedia.org/wiki/Sender_Policy_Framework" class="urlextern" target="_tab" title="http://de.wikipedia.org/wiki/Sender_Policy_Framework" rel="ugc nofollow noopener">Wikipedia Seite</a> oder im besagten <strong><a href="https://www.rfc-editor.org/rfc/rfc7208.html" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208.html" rel="ugc nofollow noopener">RFC 7208</a></strong>.
</p>
</div>
<h2 class="sectionedit2 page-header pb-3 mb-4 mt-5" id="definition_unseres_spf-records">Definition unseres SPF-Records</h2>
<div class="level2">
<p>
Aus den eingangs genannten Gründen sollte eine Sender Policy Framework Definition so gewählt werden, das auch weiterhin Nachrichten umgeleitet, Mailinglisten oder bei Bedarf Webformulare genutzt werden können.
</p>
</div>
<h3 class="sectionedit3 page-header pb-3 mb-4 mt-5" id="format_der_spf-richtlinie">Format der SPF-Richtlinie</h3>
<div class="level3">
<p>
Ein SPF-Record beinhaltet mehrere durch Leerzeichen getrennte Angaben, die jeweils der Reihe nach von links nach rechts ausgewertet werden. Eine solche Angabe kann ein Modifikator wie z.B. <strong><code>v</code></strong> oder <strong><code>redirect</code></strong>, ein Typ wie <strong><code>a</code></strong> bzw. <strong><code>mx</code></strong> oder auch eine Include-Anweisung <strong><code>include</code></strong> sein. Der erste Wert gibt an, welche SPF-Version genutzt wird, aktuell SPF-Version „<strong>v=spf1</strong>“. Anschliessend können mehrere IPv4- und/oder IPv6-Adressen, auf den MX-Record verweisen werden oder auch weitere SPF-Definitionen inkludiert werden, die entweder berechtigt oder vom Mailversand ausgeschlossen sein sollen. Diese Berechtigung wird dabei über einen <em><strong>Qualifier</strong></em> definiert.
</p>
<p>
Jede SPF-Definition im Zonenfile unseres <abbr title="Domain Name System">DNS</abbr> beginnt mit der sogenannten Versions-Section und wird auf die derzeit aktuelle SPF-Version <strong><code>v=spf1</code></strong> gesetzt.
</p>
</div>
<h4 class="sectionedit4" id="praefix">Präfix</h4>
<div class="level4">
<p>
Das Präfix bestimmt das SPF-Validierungsergebnis, welches der Empfänger auf die Nachricht anwenden soll, sofern der Absender mit der Angabe/Begriff übereinstimmt. Es stehen folgende Werte zur Verfügung:
</p>
<ul class=" fix-media-list-overlap">
<li class="level1"><div class="li"> <strong><code>+</code></strong> : <strong>positiv</strong> Die nachfolgende IP-Adresse ist als legitimer Sender definiert. Wird jeweils <em class="u">kein</em> Qualifer angegeben, wird automatisch der Wert <strong>+</strong> herangezogen (Defaulteinstellung).</div>
</li>
<li class="level1"><div class="li"> <strong><code>-</code></strong> : <strong>negativ</strong> Die nachfolgende IP-Adresse definiert ein nicht autorisiertes Sendesystem. Die Direktive Fail definiert nicht autorisierte Sender.</div>
</li>
<li class="level1"><div class="li"> <strong><code>?</code></strong> : <strong>neutral</strong> Über die Rechtmässigkeit des Sendesystems kann nichts ausgesagt werden; Der Sender muss daher akzeptiert werden.</div>
</li>
<li class="level1"><div class="li"> <strong><code>~</code></strong> : <strong>soft-fail</strong> Die nachfolgende IP-Adresse definiert ein nicht autorisiertes Sendesystem. Das Empfangssystem soll jedoch die Annahme der Nachricht dennoch annehmen (Test-Qualifier).</div>
</li>
</ul>
</div>
<h4 class="sectionedit5" id="mechanismus">Mechanismus</h4>
<div class="level4">
<p>
Der <a href="https://www.rfc-editor.org/rfc/rfc7208.html#section-5" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208.html#section-5" rel="ugc nofollow noopener">Mechanismus</a> bestimmt, wie eine IP-Adresse mit dem Begriff abgeglichen werden soll. Unterstützte Werte sind hier:
</p>
<ul class=" fix-media-list-overlap">
<li class="level1"><div class="li"> <strong><code>a</code></strong> : definiert einen A-Record der Domäne, wird keine Domäne angegeben, wird standardmässig die aktuelle Domäne verwendet.</div>
</li>
<li class="level1"><div class="li"> <strong><code>ipv4</code></strong> : Angabe einer IPv4-Adresse</div>
</li>
<li class="level1"><div class="li"> <strong><code>ipv6</code></strong> : Angabe einer IPv6-Adresse</div>
</li>
<li class="level1"><div class="li"> <strong><code>mx</code></strong> : definiert eine IP-Adresse, die im MX-Record der Domäne definiert wurde.</div>
</li>
<li class="level1"><div class="li"> <strong><code>ptr</code></strong> : Dieser Mechanismus prüft, ob das <abbr title="Domain Name System">DNS</abbr>-Reverse-Mapping für <ip> existiert und korrekt auf einen Domänennamen innerhalb einer bestimmten Domäne verweist. Im aktuellen <strong><a href="https://www.rfc-editor.org/rfc/rfc7208.html#section-5.5" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208.html#section-5.5" rel="ugc nofollow noopener">SPF RFC</a></strong> wird von der Nutzung dringend abgeraten und sollte daher aufgrund verschiedener Sicherheits- und Zuverlässigkeitsprobleme nicht verwendet werden!</div>
</li>
<li class="level1"><div class="li"> <strong><code>include</code></strong> : Einbinden einer weiteren SPF-Abfrage.</div>
</li>
<li class="level1"><div class="li"> <strong><code>exists</code></strong> : Dieser Mechanismus wird verwendet, um einen beliebigen Domänennamen zu konstruieren, der für eine <abbr title="Domain Name System">DNS</abbr>-A-Eintragsabfrage verwendet wird. Er erlaubt komplizierte Schemata die beliebige Teile des mail envelops einbeziehen, um zu bestimmen, was erlaubt ist.</div>
</li>
<li class="level1"><div class="li"> <strong><code>all</code></strong> : Alle anderen IP-Adressen, die explizit nicht bis jetzt genannt wurden, also der Rest der weiten Welt.</div>
</li>
</ul>
</div>
<h4 class="sectionedit6" id="modifikator">Modifikator</h4>
<div class="level4">
<p>
<a href="https://www.rfc-editor.org/rfc/rfc7208#section-6" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208#section-6" rel="ugc nofollow noopener">Modifikatoren</a> sind Name/Wert-Paare, mit denen zusätzliche Informationen im SPF-Record geliefert werden können. Die Modifikatoren <strong>sollen</strong> nach allen Mechanismen am Ende eines Datensatzes erscheinen, obwohl diese syntaktisch theoretisch an jeder beliebigen Stelle des Datensatzes stehen können.
</p>
<ul class=" fix-media-list-overlap">
<li class="level1"><div class="li"> <strong><code>redirect</code></strong> : verweist auf weitere SPF-Definitionen z.B. einer anderen Domain.</div>
</li>
<li class="level1"><div class="li"> <strong><code>exp</code></strong> : Sofern ein SMTP-Empfänger eine Nachricht ablehnt, kann dieser optional eine <a href="https://www.rfc-editor.org/rfc/rfc7208#section-6.2" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208#section-6.2" rel="ugc nofollow noopener">Erklärung</a> hinzufügen. Welche Erklärungszeichenfolge ein Absender sieht kann der Absender im SPF-Record angeben. Auf diese Weise kann ein Mail-Anbieter nicht konforme Sender Hinweise und Anweisungen zu SPF und zur Konfiguration von SPF geben. Der Modifikator <strong><code>exp</code></strong> darf <em class="u">nur </em> druckbare <abbr title="American Standard Code for Information Interchange">ASCII</abbr>-Zeichen enthalten!</div>
</li>
</ul>
</div>
<h3 class="sectionedit7 page-header pb-3 mb-4 mt-5" id="beispiele">Beispiele</h3>
<div class="level3">
</div>
<h4 class="sectionedit8" id="einfach_mx_-definition">einfach "mx"-Definition</h4>
<div class="level4">
<p>
Im ersten Konfigurationsbeispiel, welches vermutlich einen Großteil von vielen MTA abdecken wird, treffen wir folgende Definition: <em><strong><span class="search_hit">eMail</span>s werden normalerweise immer von den IP-Adressen des zuständigen Mailserver versandt, können aber auch von anderen Servern verschickt werden. Ein empfangendes System soll auf jeden Fall die Nachricht annehmen, diese aber entsprechend kennzeichnen.</strong></em> Als resultierender SPF-Record ergibt das dann z.B. <strong><code>v=spf1 mx ~all</code></strong> im Falle des Mailservers <strong>mx01.nausch.org</strong>. Den Präfix <strong><code>+</code></strong> beim Mechanismus <strong><code>mx</code></strong> können wir weglassen, da dies die Defaulteinstellung ist.
</p>
<p>
Wir tragen also bei unserem zuständigen <abbr title="Domain Name System">DNS</abbr> im Zonenfile entsprechend die richtigen Daten ein.
</p>
<pre class="code">nausch.org IN TXT "v=spf1 mx ~all"</pre>
<p>
Ändert sich die Anzahl der MX-Records bei unserer Domäne werden automatisch die zutreffenden Hosts bei einer SPF-Anfage honoriert, ohne dass wir extra den SPF-TXT-Record anfassen müssen. Sehr wohl ist jedoch anzumerken, dass für die vollständige Ermittlung der sendeberechtigten Systeme zusätzliche <abbr title="Domain Name System">DNS</abbr>-Abfragen notwendig werden, was mit unter zu Problemen führen kann, sofern die max. Anzahl von <strong>10 <abbr title="Domain Name System">DNS</abbr>-Abfragen</strong> überschritten werden wird. Wie wir damit besser umgehen und diese Herausforderung meistern können, betrachten wir im Abschnitt <strong><a href="#dns_lookup_limitierung" title="centos:mail_c7:spam_10 ↵" class="wikilink1">DNS Lookup Limitierung</a></strong> dann noch extra genauer!
</p>
</div>
<h4 class="sectionedit9" id="erweiterungen_um_weitere_mechanismen">Erweiterungen um weitere Mechanismen</h4>
<div class="level4">
<p>
Im zweiten Beispiel nehmen wir an, dass neben dem MX der Domäne auch noch eine Webanwendung <strong><code>cloud.nausch.org</code></strong> direkt Nachrichten versenden wird. Wir ergänzen also unseren Standard-mx-Eintrag um den Mechanismus <strong><code>a</code></strong>.
</p>
<pre class="code">nausch.org IN TXT "v=spf1 mx a:cloud.nausch.org ~all"</pre>
<p>
Da wir statt der IP-Adresse den Namen <strong>cloud.nausch.org</strong> angegeben haben, wird auch hier eine weitere <abbr title="Domain Name System">DNS</abbr>-Abfrage notwendig werden, wenn der vollständige SPF-Definition ermittelt werden soll. Alternativ kann man hier natürlich mit den <strong><code>ipv4</code></strong> und <strong><code>ipv6</code></strong> Mechanismen arbeiten.
</p>
<pre class="code">nausch.org IN TXT "v=spf1 mx a:cloud.nausch.org ip4:24.134.171.249/32 ip6:2001:678:e68:102:566e:2177:15b3:57fe/128 ~all"</pre>
<div class="wrap_center wrap_round wrap_important plugin_wrap" style="width: 80%;">
<p>
Zu beachten ist hier natürlich, dass die maximale Länge von <strong>255 Zeichen</strong> eines TXT-Records <em class="u">keinenfalls</em> überschritten werden darf!
</p>
</div>
<p>
Hat man viele versendende Systeme und/oder viele IPv6-Adressen, wird man sehr schnell an diese Grenze stossen. Hier greifen wir nun auf den Mechanismus <strong><code>include</code></strong> zurück.
</p>
<pre class="code">nausch.org IN TXT "v=spf1 mx a:cloud.nausch.org include:_spf.blk1.nausch.org include:_spf.blk2.nausch.org include:_spf.blk3.nausch.org ~all"
_spf.blk1.nausch.org 3600 IN TXT "v=spf1 ip6:2001:678:e68:102:1ae8:29ff:fec6:c8dd/128 ip6:2001:678:ed0:102:1ae8:29ff:fec6:c8dd/128 ip6:2001:678:e68:102:dea6:32ff:fe22:f0f2/128 ip6:2001:678:ed0:102:dea6:32ff:fe22:f0f2/128"
_spf.blk2.nausch.org 3600 IN TXT "v=spf1 ip6:2001:678:e68:102:1ae8:29ff:fea9:22ed/128 ip6:2001:678:ed0:102:1ae8:29ff:fea9:22ed/128 ip6:2001:678:e68:102:1ae8:29ff:fec6:c8eb/128 ip6:2001:678:ed0:102:1ae8:29ff:fec6:c8eb/128"
_spf.blk3.nausch.org 3600 IN TXT "v=spf1 ip4:81.169.212.137/32 ip4:24.134.171.249/32"</pre>
<div class="wrap_center wrap_round wrap_important plugin_wrap" style="width: 80%;">
<p>
Wichtig ist hierbei, dass bei Nutzung des Mechanismus <strong><code>mx</code></strong> dieser im führenden SPF-Record aufgeführt wird und nicht in einem der inkludierten zusätzlichen ergänzenden Records! Weiterhin ist zu beachten, dass pro MX-Eintrag im <abbr title="Domain Name System">DNS</abbr> dann zusätzliche <abbr title="Domain Name System">DNS</abbr>-Anfragen nach sich ziehen, siehe <a href="#dns_lookup_limitierung" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Abschnitt DNS Lookup Limitierung</a>.
</p>
</div>
</div>
<h3 class="sectionedit14 page-header pb-3 mb-4 mt-5" id="zusaetzliche_hinweise">zusätzliche Hinweise</h3>
<div class="level3">
<div class="wrap_center wrap_round wrap_tip plugin_wrap" style="width: 80%;">
<p>
<strong>Hinweise:</strong> <br/>
</p>
<p>
Will man neben dem <strong>SPF</strong>-Record in Form eines TXT-Records auch noch einem <strong>google-site-verification</strong> TXT-Record anlegen, dann kann man nicht zwei TXT-Records für die Domain im <abbr title="Domain Name System">DNS</abbr> hinterlegen. Um dennoch beide Funktionenn nutzen zu können, trägt man beide Werte in einem TXT-Record ein. So z.B.
</p>
<pre class="code">@ 300 IN TXT "v=spf1 ip4:217.92.13.131/32 mx ?all " "google-site-verification=oghnZ6HahxTGKkknsap_i-iX8nMi9iz0n6ArEvxuLFA"</pre>
</div>
</div>
<h3 class="sectionedit17 page-header pb-3 mb-4 mt-5" id="dns_lookup_limitierung">DNS Lookup Limitierung</h3>
<div class="level3">
<p>
Abhängig von den verwendeten <strong><a href="#mechanismus" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Mechanismen</a></strong> oder auch <strong><a href="#modifikator" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Modifikatoren</a></strong> müssen in aller Regel zur Evaluierung der Bewertung der IP-Adresee des einliefernden SMTP-Clients weitere <abbr title="Domain Name System">DNS</abbr>-Anfragen durchgeführt werden. Im <a href="https://www.rfc-editor.org/rfc/rfc7208#section-4.6.4" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208#section-4.6.4" rel="ugc nofollow noopener">RFC 7208</a> finden sich ausführliche Hinweise zu den Limitierungen beim <abbr title="Domain Name System">DNS</abbr>-Lookup im Bezug auf unsere SPF-Definitionen.
</p>
<p>
Haben wir wie <a href="#erweiterungen_um_weitere_mechanismen" title="centos:mail_c7:spam_10 ↵" class="wikilink1">in diesem Beispiel</a> den Mechanismus <strong><code>a</code></strong> verwendet, muss bei einer Prüfung der verwendete Daemon nicht nur einen TXT-Record im <abbr title="Domain Name System">DNS</abbr> erfragen, sondern zusätzlich noch eine A- (oder AAAA-) <abbr title="Domain Name System">DNS</abbr>-Abfrage für die Domäne durchführen. Beim Mechanismus <strong><code>mx</code></strong> können das, ja nach Anzahl der im MX-Record hinterlegten MX-Einträge dann einen oder auch mehrere zusätzliche A- (oder AAAA-) <abbr title="Domain Name System">DNS</abbr>-Abfrage nach sich ziehen. Im Falle z.B. von mailbox.org mit den hinterlegten 4 Mailservern wären das dann vier zusätzliche <abbr title="Domain Name System">DNS</abbr>-Anfragen.
</p>
<p>
Doch wie viele <abbr title="Domain Name System">DNS</abbr>-Anfragen werden nun im Zweifelsfall zusätzlich benötigt? Eine Antwort auf diese Frage bietet nachfolgende Tabelle.
</p>
<div class="table-responsive"><table class="inline table table-striped table-condensed" style="min-width: 0px; width: 30%;">
<col style="width: 10%" /><col style="width: 5%" /><col style="width: 10%" /><col style="width: 5%" />
<thead>
<tr class="row0">
<th class="col0 leftalign"> <a href="#mechanismus" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Mechanismus</a> </th><th class="col1 centeralign"> lookups </th><th class="col2 leftalign"> <a href="#modifikator" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Modifikator</a> </th><th class="col3 centeralign"> lookups </th>
</tr>
</thead>
<tr class="row1">
<td class="col0 leftalign"> <strong><code>a</code></strong> </td><td class="col1 centeralign"> 1 </td><td class="col2 leftalign"> <strong><code>v</code></strong> </td><td class="col3 centeralign"> 0 </td>
</tr>
<tr class="row2">
<td class="col0 leftalign"> <strong><code>all</code></strong> </td><td class="col1 centeralign"> 0 </td><td class="col2 leftalign"> <strong><code>exp</code></strong> </td><td class="col3 centeralign"> 0 </td>
</tr>
<tr class="row3">
<td class="col0 leftalign"> <strong><code>exists</code></strong> </td><td class="col1 centeralign"> 1 </td><td class="col2 leftalign"> <strong><code>redirect</code></strong> </td><td class="col3 centeralign"> 1 </td>
</tr>
<tr class="row4">
<td class="col0 leftalign"> <strong><code>include</code></strong> </td><td class="col1 centeralign"> ≥ 1 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
<tr class="row5">
<td class="col0 leftalign"> <strong><code>ip4</code></strong> </td><td class="col1 centeralign"> 0 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
<tr class="row6">
<td class="col0 leftalign"> <strong><code>ip6</code></strong> </td><td class="col1 centeralign"> 0 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
<tr class="row7">
<td class="col0 leftalign"> <strong><code>include</code></strong> </td><td class="col1 centeralign"> ≥ 1 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
<tr class="row8">
<td class="col0 leftalign"> <strong><code>mx</code></strong> </td><td class="col1 centeralign"> ≥ 1 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
<tr class="row9">
<td class="col0 leftalign"> <strong><code>ptr</code></strong> </td><td class="col1 centeralign"> ≥ 1 </td><td class="col2 leftalign"> </td><td class="col3 leftalign"> </td>
</tr>
</table></div>
<p>
Sehen wir uns nun den SPF-Record <strong><code>lists.nausch.org</code></strong> genauer an und gehen detailliert auf die einzelnen Werte ein.
</p>
<pre class="code"> $ dig TXT lists.nausch.org +short</pre>
<pre class="code">v=spf1 mx include:_spf.blk1.nausch.org include:_spf.blk2.nausch.org -all exp=explain._spf.%{d}</pre>
<pre class="code"> $ dig TXT _spf.blk1.nausch.org +short</pre>
<pre class="code">"v=spf1 ip6:2001:678:e68:102:1ae8:29ff:fec6:c8dd/128 ip6:2001:678:ed0:102:1ae8:29ff:fec6:c8dd/128 ip6:2001:678:e68:102:dea6:32ff:fe22:f0f2/128 ip6:2001:678:ed0:102:dea6:32ff:fe22:f0f2/128"</pre>
<pre class="code"> $ dig TXT _spf.blk2.nausch.org +short</pre>
<pre class="code">"v=spf1 ip6:2001:678:e68:102:1ae8:29ff:fea9:22ed/128 ip6:2001:678:ed0:102:1ae8:29ff:fea9:22ed/128 ip6:2001:678:e68:102:1ae8:29ff:fec6:c8eb/128 ip6:2001:678:ed0:102:1ae8:29ff:fec6:c8eb/128"</pre>
<pre class="code"> $ dig TXT explain._spf.nausch.org +short</pre>
<pre class="code">"<span class="search_hit">Email</span>s from lists.nausch.org may only be sent from your own authorized mail servers. Further instructions and explanations can be found here: https://dokuwiki.nausch.org/doku.php/centos:mail_c7:spam_10"</pre>
<p>
Zur vollständigen Bewertung eines anliefernden SMTP-Clients (IP-Adresse) sind also noch weitere <abbr title="Domain Name System">DNS</abbr>-Anfragen notwendig…
</p>
<ol class=" fix-media-list-overlap">
<li class="level1"><div class="li"> einen MX-Lookup je Host im MX-Record einen Lookup (in unserem Fall <strong>1</strong> für den Host <strong><code>mx1.nausch.org</code></strong>)</div>
</li>
<li class="level1"><div class="li"> zwei TXT-Lookups für die inkludierten Blöcke <strong><code>_spf.blk1</code></strong> und <strong><code>_spf.blk2</code></strong> </div>
</li>
</ol>
<p>
… in Summe also <strong>drei</strong> <abbr title="Domain Name System">DNS</abbr>-Anfagen. Hätte der MX-Record hingegen <strong>vier</strong> eingetragene Mailserver, wären dies schon in Summe <strong>sechs</strong> <abbr title="Domain Name System">DNS</abbr>-Anfragen!
</p>
<div class="wrap_center wrap_round wrap_important plugin_wrap" style="width: 80%;">
<p>
Aus diesem Grund ist es ratsam, statt dem <strong>mx</strong>-Mechanismus die betreffenden Mailserver einzeln in einem <strong><code>include</code></strong>-Abschnitt aufzuführen! Natürlich müssen bei Änderungen am MX-Record dann zusätzlich auch die IP-Adressen im <strong><code>include</code></strong> Abschnitt gepflegt werden, so dass in einem SPF-Record nur aktuell verwendete Systeme gelistet werden sollen, versteht sich von selbst und sollte so erst gar nicht einer Erwähnung benötigen.
</p>
<p>
Der SPF-Standard <strong><a href="https://www.rfc-editor.org/rfc/rfc7208.html#section-4.6.4" class="urlextern" target="_tab" title="https://www.rfc-editor.org/rfc/rfc7208.html#section-4.6.4" rel="ugc nofollow noopener">RFC7208</a></strong> schreibt vor, dass eine SPF-Richtlinie nicht mehr als 10 zusätzliche <abbr title="Domain Name System">DNS</abbr>-Lookups zur vollständigen Auswertung benötigen darf. Wenn ein Empfänger mehr als 10 Suchvorgänge durchführen muss, um die SPF-Richtlinie zu bewerten, schlägt beim Zustellversuch der <span class="search_hit">eMail</span>-Nachricht die SPF-Validierung mit einem Permerror-Status fehl, was die Zustellung der E-Mail-Nachricht verhindern kann.
</p>
</div>
</div>
<h3 class="sectionedit21 page-header pb-3 mb-4 mt-5" id="testing-tools">Testing-Tools</h3>
<div class="level3">
<p>
Zum Testen auf Validität unseres SPF-Records stehen uns im WEB unter anderem folgende Dienste (<strong><a href="#tests_und_logging" title="centos:mail_c7:spam_10 ↵" class="wikilink1">SPF Record Testing Tools</a></strong>) zur Verfügung. Die Ergebnisse können helfen auf Mängel in den Records hinzuweisen, so dass wir zur besseren Reputation bei der Mailannahmen bei den Empfängern doch auch entscheidend Einfluss nehmen können.
</p>
<ul class=" fix-media-list-overlap">
<li class="level1"><div class="li"> <strong><a href="http://spf.myisp.ch/" class="urlextern" target="_tab" title="http://spf.myisp.ch/" rel="ugc nofollow noopener">SPF Record Checker</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_1.png?w=750&tok=799712" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy SPF Record Checker" alt="Bild: Bildschirmhardcopy SPF Record Checker" width="750" /></div>
</li>
<li class="level1"><div class="li"> <strong><a href="https://www.spf-record.de/spf-lookup/" class="urlextern" target="_tab" title="https://www.spf-record.de/spf-lookup/" rel="ugc nofollow noopener">spfrecord by nicmanager</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_3.png?w=750&tok=826cb4" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy SPF Record Testing Tools" alt="Bild: Bildschirmhardcopy SPF Record Testing Tools" width="750" /></div>
</li>
<li class="level1"><div class="li"> <strong><a href="https://dmarcian.com/spf-survey/" class="urlextern" target="_tab" title="https://dmarcian.com/spf-survey/" rel="ugc nofollow noopener">SPF Surveyer - dmarcian</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_4.png?w=750&tok=116567" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy demarcian SPF Surveyer" alt="Bild: Bildschirmhardcopy demarcian SPF Surveyer" width="750" /></div>
</li>
<li class="level1"><div class="li"> <strong><a href="https://www.kitterman.com/spf/validate.html" class="urlextern" target="_tab" title="https://www.kitterman.com/spf/validate.html" rel="ugc nofollow noopener">SPF Record Testing Tools</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_2.png?w=750&tok=53ea56" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy SPF Record Testing Tools" alt="Bild: Bildschirmhardcopy SPF Record Testing Tools" width="750" /></div>
</li>
<li class="level1"><div class="li"> <strong><a href="https://mxtoolbox.com/SuperTool.aspx" class="urlextern" target="_tab" title="https://mxtoolbox.com/SuperTool.aspx" rel="ugc nofollow noopener">MX Toolbox</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_5.png?w=750&tok=f58b6d" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy MX Toolbox - SPF Record Lookup" alt="Bild: Bildschirmhardcopy MX Toolbox - SPF Record Lookup" width="750" /></div>
</li>
<li class="level1"><div class="li"> <strong><a href="https://mxtoolbox.com/emailhealth/" class="urlextern" target="_tab" title="https://mxtoolbox.com/emailhealth/" rel="ugc nofollow noopener">MX Toolbox: <span class="search_hit">Email</span> Health Report</a></strong> <br/>
<img src="/lib/exe/fetch.php/centos:mail_c7:spf_checker_6.png?w=750&tok=f2e5a7" class="mediacenter img-responsive" loading="lazy" title="Bild: Bildschirmhardcopy MX Toolbox - Email Health Repor" alt="Bild: Bildschirmhardcopy MX Toolbox - Email Health Repor" width="750" /></div>
</li>
</ul>
</div>
<h2 class="sectionedit22 page-header pb-3 mb-4 mt-5" id="spf-bewertung_bei_der_mailannahme">SPF-Bewertung bei der Mailannahme</h2>
<div class="level2">
<p>
Neben der Befragung von <a href="/doku.php/centos:mail_c6:mta_3?&#access-dateien" class="wikilink1" title="centos:mail_c6:mta_3" data-wiki-id="centos:mail_c6:mta_3">Black-/White-Listen</a>, dem Nutzen von <a href="/doku.php/centos:mail_c7:spam_3" class="wikilink1" title="centos:mail_c7:spam_3" data-wiki-id="centos:mail_c7:spam_3">Postscreen</a> oder <a href="/doku.php/centos:mail_c7:spam_1" class="wikilink1" title="centos:mail_c7:spam_1" data-wiki-id="centos:mail_c7:spam_1">greylisting</a> und <a href="/doku.php/centos:mail_c7:spam_2" class="wikilink1" title="centos:mail_c7:spam_2" data-wiki-id="centos:mail_c7:spam_2">policyd-weight</a>, können wir auch <strong>SPF</strong> bei der Bewertung von eingehenden Sendungen heranziehen.
</p>
<div class="wrap_round wrap_tip plugin_wrap">
<p>
<br/>
Auf den ersten Blick erscheint der Postfix Poliyd-Daemon <strong>pypolicyd-spf</strong> aus dem <a href="/doku.php/centos:epel7" class="wikilink1" title="centos:epel7" data-wiki-id="centos:epel7">EPEL-Repository</a> eine leicht zu installierende und vielversprechende Möglichkeit zu sein. Betrachtet man <strong>SPF</strong> alleine, stimmt dies auch.
</p>
<p>
Möchte man aber hingegen später <strong><a href="/doku.php/centos:mail_c7:spam_12" class="wikilink1" title="centos:mail_c7:spam_12" data-wiki-id="centos:mail_c7:spam_12">DMARC</a></strong> bei der Bewertung von <strong><a href="/doku.php/centos:mail_c7:spam_10" class="wikilink1" title="centos:mail_c7:spam_10" data-wiki-id="centos:mail_c7:spam_10">SPF</a> <em class="u">und</em> <a href="/doku.php/centos:mail_c7:spam_9" class="wikilink1" title="centos:mail_c7:spam_9" data-wiki-id="centos:mail_c7:spam_9">DKIM</a></strong> einsetzen, so weicht man besser auf den SPF-Milter <strong>smf-spf</strong> aus Djangos Repository <strong><a href="/doku.php/centos:nausch.org" class="wikilink2" title="centos:nausch.org" rel="nofollow" data-wiki-id="centos:nausch.org">nausch.org</a></strong> aus.
</p>
</div>
</div>
<h3 class="sectionedit25 page-header pb-3 mb-4 mt-5" id="installation">Installation</h3>
<div class="level3">
<p>
Die einfachste und schnellste Variante bei der Installation ist die aus dem Repository <strong><a href="/doku.php/centos:nausch.org" class="wikilink2" title="centos:nausch.org" rel="nofollow" data-wiki-id="centos:nausch.org">nausch.org</a></strong>. Hier reicht ein einfacher Aufruf von <strong>yum</strong> und alles wird automatisch installiert inkl. der Paketabhängigkeiten.
</p>
<pre class="code"> # yum install smf-spf</pre>
<p>
Will oder kann man nicht auf das Repository <strong><a href="/doku.php/centos:nausch.org" class="wikilink2" title="centos:nausch.org" rel="nofollow" data-wiki-id="centos:nausch.org">nausch.org</a></strong> zurückgreifen, steht immer noch der Installation per Hand nichts im Wege.
</p>
<pre class="code"> # yum localinstall http://repo7.nausch.org/7/x86_64/libspf2-1.2.10-1.el7.centos.x86_64.rpm \
http://repo7.nausch.org/7/x86_64/smf-spf-2.0.4-1.el7.centos.x86_64.rpm</pre>
<p>
Was das RPM alle mitbrachte zeigt ein Blick in die RPM-Datenbank.
</p>
<pre class="code"> # rpm -qil smf-spf</pre>
<pre class="code">Name : smf-spf
Version : 2.0.4
Release : 1.el7.centos
Architecture: x86_64
Install Date: Wed 17 Dec 2014 02:01:33 PM CET
Group : System Environment/Daemons
Size : 26876
License : GPLv2+
Signature : RSA/SHA1, Wed 17 Dec 2014 02:00:24 PM CET, Key ID 60ecfb9e8195aea0
Source RPM : smf-spf-2.0.4-1.el7.centos.src.rpm
Build Date : Wed 17 Dec 2014 02:00:16 PM CET
Build Host : vml000200.dmz.nausch.org
Relocations : (not relocatable)
Packager : Django <django@nausch.org>
Vendor : django
URL : http://smfs.sourceforge.net/smf-spf.html
Summary : Mail filter for Sender Policy Framework verification
Description :
smf-spf is a lightweight, fast and reliable Sendmail milter that implements the
Sender Policy Framework technology with the help of the libspf2 library. It
checks SPF records to make sure that e-mail messages are authorized by the
domain that it is coming from. It's an alternative for the spfmilter,
spf-milter, and milter-spiff milters.
/etc/mail/smfs
/etc/mail/smfs/smf-spf.conf
/run/smfs
/run/smfs/smf-spf.sock
/usr/lib/systemd/system/smf-spf.service
/usr/lib/tmpfiles.d/smfs.conf
/usr/sbin/smf-spf</pre>
</div>
<h3 class="sectionedit26 page-header pb-3 mb-4 mt-5" id="konfiguration">Konfiguration</h3>
<div class="level3">
<p>
Die Konfiguration des <strong>smf-spf</strong>-Daemons gestaltet sich vergleichsweise einfach und erfolgt lediglich mit Hilfe Der Datei <em><strong>/etc/mail/smfs/smf-spf.conf</strong></em>. In der Default-Konfiguration wird der Daemon über einen UNIX-Datei-Socket angesprochen. Diesen Parameter <strong>Socket</strong> weisen wir einem lokalen Port zu, über den wir später von Postfix aus, den SPF-Milter ansprechen wollen.
</p>
<p>
Mit unserem Editor der Wahl, z.B. <strong>vim</strong> bearbeiten wir diese Konfigurationsdatei.
</p>
<pre class="code"> # vim /etc/mail/smfs/smf-spf.conf</pre>
<dl class="file">
<dt><a href="/doku.php/centos:mail_c7:spam_10?do=export_code&codeblock=10" title="Schnipsel herunterladen" class="mediafile mf_conf">/etc/mail/smfs/smf-spf.conf</a></dt>
<dd><pre class="code file bash"><span class="co0"># /etc/mail/smfs/smf-spf.conf</span>
<span class="co0">#</span>
<span class="co0"># smf-spf configuration file v2.0.2 (it's read at start)</span>
<span class="co0">#</span>
<span class="co0"># Whitelist by a sender IP address</span>
<span class="co0">#</span>
<span class="co0"># The syntax is an IP address followed by a slash</span>
<span class="co0"># and a CIDR netmask (if the netmask is omitted, /32 is assumed)</span>
<span class="co0">#</span>
WhitelistIP 127.0.0.0<span class="sy0">/</span><span class="nu0">8</span>
WhitelistIP 10.0.0.0<span class="sy0">/</span><span class="nu0">8</span>
<span class="co0"># Django : 2014-12-17</span>
<span class="co0"># nicht benutzte (private) Netzbereiche entfernt</span>
<span class="co0"># WhitelistIP 172.16.0.0/12</span>
<span class="co0"># WhitelistIP 192.168.0.0/16</span>
<span class="co0"># Whitelist by a sender PTR record (reverse DNS record)</span>
<span class="co0">#</span>
<span class="co0"># Performs a case insensitive substring match</span>
<span class="co0">#</span>
<span class="co0">#WhitelistPTR .friendlydomain.tld</span>
<span class="co0">#WhitelistPTR friendlyhost.friendlydomain.tld</span>
<span class="co0"># Whitelist by an envelope sender e-Mail address</span>
<span class="co0">#</span>
<span class="co0"># Performs a case insensitive substring match</span>
<span class="co0">#</span>
<span class="co0">#WhitelistFrom friend@</span>
<span class="co0">#WhitelistFrom @friendlydomain.tld</span>
<span class="co0">#WhitelistFrom friend@friendlydomain.tld</span>
<span class="co0"># Whitelist by an envelope recipient e-Mail address</span>
<span class="co0">#</span>
<span class="co0"># Performs a case insensitive substring match</span>
<span class="co0">#</span>
<span class="co0">#WhitelistTo postmaster@</span>
<span class="co0">#WhitelistTo @yourspamloverdomain.tld</span>
<span class="co0">#WhitelistTo spamlover@yourdomain.tld</span>
<span class="co0"># Refuse e-Mail messages at SPF Fail results (RFC-4408)</span>
<span class="co0">#</span>
<span class="co0"># Default: on</span>
<span class="co0">#</span>
<span class="co0">#RefuseFail on # (on|off)</span>
<span class="co0">#RefuseFail off</span>
<span class="co0"># Subject tagging of e-Mail messages at SPF SoftFail</span>
<span class="co0"># and Fail (if RefuseFail set to off) results</span>
<span class="co0">#</span>
<span class="co0"># Default: on</span>
<span class="co0">#</span>
<span class="co0">#TagSubject on # (on|off)</span>
<span class="co0"># Subject tagging string</span>
<span class="co0">#</span>
<span class="co0"># Default: [SPF:fail]</span>
<span class="co0">#</span>
<span class="co0">#Tag [SPF:fail]</span>
<span class="co0"># Build a standard Received-SPF: header</span>
<span class="co0">#</span>
<span class="co0"># Default: on</span>
<span class="co0">#</span>
<span class="co0">#AddHeader on # (on|off)</span>
<span class="co0"># Quarantine of e-Mail messages at SPF SoftFail</span>
<span class="co0"># and Fail (if RefuseFail set to off) results</span>
<span class="co0">#</span>
<span class="co0"># Default: off</span>
<span class="co0">#</span>
<span class="co0">#Quarantine off # (on|off)</span>
<span class="co0"># Quarantine mailbox</span>
<span class="co0">#</span>
<span class="co0"># Default: postmaster</span>
<span class="co0">#</span>
<span class="co0">#QuarantineBox postmaster</span>
<span class="co0">#QuarantineBox spambox@yourdomain.tld</span>
<span class="co0"># In-memory cache engine TTL settings</span>
<span class="co0">#</span>
<span class="co0"># The time is given in seconds, except if a unit is given:</span>
<span class="co0"># m for minutes, h for hours, and d for days</span>
<span class="co0"># Specify zero to disable caching</span>
<span class="co0">#</span>
<span class="co0"># Default: 1h</span>
<span class="co0">#</span>
<span class="co0">#TTL 1h</span>
<span class="co0"># Run as a selected user (smf-spf must be started by root)</span>
<span class="co0">#</span>
<span class="co0"># Default: smfs</span>
<span class="co0">#</span>
<span class="co0">#User smfs</span>
<span class="co0"># Socket used to communicate with Sendmail daemon</span>
<span class="co0">#</span>
<span class="co0"># Default: unix:/var/run/smfs/smf-spf.sock</span>
<span class="co0">#</span>
<span class="co0">#Socket unix:/var/run/smfs/smf-spf.sock</span>
<span class="co0"># Django : 2014-12-17</span>
Socket inet:<span class="nu0">8890</span><span class="sy0">@</span>127.0.0.1
<span class="co0"># Facility for logging via Syslog daemon</span>
<span class="co0">#</span>
<span class="co0"># Default: mail</span>
<span class="co0">#</span>
<span class="co0">#Syslog mail # (daemon|mail|local0...local7)</span></pre>
</dd></dl>
<p>
In der Konfigurationsdatei <strong>main.cf</strong> unseres Postfix-Mailserver definieren wir uns nun eine eigene Variable, die wir dann in der Datei <em><strong>/etc/postfix/master.cf</strong></em> dann verwenden wollen. Wir tragen also nun in der Section <strong>MILTER</strong> nachfolgende Zeilen ein.
</p>
<pre class="code"> # vim /etc/postfix/main.cf</pre>
<dl class="file">
<dt><a href="/doku.php/centos:mail_c7:spam_10?do=export_code&codeblock=11" title="Schnipsel herunterladen" class="mediafile mf_cf">/etc/postfix/main.cf</a></dt>
<dd><pre class="code file bash">...
<span class="co0">################################################################################</span>
<span class="co0">## MILTER</span>
<span class="co0"># Django : 2014-11-18</span>
<span class="co0"># DMARC Test</span>
spf_milter = inet:127.0.0.1:<span class="nu0">8890</span>
<span class="co0">#opendkim_milter = inet:127.0.0.1:8891</span>
<span class="co0">#opendmarc_milter = inet:127.0.0.1:8892</span>
amavisd_milter = inet:10.0.0.67:<span class="nu0">8899</span>
...</pre>
</dd></dl>
<p>
In der Konfigurationsdatei <em><strong>/etc/postfix/master.cf</strong></em> legen wir nun fest, dass bei der Annahme auf Port <strong>25</strong> unser gerade definierte <strong>smf-spf</strong>-milter verwendet werden soll.
</p>
<pre class="code"> # vim /etc/postfix/master.cf</pre>
<pre class="code">...
smtp inet n - n - 1 postscreen
smtpd pass - - n - - smtpd
-o smtpd_sasl_auth_enable=no
-o smtpd_milters=${spf_milter},${amavisd_milter}
dnsblog unix - - n - 0 dnsblog
tlsproxy unix - - n - 0 tlspr</pre>
</div>
<h3 class="sectionedit27 page-header pb-3 mb-4 mt-5" id="programmstart">Programmstart</h3>
<div class="level3">
<p>
Das Starten des Daemon erfolgt über folgenden Aufruf.
</p>
<pre class="code"> # systemctl start smf-spf</pre>
<p>
Den erfolgreichen Start bzw. den Status des <strong>smf-spf</strong>-Daemon können wir bei Bedarf mit folgendem Aufruf abfragen.
</p>
<pre class="code"> # systemctl status smf-spf</pre>
<p>
<pre class="code">
<font style="color: rgb(0, 255, 0)"><b>● </b></font>smf-spf.service - Sender Policy Framework milter
Loaded: loaded (/usr/lib/systemd/system/smf-spf.service; disabled)
Active: <font style="color: rgb(0, 255, 0)"><b>active (running)</b></font>since Wed 2014-12-17 14:05:12 CET; 40min ago
Process: 19140 ExecStart=/usr/sbin/smf-spf (code=exited, status=0/SUCCESS)
Main PID: 19141 (smf-spf)
CGroup: /system.slice/smf-spf.service
└─19141 /usr/sbin/smf-spf
Dec 17 14:05:12 vml000087.dmz.nausch.org systemd[1]: Started Sender Policy Framework milter</font>
</pre>
</p>
<p>
Im Maillog wird der Start des Daemon entsprechend dokumentiert.
</p>
<pre class="code"> # less /var/log/maillog</pre>
<pre class="code"> Dec 17 14:05:12 vml000087 smf-spf[19140]: starting smf-spf 2.0.2 listening on inet:8890@127.0.0.1
Dec 17 14:05:12 vml000087 smf-spf[19140]: running as uid: 993, gid: 99</pre>
<p>
Mit Hilfe von <strong>netstat</strong> können wir überprüfen, ob der Port <strong>8890</strong> geöffnet wurde.
</p>
<pre class="code"> # netstat -tulpen</pre>
<pre class="code">#Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 114172 19358/master
tcp 0 0 127.0.0.1:8890 0.0.0.0:* LISTEN 993 112487 19141/smf-spf</pre>
<p>
Gleiches können wir natürlich auch mit dem Befehl <strong>lsof</strong> erreichen.
</p>
<pre class="code"> # lsof -i:8890</pre>
<pre class="code"> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
smf-spf 19141 smfs 4u IPv4 112487 0t0 TCP localhost:rxapi (LISTEN)</pre>
<p>
Damit der Daemon automatisch beim Hochfahren des Servers gestartet wird, nutzen wir folgenden Aufruf.
</p>
<pre class="code"> # systemctl enable smf-spf.service</pre>
<pre class="code"> ln -s '/usr/lib/systemd/system/smf-spf.service' '/etc/systemd/system/multi-user.target.wants/smf-spf.service'</pre>
<p>
Wollen wir überprüfen ob der Dienst automatisch startet, verwenden wir folgenden Aufruf.
</p>
<pre class="code"> # systemctl is-enabled smf-spf.service</pre>
<pre class="code"> enabled</pre>
<p>
Die Rückmeldung <strong>enabled</strong> zeigt an, dass der Dienst automatisch startet; ein <strong>disabled</strong> zeigt entsprechend an, dass der Dienst <em class="u">nicht</em> automatisch startet.
</p>
</div>
<h3 class="sectionedit28 page-header pb-3 mb-4 mt-5" id="tests_und_logging">Tests und Logging</h3>
<div class="level3">
<p>
Zum Testen schicken wir uns von einem fremden Mailserver aus, der einen gültigen SPF-Record vorweisen kann eine <span class="search_hit">eMail</span> an unseren Mailserver und beobachten unser Maillog.
</p>
<pre class="code"> # less /var/log/maillog</pre>
<pre class="code">Mar 26 14:27:32 vml000080 smf-spf[26416]: SPF pass: 200.46.208.138, lists.horde.org, lists.horde.org, <horde-bounces@lists.horde.org></pre>
<p>
Damit nicht bei jeder Anfrage, der SPF-Record beim <abbr title="Domain Name System">DNS</abbr> abgerufen werden muss, cacht der Daemon auch entsprechend den SPF-Record. Wir sehen dann bei der Nutzung dieser gecachten Daten im maillog.
</p>
<pre class="code">Mar 26 14:40:18 vml000080 smf-spf[26416]: SPF none (cached): 72.26.200.202, mail.centos.org, mail.centos.org, <centos-bounces@centos.org></pre>
<p>
Natürlich wird ein Fehler beim Überprüfen des SPF-records auch im maillog vermerkt.
</p>
<pre class="code">Dec 15 14:39:49 vml000080 smf-spf[1501]: SPF fail: ip=88.217.171.167, fqdn=mx1.tachtler.net, helo=mx1.tachtler.net, from=<newsletter@aktuell.erwinmueller.de></pre>
<p>
Im Mailheader der empfangenen <span class="search_hit">eMail</span> findet sich dann auch die entsprechenden Einträge:
</p>
<pre class="code"> Authentication-Results: mx01.nausch.org; spf=fail smtp.mailfrom=<newsletter@aktuell.erwinmueller.de> smtp.helo=mx1.tachtler.net</pre>
<p>
Zum <strong><a href="#testing-tools" title="centos:mail_c7:spam_10 ↵" class="wikilink1">Testen des SPF-Records</a></strong> kann man auch auf Dienste im WWW zurückgreifen.
</p>
</div>
<h2 class="sectionedit29 page-header pb-3 mb-4 mt-5" id="srs_-_sender_rewriting_scheme">SRS - Sender Rewriting Scheme</h2>
<div class="level2">
<p>
Zu Beginn dieses Artikels wurde bereits darauf hingewiesen, dass mit unter Probleme bei Mailumleitungen und/oder Web-Formularen auftauchen können. Mit <strong>SRS</strong><sup><a href="#fn__4" id="fnt__4" class="fn_top">4)</a></sup> kann ein Mailserver die <span class="search_hit">eMail</span>-Adresse im Envelop umschreiben und anpassen. Eine genauere Beschreibung zu SRS ist im Kapitel <strong><a href="/doku.php/centos:mail_c7:spam_11" class="wikilink1" title="centos:mail_c7:spam_11" data-wiki-id="centos:mail_c7:spam_11">SRS - Sender Rewriting Scheme</a></strong> zu finden.
</p>
</div>
<h1 class="sectionedit30 page-header pb-3 mb-4 mt-5" id="links">Links</h1>
<div class="level1">
<ul class=" fix-media-list-overlap">
<li class="level1"><div class="li"> <strong>⇐ <a href="/doku.php/centos:mail_c7:start#spam-_und_virenschutz_mechanismen" class="wikilink1" title="centos:mail_c7:start" data-wiki-id="centos:mail_c7:start">Zurück zum Kapitel "SPAM- und Virenschutz Mechanismen unter CentOS 7"</a></strong></div>
</li>
<li class="level1"><div class="li"> <strong>⇒ <a href="/doku.php/centos:mail_c7:spam_11" class="wikilink1" title="centos:mail_c7:spam_11" data-wiki-id="centos:mail_c7:spam_11">Weiter zum Kapitel "SRS - Sender Rewriting Scheme unter CentOS 7.x"</a></strong></div>
</li>
<li class="level1"><div class="li"> <strong><a href="/doku.php/centos:mail_c7:start" class="wikilink1" title="centos:mail_c7:start" data-wiki-id="centos:mail_c7:start">Zurück zum Kapitel >>Mailserverinstallation unter CentOS 7<<</a></strong></div>
</li>
<li class="level1"><div class="li"> <strong><a href="/doku.php/wiki:start" class="wikilink1" title="wiki:start" data-wiki-id="wiki:start">Zurück zu >>Projekte und Themenkapitel<<</a></strong></div>
</li>
<li class="level1"><div class="li"> <strong><a href="http://dokuwiki.nausch.org/doku.php/" class="urlextern" target="_tab" title="http://dokuwiki.nausch.org/doku.php/" rel="ugc nofollow noopener">Zurück zur Startseite</a></strong></div>
</li>
</ul>
</div>
<hr/><div class="footnotes">
<div class="fn"><sup><a href="#fnt__1" id="fn__1" class="fn_bot">1)</a></sup>
<div class="content"><strong>S</strong>ender <strong>P</strong>olicy <strong>F</strong>rameworks</div></div>
<div class="fn"><sup><a href="#fnt__2" id="fn__2" class="fn_bot">2)</a></sup>
, <sup><a href="#fnt__3" id="fn__3" class="fn_bot">3)</a></sup>
<div class="content"><strong>M</strong>ail <strong>T</strong>ransport <strong>A</strong>gent</div></div>
<div class="fn"><sup><a href="#fnt__4" id="fn__4" class="fn_bot">4)</a></sup>
<div class="content"><strong>S</strong>ender <strong>R</strong>ewriting <strong>S</strong>cheme</div></div>
</div>
<div class="cookielaw-banner cookielaw-bottom">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.<button>OK</button><a href="https://de.wikipedia.org/wiki/Cookie" target="_blank">Weitere Information</a></div></div><!-- /content --></div>
</div>
</div>
<div class="small text-right">
<span class="docInfo">
<ul class="list-inline"><li><span class="iconify text-muted" data-icon="mdi:file-document-outline"></span> <span title="centos/mail_c7/spam_10.txt">centos/mail_c7/spam_10.txt</span></li><li><span class="iconify text-muted" data-icon="mdi:calendar"></span> Zuletzt geändert: <span title="18.11.2024 19:11. ">18.11.2024 19:11. </span></li><li class="text-muted">von <bdi><img src="/lib/tpl/bootstrap3/images/avatar.png" alt="" width="16" height="16" class="img-rounded" /> <bdi>127.0.0.1<bdi></bdi></li></ul> </span>
</div>
</article>
</div>
</main>
<footer id="dw__footer" class="dw-container py-5 dokuwiki container-fluid">
<!-- footer -->
<div class="dw-container small container-fluid mx-5">
<div class="footer-dw-title">
<div class="media">
<div class="media-left">
<img src="/lib/exe/fetch.php/logo.png" alt="Linux - Wissensdatenbank" class="media-object" style="height:32px" />
</div>
<div class="media-body">
<div class="row">
<div class="col-sm-2">
<h4 class="media-heading">Linux - Wissensdatenbank</h4>
<p>
</p>
</div>
<div class="col-sm-10">
</div>
</div>
</div>
</div>
</div>
<div class="footer-license row">
<hr/>
<div id="dw__license" class="col-sm-6">
<p>
<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" title="CC Attribution-Share Alike 4.0 International" target="_tab" itemscope itemtype="http://schema.org/CreativeWork" itemprop="license" rel="license" class="license"><img src="/lib/tpl/bootstrap3/images/license/cc.png" width="24" height="24" alt="cc" /> <img src="/lib/tpl/bootstrap3/images/license/by.png" width="24" height="24" alt="by" /> <img src="/lib/tpl/bootstrap3/images/license/sa.png" width="24" height="24" alt="sa" /> </a> </p>
<p class="small">
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:<br/><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.de" title="CC Attribution-Share Alike 4.0 International" target="_tab" itemscope itemtype="http://schema.org/CreativeWork" itemprop="license" rel="license" class="license">CC Attribution-Share Alike 4.0 International</a> </p>
</div>
<div class="col-sm-6">
<!-- badges -->
<div class="text-right">
<ul id="dw__badges" class="list-inline hidden-print">
<li>
<a href="https://www.dokuwiki.org/template:bootstrap3" title="Bootstrap template for DokuWiki" target="_tab">
<img src="/lib/tpl/bootstrap3/images/bootstrap.png" width="20" alt="Bootstrap template for DokuWiki" />
</a>
</li>
<li>
<a href="https://www.php.net" title="Powered by PHP" target="_tab">
<img src="/lib/tpl/bootstrap3/images/php.png" width="20" alt="Powered by PHP" />
</a>
</li>
<li>
<a href="http://validator.w3.org/check/referer" title="Valid HTML5" target="_tab">
<img src="/lib/tpl/bootstrap3/images/html5.png" width="20" alt="Valid HTML5" />
</a>
</li>
<li>
<a href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS" target="_tab">
<img src="/lib/tpl/bootstrap3/images/css3.png" width="20" alt="Valid CSS" />
</a>
</li>
<li>
<a href="https://www.dokuwiki.org/" title="Driven by DokuWiki" target="_tab">
<img src="/lib/tpl/bootstrap3/images/logo.png" width="20" alt="Driven by DokuWiki" />
</a>
</li>
</ul>
</div>
<!-- /badges -->
</div>
</div>
</div>
<!-- /footer -->
</footer>
<a href="#dokuwiki__top" class="back-to-top hidden-print btn btn-default" title="zum Inhalt springen" accesskey="t">
<span class="iconify" data-icon="mdi:chevron-up"></span> </a>
<div id="screen__mode"> <span class="visible-xs-block"></span>
<span class="visible-sm-block"></span>
<span class="visible-md-block"></span>
<span class="visible-lg-block"></span>
</div>
<img src="/lib/exe/taskrunner.php?id=centos%3Amail_c7%3Aspam_10&1743851042" width="2" height="1" alt="" />
</div>
</body>
</html>