Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c7:spam_9 [26.11.2014 15:08. ] – [Konfiguration (multiple domain)] django | centos:mail_c7:spam_9 [22.07.2019 14:46. ] (aktuell) – django | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | <WRAP center round tip 30%>\\ | ||
- | **//aktuell in Bearbeitung!// | ||
- | </ | ||
====== DKIM - Domain Key Identified Mail unter CentOS 7.x ====== | ====== DKIM - Domain Key Identified Mail unter CentOS 7.x ====== | ||
{{: | {{: | ||
Zeile 19: | Zeile 16: | ||
===== Überprüfung von DKIM-Signaturen ===== | ===== Überprüfung von DKIM-Signaturen ===== | ||
Damit unsere AMaViS-installation die Überprüfung von DKIM-Signaturen im Mailheader vornimmt bedarf es keiner großen Konfiguration. Wie in der [[http:// | Damit unsere AMaViS-installation die Überprüfung von DKIM-Signaturen im Mailheader vornimmt bedarf es keiner großen Konfiguration. Wie in der [[http:// | ||
- | # vim / | + | # vim /etc/amavisd/ |
<code perl>################################################################################ | <code perl>################################################################################ | ||
Zeile 61: | Zeile 58: | ||
# ll / | # ll / | ||
- | < | + | < |
In dieser Datei befindet sich nun der **private key**. | In dieser Datei befindet sich nun der **private key**. | ||
Zeile 245: | Zeile 242: | ||
</ | </ | ||
+ | ===== DKIM & DNS ===== | ||
+ | ==== public key ==== | ||
+ | Wie Eingangs bereits erwähnt, kann der Empfänger eine DKIM-signierte eMail mit Hilfe des public keys auf Echtheit hin überprüfen. Damit der Empfänger den public key abfragen kann, müssen wir diesen im DNS hinterlegen. Hierzu lassen wir uns den public-key unseres DKIM-keys am besten mit Hilfe des Befehls **amavisd** ausgeben. | ||
+ | # amavisd -c / | ||
+ | < | ||
+ | 140224._domainkey.nausch.org. | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | Möchte man sich alle Schlüssel anzeigen lassen, nutzt man einfach die Option // | ||
+ | # amavisd -c / | ||
+ | < | ||
+ | 140224._domainkey.omni128.de. | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ... | ||
+ | ... | ||
- | FIXME | + | ; key#16, domain c3n705.guru, |
+ | 140224._domainkey.c3n705.guru. | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | </ | ||
+ | Natürlich kann man auch **openssl** dazu verwenden, sich den public-key ausgeben zu lassen. | ||
+ | # openssl rsa -in / | ||
+ | | ||
+ | Die Dateiberechtigung passen wir entsprechend an. | ||
+ | # chmod 600 / | ||
+ | Die Schlüsseldatei enthält nun den public-key für unsere DKIM-Konfiguration. | ||
+ | # less / | ||
+ | < | ||
+ | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAojGXwA9zJFJ4wpa2PB51 | ||
+ | amh5s2amqyBpUJR07or9SeqZlGV0193VGGuVM72w7ry8AzTKGZKRf2oPtjgx2zAF | ||
+ | FQDoewOQVDdkQG9g+VGLW/ | ||
+ | 0SE4EN6hcJ0lkgNK8wqzkWvrA5xwouuj1WfXTHm6Ov4I7HRsmHvPyOaK+jpMBBYj | ||
+ | o9qRtZiU48x+DOp3ti3r/ | ||
+ | OdwxnmEMdb4QLgtPV1S3atyq4JFNt2Qc6C06fDzN3ylyH+orrCjBBSa75ZdVxOun | ||
+ | my5Iv7GbFUqX8QAGH1l0KyZWBdlx3YRME2ZpThOjwhG9cl66cc8w7dxlIFM1XZb/ | ||
+ | Z8SlFHFelhaqSovYPAd30pbooU4gL+sGOqqvdc18yXB7jIjUmiBNsO7HTXiI/ | ||
+ | dl+wWylh202hlTdl1VG3Gskup8I2gpuRK7SAsbNRzr2KN05T0B/ | ||
+ | CiPf+z9/ | ||
+ | DQMObGLgidf2+pY7YoxUHigq5ptF8/ | ||
+ | 4sUZajSC04shzSmob+gimAMCAwEAAQ== | ||
+ | -----END PUBLIC KEY----- | ||
+ | </ | ||
+ | <WRAP round important> | ||
+ | </ | ||
+ | Den, mit Hilfe von **amavisd** ausgegebenen, | ||
+ | # host -t TXT 140224._domainkey.sec-mail.guru | ||
+ | < | ||
+ | 140224._domainkey.sec-mail.guru descriptive text " | ||
+ | </ | ||
+ | ==== ADSP ==== | ||
+ | Über **ADSP**((**A**uthor **D**omain **S**igning **P**ractices)) kann ein (Mail)-Domaininhaber definieren, was ein Mailserver mit einer zu Annahme anstehenden eMail passieren soll, sofern dessen DKIM((**D**omain**K**eys **I**dentified **M**ail))-Signatur **__nicht__** gültig ist. Für ADSP wird dazu ein eigener Qualifier **_adsp** benutzt. Am Beispiel der Domain **sec-mail.guru** ergibt sich der Name **_adsp._domainkey.sec-mail.guru**. | ||
+ | Der (TXT)-Datensatz hat dabei folgende Struktur "// | ||
+ | * **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 Default-Wert **unknown** gesetzt. | ||
+ | Somit ergibt sich in unserem Anwendungsbeispiel, | ||
+ | _adsp._domainkey.sec-mail.guru. | ||
+ | Diesen Record veröffentlichen wir nun über unseren DNS. Somit kann ein Empfänger nicht nur den DKIM-Schlüssel zum Verifizieren der DKIM-Signatur abfragen, sondern auch den **ADSP**-TXT-Record und weiß damit, was er ggf. machen sollte, sofern die DKIM-Signatur gebrochen wurde. | ||
+ | ===== Tests ===== | ||
+ | ==== DNS + private key ==== | ||
+ | Nachdem der TXT zur Verfügung steht, können wir mit Hilfe von **amavisd** diesen Überprüfen. | ||
+ | # amavisd -c / | ||
+ | TESTING#1: 141126._domainkey.omni128.de | ||
+ | ... | ||
+ | | ||
+ | ... | ||
+ | TESTING#16: 141126._domainkey.c3n705.guru | ||
+ | Wollen wir nur den Schlüssel einer bestimmten Domain testen, so verwenden wir folgenden Aufruf. | ||
+ | # amavisd -c / | ||
+ | TESTING#1: 141126._domainkey.omni128.de | ||
+ | Das folgende Beispiel zeigt eine Abfrage, die die Fehlermeldung **invalid (public key: OpenSSL error: bad base64 decode)** nach sich zieht. | ||
+ | # amavisd -c / | ||
+ | TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de | ||
+ | Die Fehlermeldung **bad base64 decode** weißt direkt auf einem Typo-Fehler im Schlüsseldaten hin! | ||
+ | Das nächste Beispiel zeigt eine Abfrage, die eine weitere Fehlermeldung nach sich zieht: | ||
+ | # amavisd -c / | ||
+ | TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de => fail (OpenSSL error: data too large for key size) | ||
+ | <WRAP center round tip> | ||
+ | Erhalten wir die Fehlermeldung **fail (OpenSSL error: data too large for key size)**, so liegt es meist nicht an einem vermeintlich zu großen DKIM-Schlüssel, | ||
+ | </ | ||
+ | Wurde der public DKIM-Schlüssel **revoked**, | ||
+ | TESTING#6: 140224._domainkey.piraten-it.guru | ||
+ | Möchte man einen DKIM-Schlüssel zurückziehen (**revoke**), | ||
+ | main._domainkey.piraten-it.guru | ||
+ | Wir können natürlich auch direkt den TXT-Record eines Hosts abfragen eim DNS-Server abrufen: | ||
+ | # host -t TXT 141126._domainkey.nausch.org | ||
+ | < | ||
+ | 141126._domainkey.nausch.org descriptive text " | ||
+ | ==== signing und verifying ==== | ||
+ | Nachdem die Überprüfung der AMaViS/ | ||
+ | # vim / | ||
+ | <code perl>################################################################################ | ||
+ | ## DKIM - Domain Key Identified Mail | ||
+ | # | ||
+ | # DKIM-Signaturen verifizieren | ||
+ | $enable_dkim_verification = 1; | ||
+ | # DKIM-Signaturen erstellen | ||
+ | $enable_dkim_signing = 1; | ||
- | ===== domain_maps ===== | + | ... |
+ | </ | ||
- | # yum install perl-DBD-MySQL -y | + | Anschließend führen wir einen Reload des AMaViS-Daemon durch. |
+ | # systemctl reload amavisd | ||
- | # mysql -h localhost | + | Schicken wir nun eine Test-eMail so findet der Empfänger im Mailheader die entsprechende DKIM-Signatur. |
+ | < | ||
+ | content-transfer-encoding: | ||
+ | : | ||
+ | 140224; t=1394130616; | ||
+ | RT2RSN/ | ||
+ | izj2W0G8zJe+a5RVAKj9nFlPgPB1KtQ3rCPXmYsn59zJ/ | ||
+ | Hf3z8QmFmPWvvBx/ | ||
+ | ipOZa2FrXNeHJpAhMpAFZ9ynhxV8ekg9v000f6ZLKlzTj5MNuXzohhfdH7I1hy/ | ||
+ | b9r+/ | ||
+ | o+LB2i8zLWNe56hrKDzEoOS872xQQvErezZ4+X7UPpMeswspcaLdnSkbeWMNGElw | ||
+ | pTpL/ | ||
+ | S4Gnk0yXgrx6B9wVwytAhEguDe3dhm6stQgkzvSi0sl1I9WV85OS3+5sFfOpuvju | ||
+ | icOrI2DGNZnuFWFmbiaTLmMlw4y2QENxP/ | ||
+ | mqH8mwZRdaTcQD2M3mtGNqDYIlnCsir/ | ||
+ | XkEEoELtW7aIWIKM2xWagUtmVVW/ | ||
+ | dk= | ||
+ | </ | ||
+ | Der empfangende Mailserver ist mit Hilfe des **Headers:// | ||
+ | < | ||
+ | dkim=pass (4096-bit key) header.d=nausch.org | ||
+ | </ | ||
- | < | + | Wurde die Nachricht jedoch hingegen verändert, so schlägt die Überprüfung fehl und wird entsprechend quittiert: |
- | Welcome to the MySQL monitor. | + | < |
- | Your MySQL connection id is 170683 | + | dkim=fail (1024-bit key) reason=" |
- | Server version: 5.1.73 Source distribution | + | header.d=controlc.de |
+ | </ | ||
- | Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. | + | Die Veränderung der Nachricht passierte in dem obigen Beispiel dadurch, dass die Nachricht aus einer Mailingliste vom Mailinglisten-Server verändert wurde, da am Ende der nachricht ein listenspezifischer Mailfooter angefügt wurde. |
- | Oracle is a registered trademark of Oracle Corporation and/or its | + | <WRAP center round info> \\ |
- | affiliates. Other names may be trademarks of their respective | + | Wie man das Brechen der DKIM-Signaturen durch den Mailinglisten-Manager **mailman** unterbindet, |
- | owners. | + | </ |
- | Type ' | + | ==== signing (WEB-online) ==== |
+ | Eine sehr gute und einfache Möglichkeit die DKIM-Konfiguration zu testen, stellt die [[http:// | ||
+ | Die angegebene temporäre eMailadresse kopieren wir uns und schicken an diese eine Testnachricht. | ||
- | mysql> CREATE USER ' | + | {{ : |
- | Query OK, 0 rows affected (0.01 sec) | + | |
- | mysql> CREATE USER ' | + | Wir schicken also nun eine Testnachricht an die angegebene Addresse, im einfachsten FAll nutzen wir dazu einfach das Schweizer Taschenmesser für SMTP, kurz **[http:// |
- | Query OK, 0 rows affected (0.01 sec) | + | # swaks --to Dj4n90-i5-a-G33k@www.brandonchecketts.com --from n3rd@sec-mail.guru --header-X-Test "test eMail" --server |
- | mysql> GRANT ALL PRIVILEGES ON postfix.* TO ' | + | Über die Schaltfläche **//[View Results]// |
- | Query OK, 0 rows affected | + | === Original Message: === |
+ | <code>Return-Path: | ||
+ | X-Original-To: | ||
+ | Delivered-To: | ||
+ | Received: from mx01.nausch.org (mx01.nausch.org [217.91.103.190]) | ||
+ | by yen.roundsphere.com (Postfix) with ESMTP id 292D1533009D | ||
+ | for < | ||
+ | DKIM-Signature: | ||
+ | message-id: | ||
+ | 140224; t=1417089522; | ||
+ | lqqvsQYKOpYUP8nk7I=; | ||
+ | V9eh4YN2lzh5vdsQrh3fB0wqcQwc46ypNiHrYAXdI/ | ||
+ | 8c808dQGgh5iEy01nkKAoJY3641CZrxp1gshtVyQUrM8x5cRhdk9KvdmHCPMkkCn | ||
+ | vVSC/ | ||
+ | z5pZZYSmw1CBYE644jTtiHcEpy6qonjwh53NL5FrI/ | ||
+ | mJJw+ayVBDuzIxJEta38QySxkdcvS4YejEMTFT7ACcJoZeu0ct3Z9gXYJo301ESr | ||
+ | ZTPoxhqNSRTs105dE26DDVlAUZjeTAtRgJlEge4zhSO4wem2qsRpFjXh7vbjKz7i | ||
+ | Jy/ | ||
+ | LJ440FpkY2EA0zQ1y9O2S62IDDS1ON+fyufJJ0W9oaelTYr45/ | ||
+ | +Irem5j0// | ||
+ | KpPuliFssSxCR4QHC08rVoQda+AtRvGWlNEBgN3RDR65iSm7Q1fJJt3Z6LTakv7/ | ||
+ | 38= | ||
+ | X-Virus-Scanned: | ||
+ | Received: from vml000087.dmz.nausch.org | ||
+ | (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) | ||
+ | (No client certificate requested) | ||
+ | by mx01.nausch.org (Postfix) with ESMTPSA id E9A98C00088 | ||
+ | for < | ||
+ | Date: Thu, 27 Nov 2014 12:58:41 +0100 | ||
+ | To: Dj4n90-i5-a-G33k@www.brandonchecketts.com | ||
+ | From: n3rd@sec-mail.guru | ||
+ | Subject: DKIM-Signing-Test | ||
+ | X-Mailer: swaks v20130209.0 jetmore.org/ | ||
+ | X-Test: test eMail | ||
+ | Message-Id: < | ||
- | mysql> GRANT ALL PRIVILEGES ON postfix.* TO ' | + | This is a test mailing |
- | Query OK, 0 rows affected (0.01 sec) | + | </code> |
+ | |||
+ | === DKIM Information: | ||
+ | < | ||
+ | |||
+ | Message contains this DKIM Signature: | ||
+ | DKIM-Signature: | ||
+ | message-id: | ||
+ | 140224; t=1417089522; | ||
+ | lqqvsQYKOpYUP8nk7I=; | ||
+ | V9eh4YN2lzh5vdsQrh3fB0wqcQwc46ypNiHrYAXdI/ | ||
+ | 8c808dQGgh5iEy01nkKAoJY3641CZrxp1gshtVyQUrM8x5cRhdk9KvdmHCPMkkCn | ||
+ | vVSC/ | ||
+ | z5pZZYSmw1CBYE644jTtiHcEpy6qonjwh53NL5FrI/ | ||
+ | mJJw+ayVBDuzIxJEta38QySxkdcvS4YejEMTFT7ACcJoZeu0ct3Z9gXYJo301ESr | ||
+ | ZTPoxhqNSRTs105dE26DDVlAUZjeTAtRgJlEge4zhSO4wem2qsRpFjXh7vbjKz7i | ||
+ | Jy/ | ||
+ | LJ440FpkY2EA0zQ1y9O2S62IDDS1ON+fyufJJ0W9oaelTYr45/ | ||
+ | +Irem5j0// | ||
+ | KpPuliFssSxCR4QHC08rVoQda+AtRvGWlNEBgN3RDR65iSm7Q1fJJt3Z6LTakv7/ | ||
+ | 38= | ||
+ | |||
+ | |||
+ | Signature Information: | ||
+ | v= Version: | ||
+ | a= Algorithm: | ||
+ | c= Method: | ||
+ | d= Domain: | ||
+ | s= Selector: | ||
+ | q= Protocol: | ||
+ | bh= | ||
+ | lqqvsQYKOpYUP8nk7I= | ||
+ | h= Signed Headers: | ||
+ | b= Data: dT0+XLEMpY7/ | ||
+ | V9eh4YN2lzh5vdsQrh3fB0wqcQwc46ypNiHrYAXdI/ | ||
+ | 8c808dQGgh5iEy01nkKAoJY3641CZrxp1gshtVyQUrM8x5cRhdk9KvdmHCPMkkCn | ||
+ | vVSC/ | ||
+ | z5pZZYSmw1CBYE644jTtiHcEpy6qonjwh53NL5FrI/ | ||
+ | mJJw+ayVBDuzIxJEta38QySxkdcvS4YejEMTFT7ACcJoZeu0ct3Z9gXYJo301ESr | ||
+ | ZTPoxhqNSRTs105dE26DDVlAUZjeTAtRgJlEge4zhSO4wem2qsRpFjXh7vbjKz7i | ||
+ | Jy/ | ||
+ | LJ440FpkY2EA0zQ1y9O2S62IDDS1ON+fyufJJ0W9oaelTYr45/ | ||
+ | +Irem5j0// | ||
+ | KpPuliFssSxCR4QHC08rVoQda+AtRvGWlNEBgN3RDR65iSm7Q1fJJt3Z6LTakv7/ | ||
+ | 38= | ||
+ | Public Key DNS Lookup | ||
- | mysql> FLUSH PRIVILEGES; | + | Building DNS Query for 140224._domainkey.sec-mail.guru |
- | Query OK, 0 rows affected (0.01 sec) | + | Retrieved this publickey from DNS: v=DKIM1; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/ |
+ | Validating Signature | ||
- | mysql> exit | + | result = pass |
- | Bye | + | Details: |
</ | </ | ||
+ | === SPF Information: | ||
+ | < | ||
- | # vim / | + | Using this information that I obtained from the headers |
- | <file perl root/ | + | Helo Address |
- | use DBI; | + | From Address |
- | use strict; | + | From IP |
- | my $config | + | SPF Record Lookup |
- | my $dbh = DBI-> | + | |
- | my $sth = $dbh->prepare(" | + | Looking up TXT SPF record for sec-mail.guru |
+ | Found the following namesevers for sec-mail.guru: | ||
+ | Retrieved this SPF Record: v=spf1 mx ?all (TTL = 3600) | ||
+ | using authoritative server {ns.udagdns.net} directly for SPF Check | ||
+ | Result: pass (Mechanism | ||
- | $sth->execute || die " | + | Result code: pass |
+ | Local Explanation: | ||
+ | spf_header = Received-SPF: pass (sec-mail.guru: | ||
+ | </ | ||
+ | === SPAM-Scoring: === | ||
+ | < | ||
+ | Message is NOT marked as spam | ||
+ | Points breakdown: | ||
+ | -0.0 SPF_PASS | ||
+ | -1.9 BAYES_00 | ||
+ | [score: 0.0000] | ||
+ | -0.1 DKIM_VALID_AU | ||
+ | domain | ||
+ | 0.1 DKIM_SIGNED | ||
+ | -0.1 DKIM_VALID | ||
+ | </ | ||
- | open (FH, "> $config") || die " | + | |
- | while (my @row = $sth->fetchrow_array) { | + | ===== Besonderheit - Mailinglisten ===== |
- | print FH join(', ', | + | Wie am Anfang dieses Artikels beschrieben, |
- | } | + | |
- | close FH; | + | Der empfangende Mail-Server ist nun in der Lage, an Hand des öffentlichen Schlüssels, |
- | $dbh->disconnect; | + | |
+ | Und genau bei diesem Punkt haben wir nun bei unserem [[centos: | ||
+ | [[https:// | ||
+ | < | ||
+ | _______________________________________________ | ||
+ | Postfixbuch-users -- http:// | ||
+ | Heinlein Professional Linux Support GmbH | ||
+ | |||
+ | Postfixbuch-users@listen.jpberlin.de | ||
+ | https:// | ||
+ | </ | ||
+ | Haben wir uns die Rahmenbedingungen zum **DKIM** verinnerlicht, | ||
+ | - **eMail nicht verändern**: | ||
+ | - **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. | ||
+ | |||
+ | <WRAP center round tip> \\ | ||
+ | Nachfolgend finden sich daher Hinweise, wie man (s)einen Mailinglistenserver **Mailman** **// | ||
+ | </ | ||
+ | |||
+ | ==== eMail nicht verändern ==== | ||
+ | Eine ungültige DKIM-Signatur bekommen wir immer dann, wenn der Mailheader und/oder der Mailbody, also der Nachrichtentext, | ||
+ | * **Mailheader**: | ||
+ | |||
+ | * **Mailbody**: | ||
+ | %(real_name)s mailing list | ||
+ | %(real_name)s@%(host_name)s | ||
+ | %(web_page_url)slistinfo%(cgiext)s/ | ||
+ | </ | ||
+ | |||
+ | * **Default-Einstellungen**: | ||
+ | |||
+ | # 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. < | ||
+ | Starting mailman: | ||
+ | </ | ||
+ | |||
+ | 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. | ||
+ | # | ||
+ | <file bash vim / | ||
+ | |||
+ | # Django : 2013-02-21 | ||
+ | # Vorhandene DKIM-Header entfernen | ||
+ | REMOVE_DKIM_HEADERS = Yes | ||
+ | |||
+ | ... | ||
</ | </ | ||
+ | Anschließend starten wir unseren Mailinglistenserver einmal durch. | ||
+ | # service mailman condrestart | ||
- | # chmod +x / | + | Shutting down mailman: |
+ | Starting mailman: | ||
+ | ===== Besonderheit - DMARC ===== | ||
+ | Möchten wir DMARC bei der Bewertung der anzunehmenden Nachrichten mit berücksichtigen, | ||
- | # vim / | + | Die Installation und Konfiguration von OpenDMARC ist im Kapitel [[centos:mail_c7:spam_12|DMARC - Domain-based Message Authentication, |
- | <file bash / | + | |
- | PATH=/sbin:/bin:/ | + | |
- | MAILTO=root | + | |
- | HOME=/ | + | |
- | # For details see man 4 crontabs | + | ==== Installation von OpenDKIM ==== |
+ | Die Installation gestaltet sich sehr einfach, da wir das EPEL-Paket direkt mit **yum** installieren können. | ||
+ | # yum install opendkim | ||
- | # Example of job definition: | + | Was bei der Installation alles an Dateien und Verzeichnisse neu im System hinzugefügt worden sind, überprüfen wir mit Hilfe von **rpm -qil < |
- | # .---------------- minute (0 - 59) | + | # rpm -qil opendkim |
- | # | .------------- hour (0 - 23) | + | |
- | # | | .---------- day of month (1 - 31) | + | |
- | # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... | + | |
- | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun, | + | |
- | # | | | | | | + | |
- | # * * * * * user-name command to be executed | + | |
- | # Django | + | < |
- | # jede Stunde alle Maildomains | + | Version |
- | 0 * * * * root /root/bin/generate_local_domains_map | + | Release |
+ | Architecture: | ||
+ | Install Date: Wed 17 Dec 2014 03:22:40 PM CET | ||
+ | Group : System Environment/ | ||
+ | Size : 591007 | ||
+ | License | ||
+ | Signature | ||
+ | Source RPM : opendkim-2.9.2-2.el7.src.rpm | ||
+ | Build Date : Mon 04 Aug 2014 10:55:31 PM CEST | ||
+ | Build Host : buildvm-14.phx2.fedoraproject.org | ||
+ | Relocations : (not relocatable) | ||
+ | Packager | ||
+ | Vendor | ||
+ | URL : http:// | ||
+ | Summary | ||
+ | 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. | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | ==== 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: | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | ## See opendkim.conf(5) or / | ||
+ | |||
+ | ## 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 / | ||
+ | |||
+ | ## CONFIGURATION OPTIONS | ||
+ | |||
+ | # Specifies the path to the process ID file. | ||
+ | PidFile / | ||
+ | |||
+ | # Selects operating modes. Valid modes are s (sign) and v (verify). Default is v. | ||
+ | # Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing | ||
+ | # messages. | ||
+ | Mode v | ||
+ | |||
+ | # Log activity to the system log. | ||
+ | Syslog | ||
+ | |||
+ | # Log additional entries indicating successful signing or verification of messages. | ||
+ | SyslogSuccess | ||
+ | |||
+ | # 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 | ||
+ | |||
+ | # Attempt to become the specified user before starting operations. | ||
+ | UserID | ||
+ | |||
+ | # Create a socket through which your MTA can communicate. | ||
+ | Socket | ||
+ | |||
+ | # 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. | ||
+ | # OpenDKIM must be manually compiled with --enable-stats to enable this feature. | ||
+ | # | ||
+ | |||
+ | ## SIGNING OPTIONS | ||
+ | |||
+ | # Selects the canonicalization method(s) to be used when signing messages. | ||
+ | # Django : 2014-12-17 | ||
+ | # default: Canonicalization | ||
+ | Canonicalization | ||
+ | |||
+ | # 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. | ||
+ | # Django : 2014-12-17 | ||
+ | # default: Selector | ||
+ | # Selector | ||
+ | |||
+ | # Specifies the minimum number of key bits for acceptable keys and signatures. | ||
+ | # Django : 2014-12-17 | ||
+ | # default: MinimumKeyBits 1024 | ||
+ | # MinimumKeyBits 1024 | ||
+ | |||
+ | # Gives the location of a private key to be used for signing ALL messages. This | ||
+ | # directive is ignored if KeyTable is enabled. | ||
+ | # Django : 2014-12-17 | ||
+ | # default: KeyFile / | ||
+ | # | ||
+ | |||
+ | # 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 | ||
+ | # directive in the configuration file. Requires SigningTable be enabled. | ||
+ | # | ||
+ | |||
+ | # 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. Requires KeyTable be enabled. | ||
+ | # | ||
+ | |||
+ | # Identifies a set of " | ||
+ | # of the signing domains without credentials as such. | ||
+ | # | ||
+ | |||
+ | # Identifies a set " | ||
+ | # | ||
+ | # Django : 2014-12-17 | ||
+ | # default: unset | ||
+ | InternalHosts | ||
</ | </ | ||
+ | Unsere eigenen internen Hosts tragen wir in der Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | # To use this file, uncomment the # | ||
+ | # option in / | ||
+ | # may be added on separate lines (IP addresses, hostnames, or CIDR ranges). | ||
+ | # The localhost IP (127.0.0.1) should always be the first entry in this file. | ||
+ | 127.0.0.1 | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # Django : 2014-12-17 - internes Netz eingetragen | ||
+ | # default: unset | ||
+ | 10.0.0.0/24 | ||
+ | </ | ||
+ | |||
+ | Wie schon auch bei der **[[centos: | ||
+ | |||
+ | In der Konfigurationsdatei **main.cf** unseres Postfix-Mailserver tragen wir dazu in der Section **MILTER** nachfolgende Zeilen ein. | ||
+ | # vim / | ||
+ | |||
+ | <file bash / | ||
+ | |||
+ | ################################################################################ | ||
+ | ## MILTER | ||
+ | # Django : 2014-11-18 | ||
+ | # DMARC Test | ||
+ | # | ||
+ | opendkim_milter | ||
+ | # | ||
+ | amavisd_milter | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | In der Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | < | ||
+ | |||
+ | smtp inet n | ||
+ | smtpd | ||
+ | -o smtpd_sasl_auth_enable=no | ||
+ | -o smtpd_milters=${opendkim_milter}, | ||
+ | dnsblog | ||
+ | tlsproxy | ||
+ | </ | ||
+ | |||
+ | Bei unserem AMaViS-Host passen wir nun noch die Konfiguration an. Da wir die DKIM-Verifizierung mit Hilfe des **// | ||
+ | # vim / | ||
+ | |||
+ | <code bash>... | ||
+ | |||
+ | ################################################################################ | ||
+ | ## DKIM - Domain Key Identified Mail | ||
+ | # | ||
+ | |||
+ | # DKIM-Signaturen verifizieren | ||
+ | # Django : 2014-12-17 | ||
+ | # DKIM-Verifizierung mit Hilfe des opendkim-Milters vornehmen | ||
+ | # old : $enable_dkim_verification = 1; | ||
+ | $enable_dkim_verification = 0; | ||
+ | |||
+ | # DKIM-Signaturen erstellen | ||
+ | $enable_dkim_signing = 0; | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Anschließend aktivieren wir diese Änderung am AMaViS-Daemon. | ||
+ | # systemctl restart amavisd | ||
+ | |||
+ | ==== Programmstart ==== | ||
+ | Das Starten des Daemon erfolgt über folgenden Aufruf. | ||
+ | # systemctl start opendkim | ||
+ | |||
+ | Den erfolgreichen Start bzw. den Status des **smf-spf**-Daemon können wir bei Bedarf mit folgendem Aufruf abfragen. | ||
+ | # systemctl status opendkim | ||
+ | |||
+ | < | ||
+ | | ||
+ | | ||
+ | Docs: man: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Process: 19548 ExecStart=/ | ||
+ | Main PID: 19549 (opendkim) | ||
+ | | ||
+ | | ||
+ | |||
+ | Dec 17 16:00:28 vml000087.dmz.nausch.org opendkim[19549]: | ||
+ | Dec 17 16:00:28 vml000087.dmz.nausch.org systemd[1]: Started DomainKeys Identified Mail (DKIM) Milter. | ||
+ | </ | ||
+ | |||
+ | Im Syslog wird der Start des Daemon entsprechend dokumentiert | ||
+ | # less / | ||
+ | < | ||
+ | Dec 17 16:00:28 vml000087 systemd: Started DomainKeys Identified Mail (DKIM) Milter. | ||
+ | Dec 17 16:01:01 vml000087 systemd: Created slice user-0.slice. | ||
+ | Dec 17 16:01:01 vml000087 systemd: Starting Session 151 of user root. | ||
+ | Dec 17 16:01:01 vml000087 systemd: Started Session 151 of user root. | ||
+ | </ | ||
+ | |||
+ | |||
+ | Mit Hilfe von **netstat** können wir überprüfen, | ||
+ | # netstat -tulpen | ||
+ | |||
+ | < | ||
+ | Proto Recv-Q Send-Q Local Address | ||
+ | tcp 0 0 0.0.0.0: | ||
+ | tcp 0 0 127.0.0.1: | ||
+ | tcp 0 0 127.0.0.1: | ||
+ | </ | ||
+ | |||
+ | Gleiches können wir natürlich auch mit dem Befehl **lsof** erreichen | ||
+ | # lsof -i:8891 | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | Damit der Daemon automatisch beim Hochfahren des Servers gestartet wird, nutzen wir folgenden Aufruf. | ||
+ | # systemctl enable opendkim.service | ||
+ | |||
+ | ln -s '/ | ||
+ | |||
+ | Wollen wir überprüfen ob der Dienst automatisch startet, verwenden wir folgenden Aufruf. | ||
+ | |||
+ | # systemctl is-enabled opendkim.service | ||
+ | |||
+ | | ||
+ | |||
+ | Die Rückmeldung **enabled** zeigt an, dass der Dienst automatisch startet; ein **disabled** zeigt entsprechend an, dass der Dienst __nicht__ automatisch startet. | ||
+ | |||
+ | Nachdem wir nun unseren opendkim-Milter erfolgreich installiert und konfiguriert haben, können wir auch unseren Postfix Mailserver durchstarten, | ||
+ | |||
+ | ==== Tests und Logging ==== | ||
+ | |||
+ | Wurde die Nachricht unterwegs verändert, | ||
+ | Mar 26 12:52:15 vml000080 opendkim[10943]: | ||
+ | |||
+ | Hingegen wird bei positivem Ergebnis der DKIM-Validierung im maillog vermerkt. | ||
+ | Mar 26 18:02:48 vml000080 opendkim[7535]: | ||
+ | Mar 26 18:02:48 vml000080 opendkim[7535]: | ||
+ | |||
+ | Im Mailheader einer angenommenen eMail finden sich dann entsprechend auch Hinweise zur DKIM-Signaturüberprüfung. | ||
+ | Authentication-Results: | ||
+ | header.d=piratenpartei-bayern.de header.i=@piratenpartei-bayern.de | ||
+ | header.b=WFipEQPn; | ||
+ | |||
+ | Bei negativem Ergebnis wird entsprechend vermerkt. | ||
+ | Authentication-Results: | ||
+ | reason=" | ||
+ | header.d=kitterman.com header.i=@kitterman.com header.b=g01pGD3l; | ||
+ | dkim-adsp=none | ||
+ | |||
+ | |||
+ | ====== Links ====== | ||
+ | * **⇐ [[centos: | ||
+ | * **⇒ [[centos: | ||
+ | * **[[centos: | ||
+ | * **[[wiki: | ||
+ | * **[[http:// | ||