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_9 [06.03.2014 18:46. ] – [DKIM Information:] djangocentos:mail_c6:mta_9 [22.07.2019 15:06. ] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 ====== DKIM - Domain Key Identified Mail ====== ====== DKIM - Domain Key Identified Mail ======
-{{:centos:mailserver:email_key.png?96 |DKIM Logo}} Zur Sicherstellung der Authentizität von E-Mail-Absendern wurde in 2004 von Yahoo ein Identifikationsprotokoll entwickelt, mit welchem die Authentizität von E-Mail-Absendern sichergestellt werden kann. Dies wurde vor allem mit dem Wunsch zur Eindämmung unerwünschter eMail wie Phishing und/oder Spam konzipiert. +{{:centos:mail_c6:dkim-logo.png?nolink |DKIM Logo}} Zur Sicherstellung der Authentizität von E-Mail-Absendern wurde in 2004 von Yahoo ein Identifikationsprotokoll entwickelt, mit welchem die Authentizität von E-Mail-Absendern sichergestellt werden kann. Dies wurde vor allem mit dem Wunsch zur Eindämmung unerwünschter eMail wie Phishing und/oder Spam konzipiert. 
-Ursprünglich wurde DomainKeys unter dem Titel //Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys)// im [[http://www.ietf.org/rfc/rfc4870.txt|RFC 4870]] veröffentlicht. Im [[http://www.ietf.org/rfc/rfc4871.txt|RFC 4871]] wurde dies unter dem Titel //DomainKeys Identified Mail (DKIM) Signatures// weitergeführt.+Ursprünglich wurde DomainKeys unter dem Titel //Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys)// im [[http://www.ietf.org/rfc/rfc4870.txt|RFC 4870]] veröffentlicht. Im [[http://www.ietf.org/rfc/rfc4871.txt|RFC 4871]] wurde dies unter dem Titel //DomainKeys Identified Mail (DKIM) Signatures// über- und in der aktuellen Version [[http://www.ietf.org/rfc/rfc6376.txt|RFC 6376]] weitergeführt.
  
