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:mailserver:dkim [08.03.2011 17:57. ]
django [AMaViS]
centos:mailserver:dkim [20.04.2018 10:34. ] (aktuell)
Zeile 1: Zeile 1:
 +====== 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.
 +Ursprünglich wurde DomainKeys unter dem Titel //​Domain-Based Email Authentication Using Public Keys Advertised in the DNS (DomainKeys)//​ im RFC 4870 veröffentlicht. Im RFC 4871 wurde dies unter dem Titel //​DomainKeys Identified Mail (DKIM) Signatures//​ weitergeführt.
 +
 +DKIM basiert auf asymmetrischer Verschlüsselung,​ bei der eMails mit einer digitalen Signatur versehen werden. 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. 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. Dies ist 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.
 +
 +Für die Erzeugung des Hashwertes für diese Signatur unterstützt DKIM die Hashfunktionen SHA-1 und SHA-256. Die Verschlüsselung des Hashwertes, welche ​ letztendlich die digitale Signatur zum Ergebnis hat, wird dabei mit dem Verschlüsselungsverfahren RSA realisiert. Damit die Signatur mit dem beim eMail-Versand verwendeten ASCII-Zeichensatz angezeigt werden kann, wird sie abschließend mit Base64 kodiert. Auf der Empfängerseite wird nun die erhaltene digitale Signatur im ersten Schritt Base64 decodieren, und den Inhalt mit Hilfe des in dem TXT-Record des Absenders enthaltenem publickey decodieren. Diesen Hashwert vergleicht nun der empfangene MTA mit dem selbst errechneten Hashwert der Nachricht. Stimmen diese überein, kann zweifelsfrei die Absendedomäne ausgemacht werden. Eine mit Hilfe von DKIM signierte eMail bietet also eine Möglichkeit,​ sicher nachzuprüfen,​ ob die in der eMail-Absenderadresse enthaltene Domäne korrekt ist und ob die Nachricht auf dem Zustellungsweg nicht manipuliert wurde.
 +
 +===== Installation =====
 +Zur Signierung und Überprüfung der empfangenen Daten nutzen wir bei unserem Mailserver-Postfix die Möglichkeiten von AMaViS. Die Grundinstallation von AMaViS ist im Kapitel [[centos:​mailserver:​grundinstallation_von_amavis|Virenschutz mit AMaViS]] beschrieben. In unserer Postofficeumgebung nutzen wir AMaVis in der Version **amavisd-new-2.6.4**. Neben diesem Perl-Programm benötigen wir noch das Paket **perl-Mail-DKIM** welches bei der Installation von amavisd-new automatisch mitinstalliert wurde.
 +
 +Bei der nachfolgenden Konfigurationsbeschreibung gehen wir davon aus, dass bereits ein funktionierender [[centos:​mailserver:​grundinstallation_von_postfix|Mailserver]] wie auch der [[centos:​mailserver:​grundinstallation_von_amavis|Viren- und SPAM-Schutz mit Hilfe von AMaViS]] zur Verfügung steht.
 +
 +===== Konfiguration =====
 +Als erstes legen wir das Zielverzeichnis für unseren privaten Schlüssel an und passen die Berechtigung so an, dass dieses Verzeichnis unserem User amavis "​gehört":​
 +   # mkdir /​var/​amavis/​dkim
 +   # chown amavis:​amavis /​var/​amavis/​dkim
 +==== Keyerstellung ====
 +Im nächsten Schritt erstellen wir uns nun unser Schlüsselpaar:​
 +   # amavisd genrsa /​var/​amavis/​dkim/​dkim-key.pem
 +   ​Private RSA key successfully written to file "/​var/​amavis/​dkim/​dkim-key.pem"​ (1024 bits, PEM format)
 +Alternativ können wir auch **openssl** zum Erstellen des Schlüssel verwenden.
 +   # openssl genrsa -out dkim-key.pem 1024
 +   ​Generating RSA private key, 1024 bit long modulus
 +   ​..........++++++
 +   ​.............++++++
 +   e is 65537 (0x10001)
 +Anschließend passen wir die Dateiberechtigungen unseres erstellen keys an.
 +   # chmod 600 dkim-key.pem
 +In unserem zuvor erstellten Verzeichnis befindet sich nun der erstellte **private** Schlüssel.
 +   # ll /​var/​amavis/​dkim/​
 +   ​-rw------- 1 root root 887 15. Jul 22:13 dkim-key.pem
 +Damit später der User **amavis** auf diese Datei auch lesend zugreifen kann, berichtigen wir nun die Dateirechte.
 +   # chown amavis:​amavis dkim-key.pem ​
 +In dieser Datei befindet sich nun der **private key**.
 +<​code>#​ cat /​var/​amavis/​dkim/​dkim-key.pem
 +-----BEGIN RSA PRIVATE KEY-----
 +MIICXAIBAAKBgQDWypzomx/​COZmYML/​9j/​MRNH9Chw652qzbHjM4RdzpeWzainKC
 ++kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/​mFekOqtnIHTZM
 +16CLtzQUHAEwCUZqouQkDzQUHAEwCUZq2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB
 +AoGAFgSC/​R0ZrlE1O3KT26wr4HGfMfSiP874tSVtXrFaqdw2mlhi0KZTv6+dFzAC
 +5H+YgllJ6Uv97bccY3AFqStc6FMuEnbZBzQUHAEwCUZqMUvln1Hm+pt9nKmc2T1d
 +4NZFpm9wdghEolGgdQUJtqaKiClSJGAW28qne4TxQ/​4s8skCQQDx07HAUveFk7dN
 +zHdO+LYDyXGW/​Z4/​Hd/​+N1ckD1eFAULeSAU+/​Gyi8P8TTpIIeCFhao+72DlPbl0D
 +/​R0euJY/​AkEA42FJITBi3W8D4i1ifVZUnCFdBUHiZx2wpWNmkFHbMBGSddmLq1SD
 +o0FkSK2yUUSyJil44mE68knnZ3JoE1IxMwJAGz0zKmyuANfQr+y2C6ksJ2ULbGyI
 +5Kcimm3a1RXTenwsD1lvVM46tmfa83vIKzgM2oI8SnZijjXqOEbMfudf1QJBAIG8
 +E261XeN8IRoezRA4fsQqoRmL0vME1LI4+d8kZUyS6h8FxhQ2f3lZqS9ys8h8yqzN
 +guSfl3OAyWCTvWAwyFMCQFb0t7soo/​mHoS5EP+Q7/​TRyjdzUzRrVZO5sO0HUMyhL
 +SPfoF9go3M+8jZ2ac/​kbs6iUlQT/​zS4/​T4DVScoPgCs=
 +-----END RSA PRIVATE KEY-----</​code>​
 +
 +==== AMaViS ====
 +In unserer AMaViS-Konfiguration hinterlegen wir nun die sowohl die Möglichkeiten der Signierung wie auch Überprüfung der DKIM-Funktionalitäten. Am Anfang unserer Konfigurationsdatei hinterlegen wir demnach folgende Definitionen.
 +  # vim /​etc/​amavisd.conf
 +<code perl amavisd.conf>​
 +
 +$enable_dkim_verification = 1;  # enable DKIM signatures verification
 +$enable_dkim_signing = 0;    # load DKIM signing code, keys defined by dkim_key
 +dkim_key('​nausch.org',​ '​main',​ '/​var/​amavis/​dkim/​dkim-key.pem'​);​ # Nausch.org'​s Mailserver key
 +@dkim_signature_options_bysender_maps = (
 +    { '​.'​ => { ttl => 21*24*3600, c => '​relaxed/​simple'​ } } );
 +    ​
 +</​code>​
 +
 +Bei diesem Beispiel gehen wir davon aus, dass wir nur eine Domäne auf unserem Mailserver haben und diese Nachrichten signieren wollen.
 +
 +Haben wir noch weitere [[centos:​mailserver:​virtuelle_r_mailserver|virtuelle Mailserver]] am laufen, können wir durch nachfolgende exeplarische Zeilen erreichen, dass auch diese Nachrichten mit unserem DKIM-Signatur versehen werden können.
 +<code perl amavisd.conf>​
 +dkim_key('​nausch.org',​ '​main',​ '/​var/​amavis/​dkim/​dkim-key.pem'​);​ # Nausch.org'​s Mailserver key
 +dkim_key('​lists.nausch.org',​ '​main',​ '/​var/​amavis/​dkim/​dkim-key.pem'​);​ # Nausch.org'​s Mailserver key
 +dkim_key('​ebersberger-liedersammlung.de',​ '​main',​ '/​var/​amavis/​dkim/​dkim-key.pem'​);​ # Nausch.org'​s Mailserver key    ​
 +</​code>​
 +Im ersten Schritt aktivieren wir __nur__ die DKIM-Verifizierung,​ noch **__nicht__** die DKIM-Signierung! Solange wir unseren öffentlichen Schlüssel noch nicht via DNS-TXT-Record veröffentlich haben, verhindern wir so, dass von uns signierte Nachrichten am Zielserver abgewiesen werden, weil ohne dem öffentlichen Schlüssel, die Signierten Daten nicht decodiert werden können.
 +
 +Damit AMaVis nun Kenntnis von unseren Änderungen erfährt, starten wir diesen einmal durch.
 +   # service amavisd restart
 +
 +==== öffentlichen Schlüssel ====
 +Damit wir den unseren öffentlichen Schlüssel via DNS veröffentlichen können, geben wir den Key am Bildschirm aus.
 +<​code>#​ amavisd showkeys
 +; key#1, domain nausch.org, /​var/​amavis/​dkim/​dkim-key.pem
 +main._domainkey.nausch.org. ​    3600 TXT (
 +  "​v=DKIM1;​ p="
 +  "​MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/​COZmYML/​9j/​MRNH9C"​
 +  "​hw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq"​
 +  "​34MgWsDi3h/​mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/​AH9eNB2F9qbRFR"​
 +  "​B4WWJyuCF6GNQLX9jQIDAQAB"​)</​code>​
 +Auch hier können wir mittels **openssl** den public-key erstellen und auf die Platte schreiben lassen.
 +   # ​ openssl rsa -in dkim-key.pem -out public.pem -pubout -outform PEM
 +   ​writing RSA key
 +Die Dateiberechtigung passen wir entsprechend an:
 +   # chmod 600 /​var/​amavis/​dkim/​public.pem
 +Die Schlüsseldatei enthält nun den public-key für unsere DKIM-Konfiguration.
 +   # cat /​var/​amavis/​dkim/​public.pem
 +   ​-----BEGIN PUBLIC KEY-----
 +   ​MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/​COZmYML/​9j/​MRNH9C
 +   ​hw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq
 +   ​34MgWsDi3h/​mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/​AH9eNB2F9qbRFR
 +   ​B4WWJyuCF6GNQLX9jQIDAQAB
 +   ​-----END PUBLIC KEY-----
 +Diesen Schlüssel stellen wir nun als TXT über die Subdomain **//​main._domainkey.nausch.org//​** zur Verfügung. ​
 +   ​v=DKIM1;​ p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/​COZmYML/​9j/​MRNH9Chw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/​mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/​AH9eNB2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB
 +Nachdem der TXT zur Verfügung steht, können wir mit hilfe von **amavisd** diesen Überprüfen.
 +   # amavisd testkeys
 +   ​TESTING#​1:​ main._domainkey.nausch.org ​       => pass
 +Wir können natürlich auch direkt den TXT-Record eines Hosts abfragen:
 +   # host -t TXT main._domainkey.nausch.org
 +   ​main._domainkey.nausch.org descriptive text "​v=DKIM1\;​ p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/​COZmYML/​9j/​MRNH9Chw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/​mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/​AH9eNB2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB"​
 +
 +===== Tests =====
 +==== local ====
 +Für die abschließenden Test aktivieren wir nun in der AMaViS-Konfigurationsdatei //​**/​etc/​amavisd.conf**//​ die anfänglich gesperrte Option //​enable_dkim_signing//​.
 +   # vim /​etc/​amavisd.conf
 +   ​$enable_dkim_signing = 1;    # load DKIM signing code, keys defined by dkim_key
 +Zur Aktivierung der DKIM-Signaturfunktion starten wir den AMaViS-Dämon 1x durch.
 +   # service amavisd restart
 +Schicken wir nun eine Test-eMail so finden wir im Mailheader die DKIM-Signatur:​
 +<​code>​DKIM-Signature:​ v=1; a=rsa-sha256;​ c=relaxed/​simple;​ d=nausch.org;​ h=
 +        user-agent:​content-transfer-encoding:​content-type:​content-type
 +        :​mime-version:​subject:​subject:​from:​from:​date:​date:​message-id
 +        :​received:​received:​received;​ s=foo; t=1247694227;​ bh=KEYMIaIFKBI
 +        HqS7XrfqnIm115svsJ2CtdB4E8zpd83M=;​ b=Jow5mHH1v15sWw8RcjQuCXKtYPx
 +        mp8TGdon5FvR0RaDqkzPxmRBRaQ3oNL9/​hdPurbudaWa7f1/​LLpDS6qC8+7/​cfuk
 +        jY2ogmZO9xNmY1ZNdqf286X72P2RvsKFngX7CwVIF3Ofd0hZy7YlTRPe+CHQ/​JgW
 +        hEhhBGWr+aoZv1pU=
 +</​code>​
 +==== WEB-online ====
 +Eine sehr gute und einfache Möglichkeit die DKIM-Konfiguration zu testen, stellt die [[http://​www.brandonchecketts.com/​emailtest.php|DomainKeys,​ DKIM, SPF, SpamAssassin Email Validator]] von [[http://​www.brandonchecketts.com|Brandon Checketts]] dar.
 +Die angegebene temporäre eMailadresse kopieren wir uns und schicken an diese eine Testnachricht.
 +
 +{{ :​centos:​mailserver:​email-validator.png?​575 |eMail Testseite}}
 +
 +Über die Schaltfläche **//[View Results]//​** erhalten wir dann die Prüfungsergebnisse unserer Testnachricht präsentiert. ​
 +=== Original Message: ===
 +<​code>​Return-Path:​ <​michael@nausch.org>​
 +X-Original-To:​ zSQ3lX8C5X@www.brandonchecketts.com
 +Delivered-To:​ spamapp@www.brandonchecketts.com
 +Received: from mx1.nausch.org (mx1.nausch.org [88.217.187.21])
 + by www.brandonchecketts.com (Postfix) with ESMTP id 2AB933091E
 + for <​zSQ3lX8C5X@www.brandonchecketts.com>;​ Sat, 18 Jul 2009 06:49:59 -0400 (EDT)
 +Received: from localhost (localhost.localdomain [127.0.0.1])
 + by mx1.nausch.org (Postfix) with ESMTP id 392E71158615
 + for <​zSQ3lX8C5X@www.brandonchecketts.com>;​ Sat, 18 Jul 2009 12:49:58 +0200 (CEST)
 +DKIM-Signature:​ v=1; a=rsa-sha256;​ c=relaxed/​simple;​ d=nausch.org;​ h=
 + x-mailer:​mime-version:​message-id:​date:​date:​organization
 + :​content-transfer-encoding:​content-type:​content-type:​reply-to
 + :​from:​from:​subject:​subject:​received:​received:​received;​ s=main;
 + t=1247914197;​ x=1249728597;​ bh=E1isxuEic/​sUmYbroqFvuC/​23yyUX53a
 + HS/​Xwkrnr3I=;​ b=EEIoq4COIkREvU+Oil+f0Qg0yrwdYX0mZFEtnlqRR06ck6HV
 + Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z
 + D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/​sqnULNldJk=
 +X-Virus-Scanned:​ amavisd-new at nausch.org
 +Received: from mx1.nausch.org ([127.0.0.1])
 + by localhost (amavis.nausch.org [127.0.0.1]) (amavisd-new,​ port 10024)
 + with ESMTP id zUoWGqr6KT3G for <​zSQ3lX8C5X@www.brandonchecketts.com>;​
 + Sat, 18 Jul 2009 12:49:57 +0200 (CEST)
 +Received: from buero.nausch.org (office.nausch.org [192.168.10.20])
 + by mx1.nausch.org (Postfix) with ESMTP
 + for <​zSQ3lX8C5X@www.brandonchecketts.com>;​ Sat, 18 Jul 2009 12:49:57 +0200 (CEST)
 +Received: by buero.nausch.org (Postfix, from userid 500)
 + id 5F1722DC040E;​ Sat, 18 Jul 2009 12:49:57 +0200 (CEST)
 +Subject: Testmessage
 +From: Michael Nausch <​michael@nausch.org>​
 +Reply-To: michael@nausch.org
 +To: zSQ3lX8C5X@www.brandonchecketts.com
 +Content-Type:​ text/plain; charset=UTF-8
 +Content-Transfer-Encoding:​ quoted-printable
 +Organization:​ nausch.org
 +Date: Sat, 18 Jul 2009 12:49:57 +0200
 +Message-Id: <​1247914197.4249.2.camel@office.nausch.org>​
 +Mime-Version:​ 1.0
 +X-Mailer: Evolution 2.12.3 (2.12.3-8.el5_2.3) ​
 +
 +HI,
 +
 +ist nur ein Test f=C3=BCr'​s Dokuwiki
 +
 +ttyl,
 +     ​Django
 +</​code>​
 +=== DKIM Information:​ ===
 +<​code>​DKIM Signature
 +
 +Message contains this DKIM Signature:
 +DKIM-Signature:​ v=1; a=rsa-sha256;​ c=relaxed/​simple;​ d=nausch.org;​ h=
 + x-mailer:​mime-version:​message-id:​date:​date:​organization
 + :​content-transfer-encoding:​content-type:​content-type:​reply-to
 + :​from:​from:​subject:​subject:​received:​received:​received;​ s=main;
 + t=1247914197;​ x=1249728597;​ bh=E1isxuEic/​sUmYbroqFvuC/​23yyUX53a
 + HS/​Xwkrnr3I=;​ b=EEIoq4COIkREvU+Oil+f0Qg0yrwdYX0mZFEtnlqRR06ck6HV
 + Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z
 + D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/​sqnULNldJk=
 +
 +
 +Signature Information:​
 +v= Version: ​        1
 +a= Algorithm: ​      ​rsa-sha256
 +c= Method: ​         relaxed/​simple
 +d= Domain: ​         nausch.org
 +s= Selector: ​       main
 +q= Protocol: ​       ​
 +bh=                 ​E1isxuEic/​sUmYbroqFvuC/​23yyUX53a
 + HS/​Xwkrnr3I=
 +h= Signed Headers: ​ x-mailer:​mime-version:​message-id:​date:​date:​organization
 + :​content-transfer-encoding:​content-type:​content-type:​reply-to
 + :​from:​from:​subject:​subject:​received:​received:​received
 +b= Data:            EEIoq4COIkREvU+Oil+f0Qg0yrwdYX0mZFEtnlqRR06ck6HV
 + Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z
 + D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/​sqnULNldJk=
 +Public Key DNS Lookup
 +
 +Building DNS Query for main._domainkey.nausch.org
 +Retrieved this publickey from DNS: v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/​COZmYML/​9j/​MRNH9Chw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/​mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/​AH9eNB2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB
 +Validating Signature
 +
 +result = pass
 +Details: </​code>​
 +=== SPF Information:​ ===
 +<​code>​Using this information that I obtained from the headers
 +
 +Helo Address = mx1.nausch.org
 +From Address = michael@nausch.org
 +From IP      = 88.217.187.21
 +SPF Record Lookup
 +
 +Looking up TXT SPF record for nausch.org
 +Found the following namesevers for nausch.org: ns2.m-online.net ns1.m-online.net
 +Retrieved this SPF Record: v=spf1 ip4:​88.217.187.21/​32 a mx include:​nausch.org ?all (TTL = 7200)
 +Result: Pass (Mechanism '​ip4:​88.217.187.21'​ matched)
 +
 +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)
 +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
 +</​code>​
 +
  
  • centos/mailserver/dkim.txt
  • Zuletzt geändert: 20.04.2018 10:34.
  • (Externe Bearbeitung)