Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
centos:mail_c6:mta_13 [21.03.2014 09:14. ] – [DMARC - Domain-based Message Authentication, Reporting & Conformance] djangocentos:mail_c6:mta_13 [20.05.2021 12:41. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 2: Zeile 2:
 {{:centos:mail_c6:dmarc-logo.png?nolink |DMARC Logo}}  {{:centos:mail_c6:dmarc-logo.png?nolink |DMARC Logo}} 
  
-**DMARC**((**D**omain-based **M**essage **A**uthentication, **R**eporting & **C**onformance)) ist an sich kein eigenständiger Prozess in der eMail-Verarbeitung, vielmehr erweitert DMARC auf die beiden Techniken **SPF**((**S**ender **P**olicy **F**ramework)) und **DKIM**((**D**omainKeys **I**dentified **M**ail)). DMARC ergänzt somit DKIM und SPF, ohne die DMARC nicht funktionieren kann.   +**DMARC**((**D**omain-based **M**essage **A**uthentication, **R**eporting & **C**onformance)) ist an sich kein eigenständiger Prozess in der eMail-Verarbeitung, vielmehr erweitert DMARC auf die beiden Techniken **[[centos:mail_c6:mta_10|SPF]]**((**S**ender **P**olicy **F**ramework)) und **[[centos:mail_c6:mta_9|DKIM]]**((**D**omainKeys **I**dentified **M**ail)). DMARC ergänzt somit DKIM und SPF, ohne die DMARC nicht funktionieren kann.   
-Hinweise zu DMARC findet man bei auch auf der Webseite von [[http://dmarc.org|DMARC.org]], oder im [[https://datatracker.ietf.org/doc/draft-kucherawy-dmarc-base/|Entwurf der Network Working Group]], die der [[http://www.ietf.org/|The Internet Engineering Task Force]] Anfang 2012 zur Prüfung vorgelegt wurde.+Hinweise zu DMARC findet man bei auch auf der Webseite von [[http://dmarc.org|DMARC.org]], oder im [[https://datatracker.ietf.org/doc/draft-kucherawy-dmarc-base/|Entwurf der Network Working Group]], die der **[[http://www.ietf.org/|ITF]]**((The **I**nternet Engineering **T**ask **F**orce)) Anfang 2012 zur Prüfung vorgelegt wurde. 
 + 
 +<WRAP round tip> \\ Obwohl DMARC aktuell noch als Entwurf gilt, wird laut den Angaben der [[http://dmarc.org/presentations/DMARC_anniversary_review_20140218.pdf|aktuellen DMARC-Präsentation aus 2014]] bereits **mehr als 60%** der weltweiten eMail-Postfächer mit Hilfe von DMARC geschützt.  
 + 
 +Die weltgößten eMail-Provider setzen auf DMARC, wie z.B.: 
 +  * **GMail**, **Yahoo**, **AOL**, **Comcast**, oder **Outlook.com** 
 +  * **Mail.ru** (//größter eMail-Provider in Russland//
 +  * **NetEase** (//größter eMail-Provider in China//) 
 +  * **XS4All** (//größter eMail-Provider in den Niederlanden//
 +Alles gute Gründe, sich dem Thema //**DMARC**// dennoch intensiver zu widmen!</WRAP>
  
 Bei DMARC kann definiert werden, wie ein empfangender Mailserver Nachrichten behandeln und verarbeiten soll, insbesondere mit Hinblick auf die Bewertung der Versandberechtigung des einliefernden Mailservers (SPF) und der nicht veränderten Nachricht (DKIM). Fällt eine oder beide Überprüfungen negativ aus, definiert DMARC, ob die eMail in Quarantäne gestellt, die Annahme der eMail abgelehnt (reject) oder eben dennoch zugestellt werden soll. Bei DMARC kann definiert werden, wie ein empfangender Mailserver Nachrichten behandeln und verarbeiten soll, insbesondere mit Hinblick auf die Bewertung der Versandberechtigung des einliefernden Mailservers (SPF) und der nicht veränderten Nachricht (DKIM). Fällt eine oder beide Überprüfungen negativ aus, definiert DMARC, ob die eMail in Quarantäne gestellt, die Annahme der eMail abgelehnt (reject) oder eben dennoch zugestellt werden soll.
Zeile 9: Zeile 18:
 Das nachfolgende Schaubild zeigt den Bearbeitungsverlauf einer eMail mit Berücksichtigung auf DMARC auf. Das nachfolgende Schaubild zeigt den Bearbeitungsverlauf einer eMail mit Berücksichtigung auf DMARC auf.
  
-<uml width=900 title="DMARC - Verarbeitungsschritte einer eMail"+<uml> 
 +skinparam defaultFontName Courier
 state "Absender Klaus generiert eMail" as sender state "Absender Klaus generiert eMail" as sender
 sender : ------------------------------------------- sender : -------------------------------------------
Zeile 34: Zeile 43:
   state "Mail-Ausgang" as smtp_a   state "Mail-Ausgang" as smtp_a
   smtp_a : Versand der eMail   smtp_a : Versand der eMail
-  smtp_a : zum eMail-Server +  smtp_a : zum eMail-Server (MTA)
   smtp_a : des Empfängers   smtp_a : des Empfängers
 } }
Zeile 169: Zeile 178:
  
 </uml> </uml>
 +===== Zusammenspiel von DKIM, SPF und DMARC =====
  
-http://www.trusteddomain.org/opendmarc/+<WRAP round important> \\ Möchten wir DMARC bei unserem Mailserver einsetzen, ist es wichtig, dass alle drei Komponenten via **Milter**((**M**ail-F**ilter**)) an unseren Postfix-Mailserver angebunden werdenNur so stehen dem **DMARC**-Daemon alle relevanten Headerinformationen zur Bewertung zur Verfügung\\ 
 +</WRAP>
  
-FIXME //working in progress ...// FIXME+Wir setzen daher bei unserer Installation jeweils folgende Pakete ein: 
 +  * **SPF** **smf-spf** aus [[http://repository.nausch.org/public/|Djangos-Repository]] 
 +  * **DKIM** **opendkim** aus dem [[centos:rpmforge6|RPMforge]] 
 +  * **DMARC** **opendmarc** aus [[http://repository.nausch.org/public/|Djangos-Repository]] 
 + 
 +Die Installation von **SPF-Milter** ist im Kapitel [[centos:mail_c6:mta_10|SPF - Sender Policy Framework]] und **OpenDKIM-Milter** im Kapitel [[centos:mail_c6:mta_9?=opendkim#besonderheit_-_dmarc|DKIM - Domain Key Identified Mail]] genauer beschrieben. 
 + 
 + 
 + 
 + 
 +===== DMARC-Record ===== 
 +==== Beschreibung des Datensatzes ==== 
 +Mit Hilfe des [[https://dmarcian.com/kitterman_record_gen|DMARC Record Assistant]] kann man sich sehr leicht und einfach den nötigen DMARC-Record generieren lassen, den man dann über einen TXT-Record der Subdomain **_dmarc** in seinem DNS einträgtIm Kapitel [[|6.2General Record Format]] des [[|DMARC Standardisierungs-Entwurf]] ist die  
 + 
 +Als Beispiel sehen wir uns nun den aktuellen DMARC-Record von **nausch.org** an, den wir u.a. mit dem Aufruf des Befehls **host** vom DNS-Server abfrsagen können. 
 + 
 +   # host -t TXT _dmarc.nausch.org 
 + 
 +  _dmarc.nausch.org descriptive text "v=DMARC1\; p=reject\; rua=mailto:postmaster@nausch.org\; ruf=mailto:django@nausch.org\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400\; sp=reject" 
 + 
 +Die einzelnen Werte haben nun folgende Bedeutung. 
 +^  Parameter  ^                                Art                                ^             Wert              ^                                                                                                                                                                                                                                                                                                                                                                                                                                   Bedeutung                                                                                                                                                                                                                                                                                                                                                                                                                                    ^ 
 +| v           | Plaintext; REQUIRED                                               | DMARC1                        | Identifiziert den Datensatz als DMARC-Record. Der Parameter **muss** als erster wert im DMARC-Record gesetzt sein. Fehlt dieser ist der gesamte DMARC-Record zu verwerfen!                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 
 +| p           | Plaintext; REQUIRED                                               | reject                        | Beschreibt, wie der Empfänger die Nachrichten des Domain-Inhabers verwerten soll. Diese gilt auch für die Subdomains, sofern für diese mit dem Parameter **sp** keine separate Definition vorliegt. Mögliche Werte sind: \\ :OK:**none** : Der Domaininhaber hat keine Vorgaben zur Verabeitung/Zustellung der eMails. \\ :BRK:**quarantine** : Der Domaininhaber wünscht, dass eMails, die die DMARC-Bewertung nicht bestehen, als verdächtig gewertet werden sollen. Abhängig vom Empfänger können diese als verdächtig markiert werden, mit weiteren/zusätzlichen SPAM prüfungen zu belegen ist, oder in einen SPAM-Ordner verschoben werden soll. \\ :NOK:**reject** : Der Domaininhaber wünscht, dass eMails, die die DMARC-Bewertung nicht bestehen, rejected, also nicht angenommen werden sollen. Dies sollte, wenn möglich, noch während des SMTP-Dialogs passieren. 
 +| sp          | Plaintext;OPTIONAL                                                | reject                        | Beschreibt, wie der Empfänger die Nachrichten des Domain-Inhabers einer Subdomäne verwerten soll. Der Parameter beschreibt nur die abgefragte Subdomäne, nicht die Domäne an sich! Der Syntax entspricht dem Parameter **p**. Wird der Paramter **sp** nicht gesetzt, gelten die Definitionen des Parameters **p** auch für alle Subdomänen.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 
 +| rua         | Kommaseparierte plain-text Liste von DMARC URIs; OPTIONAL         | mailto:postmaster@nausch.org  | Der Domaininhaber wünscht, per eMail mit aufbereiteten Statiskdaten der verarbeiteten eMails, informiert zu werden. Ist dieser Parameter nicht gesetzt, braucht der Empfänger keine Statistikdaten aufbereiten.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 
 +| ruf         | Kommaseparierte Plaintext Liste von DMARC URIs; OPTIONAL          | mailto:django@nausch.org      | Der Domaininhaber wünscht, per eMail mit detailierten forensischen Statiskdaten der verarbeiteten eMails, informiert zu werden. Ist dieser Parameter nicht gesetzt, braucht der Empfänger keine Statistikdaten aufbereiten.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 
 +| adkim       | Plaintext; OPTIONAL; Default = relaxed                            | r                             | Definiert, wie konservativ das Ergebnis der DKIM-Signaturprüfung bewertet werden soll. Mögliche Werte sind entweder **r**=relaxed oder **s**=strikt.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 
 +| aspf        | Plaintext; OPTIONAL; Default = relaxed                            | r                             | Definiert, wie konservativ das Ergebnis der SPF-Prüfung bewertet werden soll. Mögliche Werte sind entweder **r**=relaxed oder **s**=strikt.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 
 +| pct         | Plaintext/Zahlenwert zwischen 0 und 100; OPTIONAL; Default = 100  | 100                           | Der Domaininhaber wünscht, daß der angegebene Prozentwert an Nachrichten von den DMARC-Prüfungen benutzt werden soll. Der Wert beschreibt **nicht** das Verhältnis in den DMARC-Reports.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 
 +| rf          | Kommaseparierte Plaintext Liste; OPTIONAL; Default = afrf         | afrf                          | Der Domaininhaber wünscht, dass die aufbereiteten forensischen Prüfberichte im Format **AFRF**((**A**uthentication **F**ailure **R**eporting **F**ormat)) oder **IODEF**((**I**ncident **O**bject **D**escription **E**xchange **F**ormat)) zu erhalten, wenn sowohl der DKIM- wie auch der SPF-Test negativ ausfällt.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 
 +| ri          | Plaintext; OPTIONAL; Default = 86400                              | 86400                         | Der Domaininhaber wünscht, dass die aufbereiteten Statistik- und Forensikdaten spätestens alle "n" Sekunden verschickt werden sollen.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 
 + 
 + 
 +==== Generierung unseres DMARC-Records ==== 
 +Nach Erstellung des DMARC-Records von Hand oder über den [[https://dmarcian.com/kitterman_record_gen|DMARC Record Assistant]], tragen wir demnach bei unserem zuständigen DNS entsprechenden eigenen und richtigen Daten ein. 
 +   _dmarc.nausch.org                        IN      TXT     "v=DMARC1\; p=reject\; rua=mailto:postmaster@nausch.org\; ruf=mailto:django@nausch.org\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400\; sp=reject" 
 + 
 +==== Testen der DMARC Definitionen ==== 
 +Über die URL [[https://otalliance.org/resources/authentication/spflookup.html|OTA Query Tool for SPF & DMARC Records]] der [[https://otalliance.org|Online trust Alliance]] kann man online bei Bedarf testen, ob der DMARC-Eintrag soweit richtig ist.  
 + 
 +Mit Hilfe der [[https://dmarcian.com/dmarc-inspector/|DMARC Inspectors]] kann man (s)einen DMARC-Record testen und sich die Optionen die der Domaininhaber gesetzt hat, beschreiben lassen. Möchte man seinen **SPF**-Record testen lassen, steht einem der [[https://dmarcian.com/spf-survey/|SPF Surveyor]] zur Verfügung.  
 + 
 +Zu guter Letzt kann mit dem [[https://dmarcian.com/protodave_dkim|DKIM Key Checker]] der, im DNS hinterlegte, DKIM-Schlüssel einer Domäne getestet werden. 
 + 
 +Möchte man dann noch testen, ob der eigene Mailserver alle Voraussetzungen für eine DMARC-policy hat, schickt man einfach eine "leere eMail" an [[mailto:checkmyauth@auth.returnpath.net?Subject=Test|checkmyauth@auth.returnpath.net]], so erhält man anschließen einen ausführlichen Prüfbericht. 
 + 
 +<code>From: "Return Path" <noreply@returnpath.net> 
 +Subject: Return Path DKIM/SPF Reflector Report 
 +Date: Fri, 21 Mar 2014 03:58:12 -0600 (MDT) 
 +To: undisclosed-recipients:; 
 + 
 +Return Path DKIM/SPF Reflector Report 
 +===================================== 
 +Source IP = 217.91.103.190 
 +Mail From = django@nausch.org 
 + 
 +Identity Alignment Results 
 +========================== 
 +SPF Domain Alignment Result = PASS 
 + The From domain 'nausch.org' is an exact match with the SPF domain 'nausch.org'
 + Note that the alignment policy is set to relaxed in your DMARC record. 
 + 
 +DKIM Domain Alignment Results: 
 + Result for DNS Record: 140224._domainkey.nausch.org = PASS 
 + The From domain 'nausch.org' is an exact match with the DKIM domain 'nausch.org'
 + Note that the alignment policy is set to relaxed in your DMARC record. 
 + 
 +DKIM Results 
 +============ 
 +Result = pass 
 +Domain = nausch.org 
 +Selector = 140224 
 +DNS Record(s) = 
 + 140224._domainkey.nausch.org TXT v=DKIM1; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/CruOs3fCU0ujOStcNN85TJh+5HvMa9m99C5XuRBlxOr+fp5BeIEtiPO0szKvvPojwrueCq0oOuEzjR/i2ObpRkzKRUXmAa0qVezUZwQIbKeiuKII0PnpQclDrmQrzSXcQWPT57tkPg17Q9WamFUUaHeN3+pVGtMyjYekRaAoRlV+a1gD111kXMPhiaFTMIncoRBS/gYN8FjfekH+ezqbLHLB8DLJQBZEGUILvJjAHX0722XyqYtkn1qfv63nPRGw/qqAW1072Gchq4ZS4ZPQ89SrK4KcHt/XptSlztXMWtmRFQriHdvbjr1Fx7ZwXdTQ+ik2AUZLMdhMrQe6/1GujQiMD6po81NpYbrjnfd+QF4sUbus4wPQKVNzsctiuzGlWsFexSHP4dAZtKnImJhVDnzZODQy0nSafedlr5g4VR36vgm0YPWjSyRNnC/APHyw0DtHIrzTqfKuDeGv80uMPbEdujrw9gLbK3H8ow42iTicmgPgT3J5j70ZOo4o4FMtpZ/AEQw+VnWpSfw7bkMjufLc29XHbtp22wfgq2Lmarr3+psaHokFaQrImkMbzdSL9CdabkLptanAilLScvq8UaKVC+G1+vHDgaweq3BhXD5+YcJnJlp4msUqqxGYlnx4RSvv8PipMU2DsVFbNJSH5NJuS7GuzplNg+f20ysCAwEAAQ== 
 + Public Key Length = 4096 
 + 
 +DomainKeys Results 
 +================== 
 +No DomainKeys signature(s) found. 
 + 
 +SPF Results 
 +=========== 
 +Result = pass 
 +Domain = nausch.org 
 +DNS Record(s) = 
 + nausch.org TXT v=spf1 ip4:217.91.103.190/32 mx ?all 
 + 
 +DMARC Results 
 +============= 
 +Domain = _dmarc.nausch.org 
 +DNS Record =  
 + _dmarc.nausch.org TXT v=DMARC1; p=reject; rua=mailto:postmaster@nausch.org; ruf=mailto:django@nausch.org; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=reject 
 + 
 +DMARC Record Validation Results 
 +=============================== 
 +DMARC Errors Detected: None. 
 +Non-DMARC flags encountered (skipped): None. 
 + 
 +Visit http://www.returnpath.com/solution-content/dmarc-support/ for more information on DMARC record creation and validation. 
 +</code>
  
  
 ===== Download ===== ===== Download =====
-   # wget http://repository.nausch.org/public/opendmarc-1.2.0-1.el6.x86_64.rpm + Bei der Implementation von **DMARC** in unserem eigenen Mailserver, greifen wir auf das Projekt **[[http://www.trusteddomain.org/opendmarc/|OpenDMARC]]** zurück. 
-   # wget http://repository.nausch.org/public/libopendmarc-1.2.0-1.el6.x86_64.rpm+ 
 +Entweder holt man sich das betreffende Quellpaket auf der [[http://sourceforge.net|sourceforge]]- 
 +[[http://sourceforge.net/projects/opendmarc/files/latest/download|Download-Seite]] oder man greift auf die RPM-Pakete von [[http://repository.nausch.org/public/|Djangos Repository]]] zurück.  
 + 
 +Also erstes laden wir uns die beiden benötigten Pakete auf unseren Rechner, zuvor wechseln wir abernoch in unser lokales Programm-Archiv. 
 +   # cd /usr/local/src/packages/ 
 + 
 +Die **x86_64-Pakete** findet man im Verzeichnis http://repository.nausch.org/public/x86_64/, die Pakete für **i686** im Verzeichnis http://repository.nausch.org/public/i686/
 + 
 +Im Falle der x86_64-Pakete sind dies dann entsprechend folgende Pakete: 
 +   # wget http://repository.nausch.org/public/x86_64/libopendmarc-1.3.0-beta0.el6.x86_64.rpm 
 + 
 +   # wget http://repository.nausch.org/public/x86_64/opendmarc-1.3.0-beta0.el6.x86_64.rpm
  
 ===== Installation ===== ===== Installation =====
-   # yum localinstall libopendmarc-1.2.0-1.el6.x86_64.rpm opendmarc-1.2.0-1.el6.x86_64.rpm+   # yum localinstall libopendmarc-1.3.0-beta0.el6.x86_64.rpm opendmarc-1.3.0-beta0.el6.x86_64.rpm
  
  
    # rpm -qil opendmarc    # rpm -qil opendmarc
-<code>Name        : opendmarc                    Relocations: (not relocatable) +<code>Version     : 1.3.0                             Vendor: Django 
-Version     : 1.2.0                             Vendor: django +Release     : beta0.el6                     Build Date: Mon 28 Apr 2014 05:46:34 PM CEST 
-Release     : 1.el6                         Build Date: Tue 18 Mar 2014 11:08:28 PM CET +Install Date: Mon 28 Apr 2014 05:50:47 PM CEST      Build Host: vml010039.intra.nausch.org 
-Install Date: Tue 18 Mar 2014 11:18:08 PM CET      Build Host: vml010039.intra.nausch.org +Group       : System Environment/Daemons    Source RPM: opendmarc-1.3.0-beta0.el6.src.rpm 
-Group       : System Environment/Daemons    Source RPM: opendmarc-1.2.0-1.el6.src.rpm +Size        : 175607                           License: BSD and Sendmail 
-Size        : 173606                           License: BSD and Sendmail +Signature   : RSA/SHA1, Mon 28 Apr 2014 05:46:35 PM CEST, Key ID 31b4758f7c65ab27
-Signature   : RSA/SHA1, Tue 18 Mar 2014 11:08:30 PM CET, Key ID 31b4758f7c65ab27+
 Packager    : Django Packager    : Django
 URL         : http://http://www.trusteddomain.org/opendmarc.html URL         : http://http://www.trusteddomain.org/opendmarc.html
Zeile 213: Zeile 335:
 /usr/sbin/opendmarc-params /usr/sbin/opendmarc-params
 /usr/sbin/opendmarc-reports /usr/sbin/opendmarc-reports
-/usr/share/doc/opendmarc-1.2.0 +/usr/share/doc/opendmarc-1.3.0 
-/usr/share/doc/opendmarc-1.2.0/INSTALL +/usr/share/doc/opendmarc-1.3.0/INSTALL 
-/usr/share/doc/opendmarc-1.2.0/README +/usr/share/doc/opendmarc-1.3.0/README 
-/usr/share/doc/opendmarc-1.2.0/README.schema +/usr/share/doc/opendmarc-1.3.0/README.schema 
-/usr/share/doc/opendmarc-1.2.0/RELEASE_NOTES +/usr/share/doc/opendmarc-1.3.0/RELEASE_NOTES 
-/usr/share/doc/opendmarc-1.2.0/schema.mysql+/usr/share/doc/opendmarc-1.3.0/schema.mysql
 /usr/share/man/man5/opendmarc.conf.5.gz /usr/share/man/man5/opendmarc.conf.5.gz
 /usr/share/man/man8/opendmarc-check.8.gz /usr/share/man/man8/opendmarc-check.8.gz
Zeile 231: Zeile 353:
 </code> </code>
  
 +  # rpm -qil libopendmarc
 +<code>Name        : libopendmarc                 Relocations: (not relocatable)
 +Version     : 1.3.0                             Vendor: Django
 +Release     : beta0.el6                     Build Date: Mon 28 Apr 2014 05:46:34 PM CEST
 +Install Date: Mon 28 Apr 2014 05:50:46 PM CEST      Build Host: vml010039.intra.nausch.org
 +Group       : System Environment/Libraries   Source RPM: opendmarc-1.3.0-beta0.el6.src.rpm
 +Size        : 69016                            License: BSD and Sendmail
 +Signature   : RSA/SHA1, Mon 28 Apr 2014 05:46:35 PM CEST, Key ID 31b4758f7c65ab27
 +Packager    : Django
 +URL         : http://http://www.trusteddomain.org/opendmarc.html
 +Summary     : An open source DMARC library
 +Description :
 +This package contains the library files required for running services built
 +using libopendmarc.
 +/usr/lib64/libopendmarc.so.1
 +/usr/lib64/libopendmarc.so.1.0.2
 +</code>
  
-===== Konfiguration ===== +===== Konfigurations-Dokumentation ===== 
-==== Konfigurations-Dokumentation ====+==== README ==== 
 +Viele hilfreiche Informationen zur Konfiguration von OpenDMARC finden sich in den nachfolgenden Dateien.
    # less /usr/share/doc/opendmarc-1.2.0/README    # less /usr/share/doc/opendmarc-1.2.0/README
 <file /usr/share/doc/opendmarc-1.2.0/README>OPENDMARC README <file /usr/share/doc/opendmarc-1.2.0/README>OPENDMARC README
Zeile 395: Zeile 535:
 </file> </file>
  
 +==== README.schema ====
    # less /usr/share/doc/opendmarc-1.2.0/README.schema    # less /usr/share/doc/opendmarc-1.2.0/README.schema
 <file /usr/share/doc/opendmarc-1.2.0/README.schema>This directory contains the OpenDMARC schema plus any related files. <file /usr/share/doc/opendmarc-1.2.0/README.schema>This directory contains the OpenDMARC schema plus any related files.
Zeile 437: Zeile 578:
 </file> </file>
  
 +==== opendmarc.conf ====
    # man opendmarc.conf    # man opendmarc.conf
 <code>opendmarc.conf(5)                                            opendmarc.conf(5) <code>opendmarc.conf(5)                                            opendmarc.conf(5)
Zeile 671: Zeile 813:
 </code> </code>
  
 +==== opendmarc ====
    # man 8 opendmarc    # man 8 opendmarc
 <code>opendmarc(8)                                                      opendmarc(8) <code>opendmarc(8)                                                      opendmarc(8)
Zeile 778: Zeile 921:
 </code> </code>
  
 +==== reports-README ====
    # elinks http://www.trusteddomain.org/opendmarc/reports-README    # elinks http://www.trusteddomain.org/opendmarc/reports-README
 <code>OPENDMARC REPORTS <code>OPENDMARC REPORTS
Zeile 841: Zeile 985:
  
 </code> </code>
 +==== opendmarc.import ====
  
    # man opendmarc-import    # man opendmarc-import
Zeile 899: Zeile 1043:
 </code> </code>
  
 +==== opendmarc-reports ====
    # man opendmarc-reports    # man opendmarc-reports
 <code>opendmarc-reports(8)                                      opendmarc-reports(8) <code>opendmarc-reports(8)                                      opendmarc-reports(8)
Zeile 975: Zeile 1120:
                           The Trusted Domain Project      opendmarc-reports(8)                           The Trusted Domain Project      opendmarc-reports(8)
 </code> </code>
 +===== Konfiguration =====
 ==== opendmarc Konfiguration ==== ==== opendmarc Konfiguration ====
 +Die Konfiguration von OpenDMARC erfolgt über die Konfigurationsdatei **opendmarc.conf** im Verzeichnis **/etc**. 
 +=== /etc/opendmarc.conf ===
    # vim /etc/opendmarc.conf    # vim /etc/opendmarc.conf
  
Zeile 986: Zeile 1133:
  
 ##  AuthservID (string) ##  AuthservID (string)
-##   defaults to MTA name+##      defaults to MTA name
 ## ##
 ##  Sets the "authserv-id" to use when generating the Authentication-Results: ##  Sets the "authserv-id" to use when generating the Authentication-Results:
Zeile 994: Zeile 1141:
 # #
 # AuthservID name # AuthservID name
 +# Django : 2013-03-18
 +AuthservID mx01.nausch.org
  
 ##  AuthservIDWithJobID { true | false } ##  AuthservIDWithJobID { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  If "true", requests that the authserv-id portion of the added ##  If "true", requests that the authserv-id portion of the added
Zeile 1003: Zeile 1152:
 # #
 # AuthservIDWithJobID false # AuthservIDWithJobID false
 +# Django : 2013-03-18
 +AuthservIDWithJobID true
  
 ##  AutoRestart { true | false } ##  AutoRestart { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  Automatically re-start on failures. Use with caution; if the filter fails ##  Automatically re-start on failures. Use with caution; if the filter fails
Zeile 1013: Zeile 1164:
  
 ##  AutoRestartCount n ##  AutoRestartCount n
-##   default 0+##      default 0
 ## ##
 ##  Sets the maximum automatic restart count.  After this number of automatic ##  Sets the maximum automatic restart count.  After this number of automatic
Zeile 1022: Zeile 1173:
  
 ##  AutoRestartRate n/t[u] ##  AutoRestartRate n/t[u]
-##   default (no limit)+##      default (no limit)
 ## ##
 ##  Sets the maximum automatic restart rate.  If the filter begins restarting ##  Sets the maximum automatic restart rate.  If the filter begins restarting
Zeile 1037: Zeile 1188:
  
 ##  Background { true | false } ##  Background { true | false }
-##   default "true"+##      default "true"
 ## ##
 ##  Causes opendmarc to fork and exits immediately, leaving the service ##  Causes opendmarc to fork and exits immediately, leaving the service
Zeile 1045: Zeile 1196:
  
 ##  BaseDirectory (string) ##  BaseDirectory (string)
-##   default (none)+##      default (none)
 ## ##
 ##  If set, instructs the filter to change to the specified directory using ##  If set, instructs the filter to change to the specified directory using
Zeile 1056: Zeile 1207:
  
 ##  ChangeRootDirectory (string) ##  ChangeRootDirectory (string)
-##   default (none)+##      default (none)
 ## ##
 ##  Requests that the operating system change the effective root directory of ##  Requests that the operating system change the effective root directory of
Zeile 1066: Zeile 1217:
  
 ##  CopyFailuresTo (string) ##  CopyFailuresTo (string)
-##   default (none)+##      default (none)
 ## ##
 ##  Requests addition of the specified email address to the envelope of ##  Requests addition of the specified email address to the envelope of
Zeile 1074: Zeile 1225:
  
 ##  DNSTimeout (integer) ##  DNSTimeout (integer)
-##   default 5+##      default 5
 ##  ## 
 ##  Sets the DNS timeout in seconds.  A value of 0 causes an infinite wait. ##  Sets the DNS timeout in seconds.  A value of 0 causes an infinite wait.
Zeile 1082: Zeile 1233:
  
 ##  EnableCoredumps { true | false } ##  EnableCoredumps { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  On systems that have such support, make an explicit request to the kernel ##  On systems that have such support, make an explicit request to the kernel
Zeile 1093: Zeile 1244:
  
 ##  ForensicReports { true | false } ##  ForensicReports { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  Enables generation of forensic reports when the DMARC test fails and the ##  Enables generation of forensic reports when the DMARC test fails and the
Zeile 1100: Zeile 1251:
  
 # ForensicReports false # ForensicReports false
 +#  Django : 2014-03-18
 +ForensicReports true
  
 ##  ForensicReportsBcc (string) ##  ForensicReportsBcc (string)
-##   default (none)+##      default (none)
 ## ##
 ##  When forensic reports are enabled and one is to be generated, always ##  When forensic reports are enabled and one is to be generated, always
Zeile 1111: Zeile 1264:
  
 # ForensicReportsBcc postmaster@example.coom # ForensicReportsBcc postmaster@example.coom
 +# Django : 2014-03-18
 +ForensicReportsBcc postmaster@nausch.org
  
 ##  ForensicReportsOnNone { true | false } ##  ForensicReportsOnNone { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  Supplements the "ForensicReports" setting by generating reports for ##  Supplements the "ForensicReports" setting by generating reports for
Zeile 1123: Zeile 1278:
  
 ##  ForensicReportsSentBy string ##  ForensicReportsSentBy string
-##   default "USER@HOSTNAME"+##      default "USER@HOSTNAME"
 ## ##
 ##  Specifies the email address to use in the From: field of forensic ##  Specifies the email address to use in the From: field of forensic
Zeile 1132: Zeile 1287:
  
 # ForensicReportsSentBy USER@HOSTNAME # ForensicReportsSentBy USER@HOSTNAME
 +# Django : 2014-03-18
 +ForensicReportsSentBy dmarc-admin@nausch.org
  
 ##  HistoryFile path ##  HistoryFile path
-##   default (none)+##      default (none)
 ## ##
 ##  If set, specifies the location of a text file to which records are written ##  If set, specifies the location of a text file to which records are written
Zeile 1144: Zeile 1301:
 ##  aggregate reports can be extracted by a tool such as opendmarc-import(8). ##  aggregate reports can be extracted by a tool such as opendmarc-import(8).
 # #
-HistoryFile /var/run/opendmarc/opendmarc.dat/; +HistoryFile /var/run/opendmarc/opendmarc.dat 
-             s+             
  
 ##  IgnoreHosts path ##  IgnoreHosts path
-##   default (internal)+##      default (internal)
 ## ##
 ##  Specifies the path to a file that contains a list of hostnames, IP ##  Specifies the path to a file that contains a list of hostnames, IP
Zeile 1156: Zeile 1313:
 # #
 # IgnoreHosts /usr/local/etc/opendmarc/ignore.hosts # IgnoreHosts /usr/local/etc/opendmarc/ignore.hosts
 +# Django : 2014-03-19
 +IgnoreHosts /etc/opendmarc/ignore.hosts
  
 ##  IgnoreMailFrom domain[,...] ##  IgnoreMailFrom domain[,...]
-##   default (none)+##      default (none)
 ## ##
 ##  Gives a list of domain names whose mail (based on the From: domain) is to ##  Gives a list of domain names whose mail (based on the From: domain) is to
Zeile 1168: Zeile 1327:
  
 ##  MilterDebug (integer) ##  MilterDebug (integer)
-##   default 0+##      default 0
 ## ##
 ##  Sets the debug level to be requested from the milter library. ##  Sets the debug level to be requested from the milter library.
 # #
 # MilterDebug 0 # MilterDebug 0
 +# Django : 2014-04-28
 +MilterDebug 5
  
 ##  PidFile path ##  PidFile path
-##   default (none)+##      default (none)
 ## ##
 ##  Specifies the path to a file that should be created at process start ##  Specifies the path to a file that should be created at process start
Zeile 1182: Zeile 1343:
 # #
 # PidFile /var/run/opendmarc.pid # PidFile /var/run/opendmarc.pid
 +# Django : 2014-03-18
 +PidFile /var/run/opendmarc.pid
  
 ##  PublicSuffixList path ##  PublicSuffixList path
-##   default (none)+##      default (none)
 ## ##
 ##  Specifies the path to a file that contains top-level domains (TLDs) that ##  Specifies the path to a file that contains top-level domains (TLDs) that
Zeile 1195: Zeile 1358:
  
 ##  RecordAllMessages { true | false } ##  RecordAllMessages { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  If set and "HistoryFile" is in use, all received messages are recorded ##  If set and "HistoryFile" is in use, all received messages are recorded
Zeile 1205: Zeile 1368:
  
 ##  RejectFailures { true | false } ##  RejectFailures { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  If set, messages will be rejected if they fail the DMARC evaluation, or ##  If set, messages will be rejected if they fail the DMARC evaluation, or
Zeile 1214: Zeile 1377:
 # #
 # RejectFailures false # RejectFailures false
 +# Django : 2014-03-24
 +RejectFailures true
  
 ##  ReportCommand string ##  ReportCommand string
-##   default "/usr/sbin/sendmail -t"+##      default "/usr/sbin/sendmail -t"
 ## ##
 ##  Indicates the shell command to which forensic reports should be passed for ##  Indicates the shell command to which forensic reports should be passed for
Zeile 1224: Zeile 1389:
  
 ##  RequiredHeaders { true | false } ##  RequiredHeaders { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  If set, the filter will ensure the header of the message conforms to the ##  If set, the filter will ensure the header of the message conforms to the
Zeile 1235: Zeile 1400:
  
 ##  Socket socketspec ##  Socket socketspec
-##   default (none)+##      default (none)
 ## ##
 ##  Specifies the socket that should be established by the filter to receive ##  Specifies the socket that should be established by the filter to receive
Zeile 1248: Zeile 1413:
 # #
 # Socket inet:8893@localhost # Socket inet:8893@localhost
 +# Django : 2014-03-19
 +Socket inet:10012@localhost
  
 ##  SoftwareHeader { true | false } ##  SoftwareHeader { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  Causes the filter to add a "DMARC-Filter" header field indicating the ##  Causes the filter to add a "DMARC-Filter" header field indicating the
Zeile 1258: Zeile 1425:
 # #
 # SoftwareHeader false # SoftwareHeader false
 +# Django : 2014-03-18
 +SoftwareHeader true
 +
 +##  SPFIgnoreResults { true | false }
 +##      default "false"
 +##
 +##  Causes the filter to ignore any SPF results in the header of the
 +##  message.  This is useful if you want the filter to perfrom SPF checks
 +##  itself, or because you don't trust the arriving header.
 +#
 +# SPFIgnoreResults false
 +
 +##  SPFSelfValidate { true | false }
 +##      default false
 +##
 +##  Causes the filter to perform a fallback SPF check itself when
 +##  it can find no SPF results in the message header.  If SPFIgnoreResults
 +##  is also set, it never looks for SPF results in headers and
 +##  always performs the SPF check itself when this is set.
 +#
 +# SPFSelfValidate false
 +# Django : 2014-04-28
 +SPFSelfValidate true
  
 ##  Syslog { true | false } ##  Syslog { true | false }
-##   default "false"+##      default "false"
 ## ##
 ##  Log via calls to syslog(3) any interesting activity. ##  Log via calls to syslog(3) any interesting activity.
 # #
 # Syslog false # Syslog false
 +# Django : 2014-03-18
 +Syslog true
  
 ##  SyslogFacility facility-name ##  SyslogFacility facility-name
-##   default "mail"+##      default "mail"
 ## ##
 ##  Log via calls to syslog(3) using the named facility.  The facility names ##  Log via calls to syslog(3) using the named facility.  The facility names
Zeile 1275: Zeile 1467:
  
 ##  TemporaryDirectory path ##  TemporaryDirectory path
-##   default /var/tmp+##      default /var/tmp
 ## ##
 ##  Specifies the directory in which temporary files should be written. ##  Specifies the directory in which temporary files should be written.
Zeile 1282: Zeile 1474:
  
 ##  TrustedAuthservIDs string ##  TrustedAuthservIDs string
-##   default HOSTNAME+##      default HOSTNAME
 ## ##
 ##  Specifies one or more "authserv-id" values to trust as relaying true ##  Specifies one or more "authserv-id" values to trust as relaying true
Zeile 1294: Zeile 1486:
  
 ##  UMask mask ##  UMask mask
-##   default (none)+##      default (none)
 ## ##
 ##  Requests a specific permissions mask to be used for file creation.  This ##  Requests a specific permissions mask to be used for file creation.  This
Zeile 1304: Zeile 1496:
 # #
 # UMask 077 # UMask 077
 +# Django : 2014-03-23
 +UMask 007
  
 ##  UserID user[:group] ##  UserID user[:group]
-##   default (none)+##      default (none)
 ## ##
 ##  Attempts to become the specified userid before starting operations. ##  Attempts to become the specified userid before starting operations.
Zeile 1313: Zeile 1507:
 # #
 # UserID opendmarc # UserID opendmarc
 +# Django : 2014-03-23
 +UserID opendmarc:dmarc
 </file> </file>
  
Zeile 1321: Zeile 1517:
 amavis.dmz.nausch.org amavis.dmz.nausch.org
 </file> </file>
 +Besonderen Augenmerk legen wir dabei auf folgende Parameter:
 +  * **AuthservID** Hier setzen wir den Namen unseres Mailservers.
 +  * **HistoryFile** Name und Pfad, in dem OpenDMARC die Statistikdaten ablegen wird.
 +  * **PidFile** Name und Pfad, in dem der Daemon sein PID-File ablegen soll.
 +  * **Socket** Über diesen Socket wird später unser Postfix-Mailserver den OpenDMARC-Daemon ansprechen.
 +  * **UserID** UserID und GroupID, die der Daemon beim Anlegen der Dateien //**HistoryFile**// und //**PidFile**// nutzen soll. So können wir später einfacher die Daten von den einzelnen MX-Hosts abholen:
  
 +Alle anderen Parameter definieren wir noch entsprechen der Gegebenheiten unserer Installation/Infrastruktur.
 +Einen kompakten Überblick über die gewählten Optionen fragen wir einfach mit folgendem Aufruf ab.
 +   # egrep -v '(^#|^$)' /etc/opendmarc.conf
 +
 +<code>AuthservID mx01.nausch.org
 +AuthservIDWithJobID true
 +ForensicReports true
 +ForensicReportsBcc postmaster@nausch.org
 +ForensicReportsOnNone true
 +ForensicReportsSentBy dmarc-admin@nausch.org
 +HistoryFile /var/run/opendmarc/opendmarc.dat
 +IgnoreHosts /etc/opendmarc/ignore.hosts
 +PidFile /var/run/opendmarc.pid
 +Socket inet:10012@localhost
 +SoftwareHeader true
 +Syslog true
 +UserID opendmarc:dmarc
 +</code>
 +
 +=== /etc/opendmarc/ignore.hosts ===
 +In der Datei **ignore.hosts** definieren wir die Hostnamen, oder IP-Adressen, die von der DMARC-Überprüfung und Bewertung ausgenommen werden sollen.
 +   # vim /etc/opendmarc/ignore.hosts
 +<file bash /etc/opendmarc/ignore.hosts># Django : 2013-03-20
 +# folgende Hosts sollen von der DMARC-Überprüfung und Bewertung ausgenommen werden.
 +localhost
 +amavis.dmz.nausch.org
 +</file>
 ==== mysql Konfiguration ==== ==== mysql Konfiguration ====
-<code>mysql> CREATE DATABASE opendmarc;+Eigentlich könnten wir nun schon unseren DMARC-Daemon starten. Jedoch wollen wir noch kurz die nötige mySQL-Datenbank anlegen, damit der Daemon die gewünschten aufbereiteten Statiskdaten und forensischen Berichte generieren und dann per eMail verschicken kann. 
 + 
 +Wir melden uns also als berechtigter Datenbankuser an der mySQL-Datenbank an.  
 +   # mysql -h localhost -u root -p 
 + 
 +<code>Enter password:  
 +Welcome to the MySQL monitor.  Commands end with ; or \g. 
 +Your MySQL connection id is 1942 
 +Server version: 5.1.67 Source distribution 
 + 
 +Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved. 
 + 
 +Oracle is a registered trademark of Oracle Corporation and/or its 
 +affiliates. Other names may be trademarks of their respective 
 +owners. 
 + 
 +Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
 + 
 +mysql> 
 +</code> 
 +Dort legen wir als aller erst einmal eine Datenbank mit dem Namen **opendmarc** an.  
 +   mysql> CREATE DATABASE opendmarc; 
 + 
 +Anschließend legen wir uns dann einen Datenbankuser an, dem wir entsprechende Rechte an der Datenbank **opendmarc** einräumen.  
 +   mysql> CREATE USER 'opendmarc_user'@'10.0.0.80' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT'; 
 + 
 +  Query OK, 0 rows affected (0.00 sec) 
 + 
 +   mysql> CREATE USER 'opendmarc_user'@'vml000080.dmz.nausch.org' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT'; 
 + 
 +  Query OK, 0 rows affected (0.00 sec) 
 + 
 +Anschließend setzen wir noch die Nutzerberechtigungen unseres Datenbanknutzers **opendmarc_user** für die Datenbank **opendmarc** 
 +   mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO 'opendmarc_user'@'10.0.0.80' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; 
 + 
 +  Query OK, 0 rows affected (0.00 sec)
  
-mysql> CREATE USER 'opendmarc_user'@'10.0.0.80' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT';+  mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO 'opendmarc_user'@'vml000080.dmz.nausch.org' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
  
-mysql> CREATE USER 'opendmarc_user'@'vml000080.dmz.nausch.org' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT';+  Query OK, 0 rows affected (0.00 sec)
  
-mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO 'opendmarc_user'@'10.0.0.80' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;+Zur Aktivierung weisen wir nun noch die Berechtigungen zu:  
 +  mysql> FLUSH PRIVILEGES;
  
-mysql> GRANT ALL PRIVILEGES ON opendmarc.* TO 'opendmarc_user'@'vml000080.dmz.nausch.org' IDENTIFIED BY 'ALLHs6blVwd8eHoSk2J3WZsT' WITH GRANT OPTION MAX_QUERIES_PER_HOUR MAX_CONNECTIONS_PER_HOUR MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;+  Query OK, rows affected (0.00 sec)
  
-mysql> FLUSH PRIVILEGES;+Abschließend melden wir uns wieder von unserem Datenbankhost ab.  
 +  mysql> quit
  
 +  Bye
  
 +Bevor wir die benötigten Tabellen anlegen, testen wir noch, ob der Zugriff von unserem Mail- bzw. Datenimportserver funktioniert.
 +   # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p
  
-[root@vml000080 ~]# mysql -h vml000030.dmz.nausch.org -D opendmarc -u opendmarc_user -p +<code>Enter password: 
-Enter password: +
 Welcome to the MySQL monitor.  Commands end with ; or \g. Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 2889 Your MySQL connection id is 2889
Zeile 1351: Zeile 1619:
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
-mysql> show databases; +mysql> 
-+--------------------++</code> 
 +   mysql> show databases; 
 +<code>+--------------------+
 | Database           | | Database           |
 +--------------------+ +--------------------+
Zeile 1359: Zeile 1629:
 +--------------------+ +--------------------+
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
 +</code>
 +   mysql> quit
  
-mysql> quit +  Bye
-Bye+
  
 +Mit Hilfe der Datei //**/usr/share/doc/opendmarc-1.2.0/schema.mysql**// legen wir nun abschließend die Tabellen in der Datenbank **opendmarc** an.
 +   # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p < /usr/share/doc/opendmarc-1.2.0/schema.mysql
  
-# mysql -h vml000030.dmz.nausch.org -D opendmarc -u opendmarc_user -p < /usr/share/doc/opendmarc-1.2.0/schema.mysql +Auch hier können wir uns bei Bedarf noch überprüfen, welche Tabellen angelegt wurden. 
-Enter password: +   # mysql -h mysql.dmz.nausch.org -D opendmarc -u opendmarc_user -p
  
-# mysql -h vml000030.dmz.nausch.org -D opendmarc -u opendmarc_user -pEnter password: +<code>Enter password: 
 Reading table information for completion of table and column names Reading table information for completion of table and column names
 You can turn off this feature to get a quicker startup with -A You can turn off this feature to get a quicker startup with -A
Zeile 1383: Zeile 1656:
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
-mysql> show databases; +mysql> 
-+--------------------++</code> 
 +   mysql> show databases; 
 + 
 +<code>+--------------------+
 | Database           | | Database           |
 +--------------------+ +--------------------+
Zeile 1392: Zeile 1668:
 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)
  
-mysql> use opendmarc; +mysql> 
-Database changed +</code> 
-mysql> show tables; +   mysql> use opendmarc; 
-+---------------------++ 
 +  Database changed 
 +  mysql> 
 + 
 +   mysql> show tables; 
 +<code>+---------------------+
 | Tables_in_opendmarc | | Tables_in_opendmarc |
 +---------------------+ +---------------------+
Zeile 1407: Zeile 1688:
 6 rows in set (0.00 sec) 6 rows in set (0.00 sec)
  
-mysql> quit +mysql>
-Bye +
 </code> </code>
-===== Programmstart =====+   mysql> quit
  
-   # service opendmarc start+  Bye
  
-  Mar 19 00:02:17 vml000080 opendmarc[13533]: OpenDMARC Filter v1.2.0 starting (args: -c /etc/opendmarc.conf -P /var/run/opendmarc/opendmarc.pid) +==== dbCollecting User einrichten ==== 
-  Mar 19 00:02:17 vml000080 opendmarc[13533]: trusted authentication services: mx01.nausch.org+Nicht immer möchte oder kann man von seinem oder seinen Mailservern eine Verbindung zum Datenbankhost ermöglichenUm jetzt nicht von jedem einzelnen MX-Server einzurichten, verwenden wir einen User, den wir zum Einsammeln der Daten degradieren.
  
 +Wir legen uns nun unseren Nutzer an. Als UID und GID verwenden wir eine entsprechend freie Nummer, die wir entsprechend vorher abprüfen.
 +   # grep 487 /etc/group
  
 +   # grep 487 /etc/passwd
 +
 +Anschließend legen wir uns unseren User an.
 +   # groupadd -g 489 dmarc && useradd dmarc -c "DMARC" -g 489 -u 489 -m
 +
 +Anschließend erzeugen wir uns noch einen entsprechenden SSH-Key und verteilen diesen auf unseren Mailservern. Entsprechende Schritte sind im Wiki [[https://dokuwiki.nausch.org/doku.php/centos:ssh-install|hier]] beschrieben.
 +
 +==== dbCollecting Script anlegen ====
 +Zum Einsammeln der Statistikdaten legen wir uns nun ein einfaches Shellscript an.
 +   # vim /usr/local/bin/dmarc-report>
 +<file bash /usr/local/bin/dmarc-report>#!/bin/sh 
 +# Script zum Importieren der DMARC-Daten aus dem lokalen cache-Datei in die mySQL Datenbank
 +# und Generieren der DMARC-reports 
 +# Das Script wird um 03:33 Uhr via cronjob aufgerufen.
 +#
 +# crontab
 +# einmal in der Nacht die DMARC-Statistikdaten abholen und die mySQL-Datenbank damit befüllen.
 +# 33 3 * * * /usr/local/bin/dmarc-report 1>/dev/null 2>&1
 +#
 +# Django : 2014-03-20 
 +
 +WORKDIR="/home/dmarc/"
 +WORKFILE="opendmarc_all_hosts.dat"
 +SSHKEYFILE=".ssh/id_rsa"
 +MXHOSTS="mx01.nausch.org mx02.nausch.org mx03.nausch.org"
 +DBFILE="opendmarc.dat"
 +DBHOST="mysql.dmz.nausch.org"
 +DBPORT="3306"
 +DBUSER="opendmarc_user"
 +DBPASSWD="ALLHs6blVwd8eHoSk2J3WZsT"
 +DBNAME="opendmarc"
 +
 +# DMARC Datenfile von den Mailservern abholen
 +cd $WORKDIR
 +for HOST in $MXHOSTS; do
 +    scp -i $WORKDIR$SSHKEYFILE dmarc@${HOST}:/var/run/opendmarc/$DBFILE ${HOST}.dat
 +    ssh -i $WORKDIR$SSHKEYFILE dmarc@${HOST} "/bin/cat /dev/null > /var/run/opendmarc/$DBFILE"
 +    cat ${HOST}.dat >> $WORKFILE
 +done
 +
 +# DMARC Daten in die mySQL-Datenbank opendmarc schreiben
 +/usr/sbin/opendmarc-import --dbhost=$DBHOST --dbport=$DBPORT --dbname=$DBNAME --dbuser=$DBUSER \
 +  --dbpasswd=$DBPASSWD < $WORKDIR$WORKFILE 
 +
 +# DMARC Statistik-Report erstellen
 +/usr/sbin/opendmarc-reports --dbhost=$DBHOST --dbport=$DBPORT --dbname=$DBNAME --dbuser=$DBUSER \
 +  --dbpasswd=$DBPASSWD --verbose --interval=86400 --report-email 'postmaster@nausch.org' --report-org 'nausch.org'
 +
 +# DMARC Datenbank aufräumen, Datensätze die älter als 90 Tage sind werden gelöscht
 +/usr/sbin/opendmarc-expire --dbhost=$DBHOST --dbport=$DBPORT --dbname=$DBNAME --dbuser=$DBUSER \
 +  --dbpasswd=$DBPASSWD --verbose --expire=90 
 +
 +# Work-Verzeichnis wieder aufräumen
 +cd $WORKDIR
 +rm $WORKDIR*.dat -rf
 +</file>
 +Anschließen setzen wir die Ausführungsrechte unseres neuen Scriptes.
 +   # chmod +x /usr/local/bin/dmarc-report
 +
 +Zu guter Letzt aktivieren wir dann noch einen Cronjob für die tägliche Ausführung.
 +   # vim /etc/crontab
 +<file bash /etc/crontab>...
 +
 +# Django : 2014-03-20
 +# einmal in der Nacht die DMARC-Statistikdaten abholen und die mySQL-Datenbank damit befüllen.
 +33 3 * * * /usr/local/bin/dmarc-report 1>/dev/null 2>&1
 +
 +...
 +</file>
 +
 +==== Postfix ====
 +Die Konfiguration auf Seiten unseres Postfix-Mailserver gestaltet sich relativ einfach, muss doch nur ein zusätzlicher [[http://www.postfix.org/postconf.5.html#smtpd_milters|Mailfilter]] angelegt werden. Hier geben wir dann den Port an, den wir bei der Konfiguration von [[centos:mail_c6:mta_13#opendmarc_konfiguration|OpenDMARC]] definiert haben.
 +   # vim /etc/postfix/main.cf
 +
 +<file bash /etc/postfix/main.cf>...
 +
 +# Django : 2014-03-19
 +# SPF-Check und DKIM-Signaturüberprüfung via SMF-SPF- und DKIM-Milter einbinden.
 +smtpd_milters =
 +# SMF-SPF-Milter   : 
 +   inet:127.0.0.1:10010,
 +# DKIM-Milter: 
 +   inet:127.0.0.1:10011,
 +# DMARC-Milter   : 
 +   inet:127.0.0.1:10012
 +
 +...
 +</file>
 +
 +===== erster manueller Programmstart =====
 +Nun ist es an der Zeit unseren DMARC-Daemon das erste mal zu starten.
 +   # service opendmarc start
 +Im /var/log/maillog wird der erfolgreiche Start ausreichend dokumentiert: 
 +  Apr 28 19:32:24 vml000080 opendmarc[28728]: OpenDMARC Filter: Opening listen socket on conn inet:10012@localhost
 +  Apr 28 19:32:24 vml000080 opendmarc[28729]: OpenDMARC Filter v1.3.0 starting (args: -c /etc/opendmarc.conf -P /var/run/opendmarc/opendmarc.pid)
 +  Apr 28 19:32:24 vml000080 opendmarc[28729]: trusted authentication services: mx01.nausch.org
 +
 +
 +Über den Port 10012 sollte nun unser daemon ansprechbar sein. Was wir auch sehr einfach mittels **lsof** überprüfen können:
    # lsof -i :10003    # lsof -i :10003
  
Zeile 1424: Zeile 1804:
   opendmarc 13533 root    3u  IPv4 115489      0t0  TCP localhost:documentum_s (LISTEN)   opendmarc 13533 root    3u  IPv4 115489      0t0  TCP localhost:documentum_s (LISTEN)
  
 +Auch mit Hilfe von **netstat** können wir abfragen, ob der Port **1003** in Verwendung ist.
 +   # netstat -tulpen | grep 10012
  
-   netstat -tulpen | grep 10003+  tcp        0      0 127.0.0.1:10012             0.0.0.0:                  LISTEN      0          115489     13533/opendmarc      
 + 
 +Anschließend können wir nun auch unseren Postfix-Mailserver durchstarten, damit die Änderungen an seiner [[centos:mail_c6:mta_13#postfix|Konfiguration]] auch wirksam wird. 
 + 
 +===== automatisches Starten des Dienste beim Systemstart =====  
 +Damit nun unser DMARC-Daemon beim Booten unseres Servers automatisch gestartet wird, nehmen wir noch folgende Konfigurationsschritte vor. 
 +   # chkconfig opendmarc on 
 + 
 +Anschließend überprüfen wir noch unsere Änderung: 
 +   # chkconfig --list | grep opendmarc 
 + 
 +  opendmarc       0:Aus   1:Aus   2:Ein   3:Ein   4:Ein   5:Ein   6:Aus
  
-  tcp        0      0 127.0.0.1:10003             0.0.0.0:                  LISTEN      0          115489     13533/opendmarc      
  
 ===== Logging / Mailheader ===== ===== Logging / Mailheader =====
 +Im Maillog werden entsprechend unserer zuvor festgelegten Konfiguration, vom DMARC-Daemon logeinträge erzeugt.
 +Folgender Logeintrag zeigt einen erfolgreiche DMARC-Überprüfung.
 +  Mar 23 22:46:01 vml000080 opendmarc[25914]: C198981: gmail.com pass
  
-  DMARC-Filter: OpenDMARC Filter v1.2.0 mx01.nausch.org D9B6D83 +Im Mailheader der Nachricht, wird dies auch entsprechend vermerkt. 
-  Authentication-Results: mx01.nausch.org/D9B6D83; dmarc=none header.from=piratenpartei-bayern.de+  DMARC-Filter: OpenDMARC Filter v1.2.0 mx01.nausch.org C198981 
 +  Authentication-Results: mx01.nausch.org/C198981; dmarc=pass header.from=gmail.com
  
 +Hat der Domainbetreiber keinen DMARC-Eintrag im DNS hinterlegt, sieht die betreffende Zeile im Maillog entsprechend so aus.
 +  Mar 19 00:22:36 vml000080 opendmarc[14508]: D9B6D83: piratenpartei-bayern.de none
  
 +Auch dies wird im Mailheader entsprechend vermerkt.
 +  DMARC-Filter: OpenDMARC Filter v1.2.0 mx01.nausch.org D9B6D83
 +  Authentication-Results: mx01.nausch.org/D9B6D83; dmarc=none header.from=piratenpartei-bayern.de
  
  • centos/mail_c6/mta_13.1395393256.txt.gz
  • Zuletzt geändert: 21.03.2014 09:14.
  • von django