-[[http://www.dkim.org/|DKIM]] basiert auf asymmetrischer Verschlüsselung, bei der eMails mit zwei Signaturen versehen werden, die erste über ein paar Header-Zeilen der Nachricht und die zweite über den Mail-Body, also dem Inhalt einer eMail. Die zugehörigen Prüfsummen werden in standardisierten DKIM-Signature-Headern in der eMail eingetragen.+[[http://www.dkim.org/|DKIM]] basiert auf asymmetrischer Verschlüsselung, bei der eMails mit zwei Signaturen versehen werden, die erste über ein paar Header-Zeilen der Nachricht und die zweite über den Mail-Body, also dem Inhalt einer eMail. Die zugehörigen Prüfsummen werden in standardisierten DKIM-Signature-Headern in der eMail eingetragen. Weitere Informationen hierzu findet man im [[http://tools.ietf.org/html/rfc4871#section-3.5| RFC 4871]] oder in der [[http://dkim.org/specs/rfc4871-dkimbase.html#choosing-header-fields|Dokumentation]] von [[http://dkim.org|DKIM.org]].
  
 Der empfangende Mail-Server ist nun in der Lage, an Hand des öffentlichen Schlüssels diese Daten, der im TXT-Record des Domain Name System (DNS) der Domäne abrufbar ist, die Daten zu verifizieren. Ist diese Signatur gültig, ist der Absendeserver der eMail zweifelsfrei festgestellt. Bei einem negativen Ergebnis hat nun der empfangende MTA((**M**ail **T**ransfer **A**gent)) die Möglichkeit, die Annahme der eMail zu verweigern bzw. die empfangene Nachricht auszusortieren. Wie bereits erwähnt ist dies möglich, da der sendende MTA jede versendete E-Mail im sogenannten „DomainKey-Signature-Header“ mit einer digitalen Signatur des Inhaltes der E-Mail versieht. Der empfangende Mail-Server ist nun in der Lage, an Hand des öffentlichen Schlüssels diese Daten, der im TXT-Record des Domain Name System (DNS) der Domäne abrufbar ist, die Daten zu verifizieren. Ist diese Signatur gültig, ist der Absendeserver der eMail zweifelsfrei festgestellt. Bei einem negativen Ergebnis hat nun der empfangende MTA((**M**ail **T**ransfer **A**gent)) die Möglichkeit, die Annahme der eMail zu verweigern bzw. die empfangene Nachricht auszusortieren. Wie bereits erwähnt ist dies möglich, da der sendende MTA jede versendete E-Mail im sogenannten „DomainKey-Signature-Header“ mit einer digitalen Signatur des Inhaltes der E-Mail versieht.
 +Der Domaininhaber (Sender) kann mit Hilfe von **ADSP**((**A**uthor **D**omain **S**igning **P**ractices)) festlegen, was der Empfänger beim Eingang einer eMail tun soll, sofern die DKIM-Signatur gebrochen wurde. Diese Policy wird, wie der öffentliche DKIM-Schlüssel auch, über den DNS publiziert. Weitere Informationen hierzu findet man im [[http://tools.ietf.org/html/rfc5617#section-4.2.1|RFC 4871]] 
  
 ===== Installation von AMaVIS ===== ===== Installation von AMaVIS =====
Zeile 16: Zeile 17:
  
 ==== Überprüfung der DKIM-Signaturen ==== ==== Überprüfung der DKIM-Signaturen ====
 +
 +<WRAP round tip> \\ **WICHTIG:** Möchte man später **[[centos:mail_c6:mta_13|DMARC]]**((**D**omain-based **M**essage **A**uthentication, **R**eporting & **C**onformance)), bei der Bewertung von **[[centos:mail_c6:mta_10|SPF]] __und__ [[centos:mail_c6:mta_9|DKIM]]** einsetzen, einsetzen, so greift man zum Überprüfen der DKIM-Signaturen unserer Nachrichten auf das Paket **[[http://www.opendkim.org/|OpenDKIM]]**, einem MILTER((**M**ail**F**ILTER)) zurück! 
 +
 +Hintergrund ist, dass die einzelnen Header (SPF und DKIM) nur dann dem DMARC-Milter zur Verfügung stehen, wenn diese als MILTER eingebunden wurden. Einen Mix aus MILTER und AMaViS als smtpd_proxy_filter in Postfix wird hier unweigerlich Fehlschlagen, da es ein Problem ist, wenn die Header dann an unterschiedlichen Zeitpunkten bei der eMailverarbeitung eingefügt werden und so für den nächsten Verarbeitungsschritt nicht *sichtbar* sind.
 +
 +Wollen wir also später **DMARC** bei der Mailverarbeitung einsetzen, übersprigen wir die nachfolgende Konfiguration für die Signaturprüpfung durch AMaViS und setzen dafür dann **OpenDKIM** ein. Die Installation und Konfiguration von **OpenDKIM** ist in dem Absatz [[centos:mail_c6:mta_9#besonderheit_-_dmarc|hier]] beschrieben.
 +
 +</WRAP>
 +
 +
 Damit unsere AMaViS-installation die Überprüfung von DKIM-Signaturen im Mailheader vornimmt bedarf es keiner großen Konfiguration. Wie in der [[http://www.ijs.si/software/amavisd/amavisd-new-docs.html#dkim-am-verify|Originaldoku]] von Marc Martinec zu entnehmen ist, müssen wir lediglich die Variable **$enable_dkim_verification** setzen, in dem wir ihr den Wert **1** zuweisen. Damit unsere AMaViS-installation die Überprüfung von DKIM-Signaturen im Mailheader vornimmt bedarf es keiner großen Konfiguration. Wie in der [[http://www.ijs.si/software/amavisd/amavisd-new-docs.html#dkim-am-verify|Originaldoku]] von Marc Martinec zu entnehmen ist, müssen wir lediglich die Variable **$enable_dkim_verification** setzen, in dem wir ihr den Wert **1** zuweisen.
    # vim /etc/amavisd.conf    # vim /etc/amavisd.conf
Zeile 240: Zeile 251:
              }              }
   close(filehandle) or die "Can't close domain-list-file: $!";   close(filehandle) or die "Can't close domain-list-file: $!";
 +
 +# Django : 2014-02-07
 +#@local_domains_maps = ( [".$mydomain"] );      # list of all local domains
 +@local_domains_maps = ( read_hash("/etc/postfix/all_local_domains_map") );
 </code> </code>
 +
 +Damit **AMaViS** ausgehende eMail auch signieren kann, muss der Deamon natürlich wissen, welche Domains "//local//" sind und welche Nachrichten nach extern verschickt werden, kurz handelt es sich um einen //legitimen Sender//. Hierzu setzen wir noch den Parameter **@mynetworks**. Dieses Array definiert eine Liste von IP-Adressen bzw. Netzwerksegmente, die **AMaViS** als internen Server/Sender, also dem Mailserver zugeordnete Maschinen, betrachten soll.
 +
 +Wir tragen also in unserer Konfigurationsdatei //**/etc/amavisd.con**// die betreffenden Adressbereiche ein, sofern wir das bei der [[centos:mail_c6:spam_3|Grundkonfiguration von AMaViS]] nicht bereits erledigt haben.
 +   # vim /etc/amavisd.conf
 +
 +<file perl /etc/amavisd.conf>...
 +
 +# Django : 2012-05-21
 +# @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0::]/10
 +#                   10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 );
 +@mynetworks = qw( 127.0.0.0/8 10.0.0.0/24 10.0.10.0/26 );
 +
 +...
 +</file>
 +
 +Somit haben wir alle internen Sender hinreichend qualifiziert, was noch fehlt sind nun alle externern mobilen Klienten, die in der Regel von dynamischen IP-Adressen aus ihre Nachrichten einliefern. Diese IP-Adressen können natürlich unmöglich unserem Array **//@mynetworks//** zugeschlagen werden. In den seltensten Fällen wird die entsprechende IP-Adresse "//sauber//" sein, sondern wir bereits auf vielen Blacklist gelandet sein, bzw. der ISP hat die entsprechenden IP-Adressbereiche von sich aus an Dienste wie [[http://www.spamhaus.org|SPAMHAUS]] gemeldet haben. 
 +
 +Für diese Nutzer haben wir auf unserem Postfix-Mailserver den Submission-Port **587** eingerichtet. Das besondere an diesem Port ist die zwingende Notwendigkeit, dass sich der Sender vor dem Einliefern zwingend mit SMTP-Authentifizierung identifizieren muss. Nähere Informationen hierzu findet man im [[https://tools.ietf.org/html/rfc4409|RFC 4409]]. Wir können also einem erfolgreich authentifizierten Klient eine ähnliche Vertrauensstellung gewähren, wie einem Sender aus dem eigenen Netzwerk!
 +
 +Haben wir die Einrichtung des Submission-Ports auf Seiten unseres Postfix-Servers noch nicht vorgenommen, holen wir diesen wichtigen Schritt nun nach. Hierzu aktivieren wir die bereits vorgefertigte Konfig in der **master.cf** und passen diese noch entsprechend an.
 +   # vim /etc/postfix/master.cf
 +<file bash /etc/postfix/master.cf>...
 +
 +# Django : 2013-02-15
 +# # Submission auf Port 587 geöffnet
 +submission inet n                               smtpd
 +          -o smtpd_tls_security_level=encrypt
 +          -o smtpd_sasl_auth_enable=yes
 +          -o mydestination=lists.nausch.org,fax.nausch.org
 +          -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 +          -o smtpd_etrn_restrictions=reject
 +          -o smtpd_proxy_filter=amavis.dmz.nausch.org:10026
 +          -o milter_macro_daemon_name=ORIGINATING
 +
 +# Django : 2013-02-15
 +# HTPPS auf Port 465 geöffnet
 +smtps     inet  n                               smtpd
 +          -o smtpd_tls_security_level=encrypt
 +          -o smtpd_tls_wrappermode=yes
 +          -o smtpd_sasl_auth_enable=yes
 +          -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 +          -o smtpd_etrn_restrictions=reject
 +          -o smtpd_proxy_filter=amavis.dmz.nausch.org:10026
 +          -o milter_macro_daemon_name=ORIGINATING
 +...
 +</file>
 +
 +Anschließend starten wir unseren Postfix-Mailserver einmal durch.
 +   # service postfix condrestart
 +
 +  Shutting down postfix:                                      OK  ]
 +  Starting postfix:                                          [  OK  ]
 +
 +Nun müssen wir unserem **AMaViS**-Daemon noch so konfigurieren, dass dieser auch auf dem Port **10026** lauscht und die Nachrichten die auf diesem port eingehen einer spezielen **policy_bank** zuordnet. Dies ist nicht sonderlich aufwändig, da in der //**etc/amavisd.conf**// für die **policy-bank** **__ORIGINATING__** fast alles schon vorbereitet ist.
 +   # vim /etc/amavisd.conf
 +
 +<file perl /etc/amavisd.conf>...
 +
 +# Django : 2014-02-10
 +# default: $inet_socket_port = 10024;
 +#$inet_socket_port = 10024;   # listen on this local TCP port(s)
 +$inet_socket_port = [10024,10026];  # listen on multiple TCP ports
 +
 +...
 +
 +# it is up to MTA to re-route mail from authenticated roaming users or
 +# from internal hosts to a dedicated TCP port (such as 10026) for filtering
 +$interface_policy{'10026'} = 'ORIGINATING';
 +
 +$policy_bank{'ORIGINATING'} = {  # mail supposedly originating from our users
 +  originating => 1,  # declare that mail was submitted by our smtp client
 +  allow_disclaimers => 1,  # enables disclaimer insertion if available
 +  # notify administrator of locally originating malware
 +  virus_admin_maps => ["virusalert\@$mydomain"],
 +  spam_admin_maps  => ["virusalert\@$mydomain"],
 +  warnbadhsender   => 1,
 +  # forward to a smtpd service providing DKIM signing service
 +  #forward_method => 'smtp:[127.0.0.1]:10027',
 +  # force MTA conversion to 7-bit (e.g. before DKIM signing)
 +  smtpd_discard_ehlo_keywords => ['8BITMIME'],
 +  bypass_banned_checks_maps => [1],  # allow sending any file names and types
 +  terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
 +};
 +
 +...
 +</file>
  
 Damit AMaVis nun Kenntnis von unseren Änderungen erfährt, starten wir diesen einmal durch. Damit AMaVis nun Kenntnis von unseren Änderungen erfährt, starten wir diesen einmal durch.
Zeile 340: Zeile 442:
   "NJSH5NJuS7GuzplNg+f20ysCAwEAAQ==")   "NJSH5NJuS7GuzplNg+f20ysCAwEAAQ==")
 </code> </code>
 +===== ADSP =====
 +Eingangs wurde bereits schon erwähnt, dass der Domaininhaber und Absender die Möglichkeit hat, dem Empfänger weitere Informationen zur DKIM-Signatur-Policy mitzugeben. 
 +Die Publizierung erfolgt wir der öffentliche DKIM-Schlüssel auch schon über den DNS. Beim unserer Installation **nausch.org** wird der Name **<selector>**._domainkey.nausch.org benutzt, wobei der Domaininhaber den **<selector>** nutzt, den aktuellen Schlüssel an Hand eines eindeutigen Datums zu qualifizieren. Im aktuellen Beispiel lautet dieser:
 +**140224._domainkey.nausch.org**
 +
 +Für **ADSP** wird der eigene Qualifier **_adsp** verwendet, somit wird lautet der Name für unsere Doamin **nausch.org**:
 +**_adsp._domainkey.nausch.org**
 +
 +Der (TXT)-Datensatz hat dabei folgende Struktur "//dkim=**<WERT>**//". Über den **<WERT>** kann der Domaininhaber folgendes festlegen:
 +  * **unknown** Der Domaininhaber signiert einige oder alle Nachrichten. 
 +  * **all** Alle Nachrichten der Mail-Domäne werden mit einer DKIM-Signatur versehen.
 +  * **discardable** Alle Nachrichten der Mail-Domäne werden mit einer DKIM-Signatur versehen. Darüber hinaus empfiehlt der Domain-Inhaber alle Nachrichten deren DKIM-Signatur gebrochen wurde, bei der die Nachricht also manipuliert wurde, zu Verwerfen (REJECT).
 +Wurde nichts definiert oder ein anderer Wert als die oben angegeben wurde, wird der Wert **unknown** gesetzt.
 +Somit ergibt sich in unserem Anwendungsbeispiel, bei dem der Domaininhaber von **sec-mail.guru** selbst alle Nachrichten signiert und dem Empfänger bittet, Nachrichten mit schadhafter DKIM-Signatur zu rejecten, folgender TXT-Record: 
 +  _adsp._domainkey.sec-mail.guru.          IN TXT  "dkim=discardable;"
 +Diesen Record veröffentlichen wir nun über unseren DNS.
  
 ===== Tests ===== ===== Tests =====
Zeile 389: Zeile 507:
  
 Zur Aktivierung der DKIM-Signaturfunktion starten wir den AMaViS-Dämon 1x durch. Zur Aktivierung der DKIM-Signaturfunktion starten wir den AMaViS-Dämon 1x durch.
-   # service amavisd condrestart+   # service amavisd condrestart
  
   Shutting down Mail Virus Scanner (amavisd):                [  OK  ]   Shutting down Mail Virus Scanner (amavisd):                [  OK  ]
Zeile 427: Zeile 545:
 Die angegebene temporäre eMailadresse kopieren wir uns und schicken an diese eine Testnachricht. Die angegebene temporäre eMailadresse kopieren wir uns und schicken an diese eine Testnachricht.
  
-{{ :centos:mailserver:email-validator.png?575 |eMail Testseite}}+{{ :centos:mail_c6:email-validator.png?500 |eMail Testseite}}
  
 Über die Schaltfläche **//[View Results]//** erhalten wir dann die Prüfungsergebnisse unserer Testnachricht präsentiert.  Über die Schaltfläche **//[View Results]//** erhalten wir dann die Prüfungsergebnisse unserer Testnachricht präsentiert. 
Zeile 560: Zeile 678:
 <code>Using this information that I obtained from the headers <code>Using this information that I obtained from the headers
  
-Helo Address = mx1.nausch.org +Helo Address = mx01.nausch.org 
-From Address = michael@nausch.org +From Address = django@nausch.org 
-From IP      = 88.217.187.21+From IP      = 217.91.103.190
 SPF Record Lookup SPF Record Lookup
  
 Looking up TXT SPF record for nausch.org Looking up TXT SPF record for nausch.org
-Found the following namesevers for nausch.org: ns2.m-online.net ns1.m-online.net +Found the following namesevers for nausch.org: ns.udagdns.de ns.udagdns.net 
-Retrieved this SPF Record: v=spf1 ip4:88.217.187.21/32 a mx include:nausch.org ?all (TTL = 7200+Retrieved this SPF Record: v=spf1 ip4:217.91.103.190/32 a mx include:nausch.org ?all (TTL = 3600) 
-Result: Pass (Mechanism 'ip4:88.217.187.21' matched)+using authoritative server {ns.udagdns.de} directly for SPF Check 
 +Result: pass (Mechanism 'ip4:217.91.103.190' matched)
  
 Result code: pass Result code: pass
-Local Explanation: nausch.org: 88.217.187.21 is authorized to use 'michael@nausch.org' in 'mfrom' identity (mechanism 'ip4:88.217.187.21' matched) +Local Explanation: nausch.org: 217.91.103.190 is authorized to use 'django@nausch.org' in 'mfrom' identity (mechanism 'ip4:217.91.103.190' matched) 
-spf_header = Received-SPF: pass (nausch.org: 88.217.187.21 is authorized to use 'michael@nausch.org' in 'mfrom' identity (mechanism 'ip4:88.217.187.21' matched)) receiver=xpgrinders.com; identity=mfrom; envelope-from="michael@nausch.org"; helo=mx1.nausch.org; client-ip=88.217.187.21+spf_header = Received-SPF: pass (nausch.org: 217.91.103.190 is authorized to use 'django@nausch.org' in 'mfrom' identity (mechanism 'ip4:217.91.103.190' matched)) receiver=yen; identity=mailfrom; envelope-from="django@nausch.org"; helo=mx01.nausch.org; client-ip=217.91.103.190
 </code> </code>
  
 +=== SPAM-Scoring: ===
 +<code>SpamAssassin Score: -1.106
 +Message is NOT marked as spam
 +Points breakdown: 
 +-0.0 T_RP_MATCHES_RCVD      Envelope sender domain matches handover relay
 +                            domain
 +-0.0 SPF_PASS               SPF: sender matches SPF record
 + 0.9 FRT_TODAY2             BODY: ReplaceTags: Today (2)
 +-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%
 +                            [score: 0.0000]
 +-0.1 DKIM_VALID_AU          Message has a valid DKIM or DK signature from author's
 +                            domain
 + 0.1 DKIM_SIGNED            Message has a DKIM or DK signature, not necessarily valid
 +-0.1 DKIM_VALID             Message has at least one valid DKIM or DK signature
 +</code>
 +
 +===== Besonderheit - Mailinglisten =====
 +Wie am Anfang dieses Artikels beschrieben, basiert [[http://www.dkim.org/|DKIM]] auf asymmetrischer Verschlüsselung. Die eMails werden mit zwei Signaturen versehen, die erste über ein paar Header-Zeilen der Nachricht und die zweite über den Mail-Body, also dem Inhalt einer eMail.
 +
 +Der empfangende Mail-Server ist nun in der Lage, an Hand des öffentlichen Schlüssels, der im TXT-Record des Domain Name System (DNS) der Domäne abrufbar ist, die beiden übermittelten DKIM-Signaturen zu  zu verifizieren. Ist die Signatur ungültig, hat der empfangende MTA1) die Möglichkeit, die Annahme der eMail zu verweigern bzw. die empfangene Nachricht auszusortieren. 
 +
 +Und genau bei diesem Punkt haben wir nun bei unserem [[centos:mail_c6:start#mailinglistenserver_mit_mailman|Mailinglistenserver]] unter Umständen ein Problem, da sehr oft das Headerfeld "//Subject//" mit dem Namen der Mailingliste ergänzt. So wird aus der **Subject** "//DKIM-Headertest//" auf der [[https://listi.jpberlin.de/mailman/listinfo/postfixbuch-users|Postfixmailingliste]] ein "**//[Postfixbuch-users] DKIM-Headertest//**". Ebenso wird am Ende der verteilten eMail ein **Footer** angefügt, mit Hinweisen zur Mailingliste. Bei unserem Beispiel mit der 
 +[[https://listi.jpberlin.de/mailman/listinfo/postfixbuch-users|Postfixmailingliste]] wird folgendes eingefügt:
 +<code>-- 
 +_______________________________________________
 +Postfixbuch-users -- http://www.postfixbuch.de
 +Heinlein Professional Linux Support GmbH
 +
 +Postfixbuch-users@listen.jpberlin.de
 +https://listi.jpberlin.de/mailman/listinfo/postfixbuch-users 
 +</code>
 +Haben wir uns die Rahmenbedingungen zum **DKIM** verinnerlicht, werden wir so schnell zu dem Schluß kommen, dass die Überprüfung der DKIM-Signaturen fehlschlagen muß! Damit also die eMails unserer Kunden bei den Mailservern unserer Empfänger **nicht** mit einem Malus belegt werden, haben wir zwei Möglichkeiten:
 +  - **eMail nicht verändern**: Der Mailheader Subject darf eben so wenig verändert werden, wie der Mailbody nicht durch Anfügen eines Listenspezifischen Footers verändert werden.
 +  - **DKIM Header** entfernen: Soll der Mailheader mit dem **[LISTENNAMEN]** erweitert und ein listenzpezifischer Footer angefügt werden, dann soll unser **AMaViS** etwaige DKIM-Signaturen entfernen.
 +
 +==== eMail nicht verändern ====
 +Eine ungültige DKIM-Signatur bekommen wir immer dann, wenn der Mailheader und/oder der Mailbody, also der Nachrichtentext, nach dem Signieren von jemanden manipuliert wurde. Also werden wir nun dafür Sorge tragen, dass der Mailinglistenserver weder den Mail-Header noch den Nachrichtentext manipuliert. 
 +  * **Mailheader**: Über die Variable //**subject_prefix**// in der **Konfigurationskategorie** **[Allgemeine Optionen]** kann man den Mailinglisten Server anweisen, in der Betreffzeile eine Zeichenfolge, meist der Mailinglistenkurzmane, voranzustellen. Über die URL  **../?VARHELP=general/subject_prefix** erreichen wir diese Einstellungsmöglichkeit; im Falle der Liste **wetterstation-pliening** wäre das dann entsprechend: \\ ''https://lists.nausch.org/mailman/admin/wetterstation-pliening/?VARHELP=general/subject_prefix''. \\ Wir löschen also den Inhalt der Variable und bestätigen die Konfigurationsänderung mit einem Klick auf die Schaltfläche **[Änderungen speichern]**. Diese Konfigurationsänderung ist somit sofort aktiv! {{ :centos:mail_c6:bildschirmfoto_vom_2014-03-15_15_43_12.png?nolink&600 |Bildschirmhardcopy des Mailman Webfrontends}}
 +  
 +  * **Mailbody**: Mit Hilfe der beiden Variablen **msg_header** und **msg_footer** in der **Konfigurationskategorie** **[Non-Digest-Optionen]** kann man entweder am Anfang oder am Ende jeder Nachricht zusätzliche Hinweise einfließen lassen. So wir in aller Regel bei der Variable **msg_footer** der listenspezifische Footer mit <code>_______________________________________________
 +%(real_name)s mailing list
 +%(real_name)s@%(host_name)s
 +%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
 +</code> Über die URL  **../?VARHELP=nondigest/msg_header** bzw. **../?VARHELP=nondigest/msg_footer** erreichen wir diese Einstellungsmöglichkeit; im Falle der Liste **wetterstation-pliening** wäre das dann entsprechend: \\ ''https://lists.nausch.org/mailman/admin/wetterstation-pliening/?VARHELP=nondigest/msg_header'' \\ bzw. \\ ''https://lists.nausch.org/mailman/admin/wetterstation-pliening/?VARHELP=nondigest/msg_footer''. \\ Wir löschen also den Inhalt der Variable und bestätigen die Konfigurationsänderung mit einem Klick auf die Schaltfläche **[Änderungen speichern]**. Diese Konfigurationsänderung ist somit sofort aktiv! {{ :centos:mail_c6:bildschirmfoto_vom_2014-03-15_15_42_43.png?nolink&600 |Bildschirmhardcopy des Mailman Webfrontends}}
 +
 +  * **Default-Einstellungen**: Um nun nicht bei jeder neuen Mailingliste die oben genannten Änderungen vornehmen zu müssen, tragen wir in die Konfigurationsdatei unseres Mailinglistenservers nachfolgende Zeilen ein. <code> # vim /etc/mailman/mm_cfg.py</code> <file bash /etc/mailman/mm_cfg.py>...
 +
 +# Django : 2014-02-09
 +# Vorhandenen Mail-Header und Mail-Body nicht ergaenzen. (DKIM-Signatur bleibt valide)
 +DEFAULT_SUBJECT_PREFIX = ""
 +DEFAULT_MSG_HEADER = ""
 +DEFAULT_MSG_FOOTER = ""
 +# Django : 2013-02-21
 +# Vorhandene DKIM-Header nicht entfernen
 +REMOVE_DKIM_HEADERS = No
 +
 +...
 +</file> Zur Aktivierung unserer Änderungen starten wir den Mailinglisten-Server einmal durch. <code> # service mailman condrestart</code> <code>Shutting down mailman:                                      OK  ]
 +Starting mailman:                                          [  OK  ]
 +</code>
 +
 +Mit diesen Änderungen bleiben nunmehr die DKIM-Signaturen der eingehenden Nachrichten intakt und somit valide.
 +
 +==== DKIM-Signaturen entfernen ====
 +Möchte man auf die Listenspezifischen Detailangaben im **Subject** wie auch am Ende des **Nachrichtentextes** __nicht__ verzichten, haben wir nur noch die Option, eine etwaige DKIM-Signatur vom Mailinglistenserver entfernen zu lassen. Wir tragen hierzu in die Konfigurationsdatei unseres Mailman-Mailinglistenservers nachfolgende Zeilen ein.
 +   #  vim /etc/mailman/mm_cfg.py
 +<file bash vim /etc/mailman/mm_cfg.py>...
 +
 +# Django : 2013-02-21
 +# Vorhandene DKIM-Header entfernen
 +REMOVE_DKIM_HEADERS = Yes
 +
 +...
 +</file>
 +
 +Anschließend starten wir unseren Mailinglistenserver einmal durch.
 +   # service mailman condrestart
 +
 +  Shutting down mailman:                                      OK  ]
 +  Starting mailman:                                          [  OK  ]
 +
 +===== Besonderheit - DMARC =====
 +Möchten wir DMARC bei der Bewertung der anzunehmenden Nachrichten mit berücksichtigen, setzen wir auf das Paket **opendmarc** aus den Repository [[centos:epel6|EPEL]] ein. Dies hat gegenüber der Signaturprüfung den entscheidenden Vorteil, dass die einzelnen Milter (SPF, DKIM und DMARC) nahtlos ineinander greifen, und so die neu hinzugefügten Haeder bei der Berwertung mit Betrachtet werden können.
 +
 +Die Installation und Konfiguration von OpenDMARC ist im Kapitel [[centos:mail_c6:mta_13|DMARC - Domain-based Message Authentication, Reporting & Conformance]] beschrieben.
 +==== Installation von OpenDKIM ====
 +Die Installation gestaltet sich sehr einfach, da wir das EPEL-Paket direkt mit **yum** installieren können.
 +   # yum install opendkim
 +
 +Was bei der Installation alles an Dateien und Verzeichnisse neu im System hinzugefügt worden sind, überprüfen wir mit Hilfe von **rpm -qil <paketname>**.
 +   # rpm -qil opendkim
 +<code>Name        : opendkim                     Relocations: (not relocatable)
 +Version     : 2.6.7                             Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
 +Release     : 1.el6.rf                      Build Date: Wed 20 Mar 2013 03:16:45 PM CET
 +Install Date: Tue 25 Mar 2014 06:04:24 PM CET      Build Host: lisse.hasselt.wieers.com
 +Group       : System Environment/Daemons    Source RPM: opendkim-2.6.7-1.el6.rf.src.rpm
 +Size        : 593359                           License: BSD and Sendmail
 +Signature   : DSA/SHA1, Wed 20 Mar 2013 04:59:26 PM CET, Key ID a20e52146b8d79e6
 +Packager    : Dag Wieers <dag@wieers.com>
 +URL         : http://opendkim.org/
 +Summary     : A DomainKeys Identified Mail (DKIM) milter to sign and/or verify mail
 +Description :
 +OpenDKIM allows signing and/or verification of email through an open source
 +library that implements the DKIM service, plus a milter-based filter
 +application that can plug in to any milter-aware MTA, including sendmail,
 +Postfix, or any other MTA that supports the milter protocol.
 +/etc/opendkim
 +/etc/opendkim.conf
 +/etc/opendkim/KeyTable
 +/etc/opendkim/SigningTable
 +/etc/opendkim/TrustedHosts
 +/etc/opendkim/keys
 +/etc/rc.d/init.d/opendkim
 +/etc/sysconfig/opendkim
 +/etc/tmpfiles.d/opendkim.conf
 +/usr/bin/opendkim-genkey
 +/usr/bin/opendkim-genzone
 +/usr/bin/opendkim-reportstats
 +/usr/bin/opendkim-spam
 +/usr/bin/opendkim-stats
 +/usr/bin/opendkim-testadsp
 +/usr/bin/opendkim-testkey
 +/usr/bin/opendkim-testmsg
 +/usr/sbin/opendkim
 +/usr/share/doc/opendkim-2.6.7
 +/usr/share/doc/opendkim-2.6.7/FEATURES
 +/usr/share/doc/opendkim-2.6.7/INSTALL
 +/usr/share/doc/opendkim-2.6.7/KNOWNBUGS
 +/usr/share/doc/opendkim-2.6.7/LICENSE
 +/usr/share/doc/opendkim-2.6.7/LICENSE.Sendmail
 +/usr/share/doc/opendkim-2.6.7/README
 +/usr/share/doc/opendkim-2.6.7/README.opendkim-reportstats
 +/usr/share/doc/opendkim-2.6.7/RELEASE_NOTES
 +/usr/share/doc/opendkim-2.6.7/RELEASE_NOTES.Sendmail
 +/usr/share/doc/opendkim-2.6.7/authheaders-check-setup-hook.lua
 +/usr/share/doc/opendkim-2.6.7/convert_keylist.sh
 +/usr/share/doc/opendkim-2.6.7/final.lua.sample
 +/usr/share/doc/opendkim-2.6.7/opendkim.conf.sample
 +/usr/share/doc/opendkim-2.6.7/opendkim.conf.simple
 +/usr/share/doc/opendkim-2.6.7/opendkim.conf.simple-verify
 +/usr/share/doc/opendkim-2.6.7/screen.lua.sample
 +/usr/share/doc/opendkim-2.6.7/setup.lua.sample
 +/usr/share/man/man1/opendkim-spam.1.gz
 +/usr/share/man/man5/opendkim.conf.5.gz
 +/usr/share/man/man8/opendkim-genkey.8.gz
 +/usr/share/man/man8/opendkim-genzone.8.gz
 +/usr/share/man/man8/opendkim-stats.8.gz
 +/usr/share/man/man8/opendkim-testadsp.8.gz
 +/usr/share/man/man8/opendkim-testkey.8.gz
 +/usr/share/man/man8/opendkim-testmsg.8.gz
 +/usr/share/man/man8/opendkim.8.gz
 +/var/run/opendkim
 +/var/spool/opendkim
 +</code>
 +
 +==== Konfiguration ====
 +Die Konfiguration von OpenDKIM ist nicht sehr aufwändig, da wir lediglich das Modul **verify** benötigen. Das Signieren der eMails überlassen wir AMaViS. Die Konfiguration hierzu findet sich im Abschnitt [[centos:mail_c6:mta_9#generierung_von_dkim-signaturen|Generierung von DKIM-Signaturen]].
 +   # vim /etc/opendkim.conf
 +<file bash /etc/opendkim.conf>## BASIC OPENDKIM CONFIGURATION FILE
 +## See opendkim.conf(5) or /usr/share/doc/opendkim-2.6.7/opendkim.conf.sample for more
 +
 +## BEFORE running OpenDKIM you must:
 +
 +## - make your MTA (Postfix, Sendmail, etc.) aware of OpenDKIM
 +## - generate keys for your domain (if signing)
 +## - edit your DNS records to publish your public keys (if signing)
 +
 +## See /usr/share/doc/opendkim-2.6.7/INSTALL for detailed instructions.
 +
 +## CONFIGURATION OPTIONS
 +
 +# Specifies the path to the process ID file.
 +PidFile /var/run/opendkim/opendkim.pid
 +
 +# Selects operating modes. Valid modes are s (signer) and v (verifier). Default is v.
 +Mode v
 +
 +# Log activity to the system log.
 +Syslog yes
 +
 +# Log additional entries indicating successful signing or verification of messages.
 +SyslogSuccess yes
 +
 +# If logging is enabled, include detailed logging about why or why not a message was
 +# signed or verified. This causes an increase in the amount of log data generated
 +# for each message, so set this to No (or comment it out) if it gets too noisy.
 +LogWhy yes
 +
 +# Attempt to become the specified user before starting operations.
 +UserID opendkim:opendkim
 +
 +# Create a socket through which your MTA can communicate.
 +# Django: 2014-03-25
 +# default: Socket inet:8891@localhost
 +Socket inet:10011@127.0.0.1
 +
 +# Required to use local socket with MTAs that access the socket as a non-
 +# privileged user (e.g. Postfix)
 +Umask 002
 +
 +# This specifies a text file in which to store DKIM transaction statistics.
 +#Statistics /var/spool/opendkim/stats.dat
 +
 +## SIGNING OPTIONS
 +
 +# Selects the canonicalization method(s) to be used when signing messages.
 +Canonicalization relaxed/simple
 +
 +# Domain(s) whose mail should be signed by this filter. Mail from other domains will
 +# be verified rather than being signed. Uncomment and use your domain name.
 +# This parameter is not required if a SigningTable is in use.
 +#Domain example.com
 +
 +# Defines the name of the selector to be used when signing messages.
 +#Selector default
 +
 +# Gives the location of a private key to be used for signing ALL messages.
 +#KeyFile /etc/opendkim/keys/dkim2k.private
 +
 +# Gives the location of a file mapping key names to signing keys. In simple terms,
 +# this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
 +# setting in the configuration file. 
 +#KeyTable /etc/opendkim/KeyTable
 +
 +# Defines a table used to select one or more signatures to apply to a message based
 +# on the address found in the From: header field. In simple terms, this tells
 +# OpenDKIM how to use your keys.  
 +#SigningTable /etc/opendkim/SigningTable
 +
 +# Identifies a set of "external" hosts that may send mail through the server as one
 +# of the signing domains without credentials as such.
 +#ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
 +# Django : 2014-03-25
 +ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts
 +
 +# Identifies a set internal hosts whose mail should be signed rather than verified.
 +#InternalHosts refile:/etc/opendkim/TrustedHosts
 +</file>
 +# vim /etc/opendkim.conf
 +Wie schon auch bei der [[centos:mail_c6:mta_10?&#konfiguration|Konfiguration vom SPF-Milter]] definieren wir hier einen Port, an dem der Postfix-Daemon später den DKIM-Milter erreichen wird.
 +
 +In der Konfigurationsdatei **main.cf** unseres Postfix-Mailserver tragen wir nun noch am Ende nachfolgende Zeilen ein.
 +   # vim /etc/postfix/main.cf
 +<file bash /etc/postfix/main.cf>...
 +
 +# Django : 2014-03-16
 +# 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
 +...
 +</file>
 +==== Programmstart ====
 +=== erster manueller Start ===
 +Nun können wir das erste mal den Daemon anstarten.
 +   # service opendkim start
 +
 +  Starting OpenDKIM Milter:                                  [  OK  ]
 +
 +In der Prozessliste finden wir nun unseren Prozess opendkim, der mit den Rechten des Users opendkim läuft:
 +   # ps auxw | grep opendkim
 +
 +  opendkim  7535  0.0  0.2 213712  2068 ?        Ssl  18:00   0:00 /usr/sbin/opendkim -x /etc/opendkim.conf -P /var/run/opendkim/opendkim.pid
 +
 +Mittels lsof können wir nun noch überprüfen, welcher Port von Daemon verwendet wird.
 +   # lsof -i :10011
 +
 +  COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
 +  opendkim 7535 opendkim    3u  IPv4 2687914      0t0  TCP localhost:10011 (LISTEN)
 +
 +=== automatisches Starten des Dienste beim Systemstart  ===
 +Damit der OpenDKIM-Milter-Daemon automatisch bei jedem Systemstart startet, denn ohne laufenden **opendkim-daemon** verweigert nun unser **postfix** die Annahme der Nachrichten, kann die Einrichtung des Start-Scripte über folgenden Befehle erreicht werden:
 +   # chkconfig opendkim on
 +
 +Die Überprüfungung ob der Dienst (Daemon) smf-spfwirklich bei jedem Systemstart automatisch mit gestartet wird, kann durch folgenden Befehle erreicht werden:
 +   # chkconfig --list | grep opendkim
 +
 +  opendkim        0:off 1:off 2:on 3:on 4:on 5:on 6:off
 +
 +Wichtig sind jeweils die Schalter **on** bei den Runleveln - **2 3 4 5**. 
 +
 +Anschließend starten wir unseren Postfix-Mailserver einmal durch, damit unsere zuvor eingetragene Konfigurationsänderung aktiv werden kann.
 +   # service postfix condrestart
 +
 +  Shutting down postfix:                                      OK  ]
 +  Starting postfix:                                          [  OK  ]
 +
 +==== Tests und Logging ====
 +
 +Wurde die Nachricht unterwegs verändert,so fällt dies bei der Überprüfung der DKIM-Signatur auf und wird entsprechend im maillog vermerkt.
 +  Mar 26 12:52:15 vml000080 opendkim[10943]: D2B6281: s=20120113 d=gmail.com SSL error:04091068:rsa routines:INT_RSA_VERIFY:bad signature
 +
 +Hingegen wird bei positivem Ergebnis der DKIM-Validierung im maillog vermerkt.
 +  Mar 26 18:02:48 vml000080 opendkim[7535]: CECDB81: message has signatures from googlegroups.com, gmail.com
 +  Mar 26 18:02:48 vml000080 opendkim[7535]: CECDB81: DKIM verification successful
 +
 +Im Mailheader einer angenommenen eMail finden sich dann entsprechend auch Hinweise zur DKIM-Signaturüberprüfung.
 +  Authentication-Results: mx01.nausch.org; dkim=pass reason="1024-bit key"
 + header.d=piratenpartei-bayern.de header.i=@piratenpartei-bayern.de
 + header.b=WFipEQPn; dkim-adsp=pass
 +
 +Bei negativem Ergebnis wird entsprechend vermerkt.
 +  Authentication-Results: mx01.nausch.org; dkim=fail
 + reason="verification failed"
 + header.d=kitterman.com header.i=@kitterman.com header.b=g01pGD3l;
 + dkim-adsp=none
 ====== Links ====== ====== Links ======
   * **[[centos:mail_c6:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 6<<]]**   * **[[centos:mail_c6:start|Zurück zum Kapitel >>Mailserverinstallation unter CentOS 6<<]]**
   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**   * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]**
   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**   * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]**
- 
-~~DISCUSSION~~ 
- 
  
  
  • centos/mail_c6/mta_9.1394131585.txt.gz
  • Zuletzt geändert: 06.03.2014 18:46.
  • von django