Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
centos:mail_c6:mta_9 [03.03.2014 22:44. ] – django | centos: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 |
- | Ursprünglich wurde DomainKeys unter dem Titel // | + | Ursprünglich wurde DomainKeys unter dem Titel // |
- | [[http:// | + | [[http:// |
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, | 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, | ||
+ | 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:// | ||
===== Installation von AMaVIS ===== | ===== Installation von AMaVIS ===== | ||
Zeile 16: | Zeile 17: | ||
==== Überprüfung der DKIM-Signaturen ==== | ==== Überprüfung der DKIM-Signaturen ==== | ||
+ | |||
+ | <WRAP round tip> \\ **WICHTIG: | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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: | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
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 / | ||
Zeile 61: | Zeile 72: | ||
Im nächsten Schritt erstellen wir uns nun unser Schlüsselpaar. Dazu benutzen wir die Option **genrsa** des Befehls **amavisd**: | Im nächsten Schritt erstellen wir uns nun unser Schlüsselpaar. Dazu benutzen wir die Option **genrsa** des Befehls **amavisd**: | ||
- | '' | + | '' |
# amavisd genrsa / | # amavisd genrsa / | ||
Zeile 140: | Zeile 151: | ||
</ | </ | ||
Den ersten Teil unserer Konfiguration haben wir schon erledigt. Nun weisen wir unseren **// | Den ersten Teil unserer Konfiguration haben wir schon erledigt. Nun weisen wir unseren **// | ||
- | <code perl>... | + | <code perl amavisd.conf>... |
$enable_dkim_signing = 0; # load DKIM signing code, keys defined by dkim_key | $enable_dkim_signing = 0; # load DKIM signing code, keys defined by dkim_key | ||
dkim_key(' | dkim_key(' | ||
- | '); # Nausch.org' | + | ', h=>' |
@dkim_signature_options_bysender_maps = ( | @dkim_signature_options_bysender_maps = ( | ||
- | { ' | + | { ' |
+ | | ||
+ | |||
+ | ... | ||
</ | </ | ||
+ | \\ | ||
+ | <WRAP round important> | ||
+ | </ | ||
- | <WRAP round notice>Die Variable | + | Die Angaben der Schlüsselparameter im obigen Beispiel haben folgende Bedeutungen: |
+ | | ||
+ | | ||
+ | * **/ | ||
+ | * **h=>' | ||
- | In unserer AMaViS-Konfiguration hinterlegen wir nun die sowohl | + | Über das Array **@dkim_signature_options_bysender_maps** können ferner Standardwerte für Signatur-Tags überschrieben werden. Dies kann per Sender(Domäne) erfolgen, oder wie im obigen Beispielals "// |
- | # vim /etc/amavisd.conf | + | |
- | <code perl amavisd.conf> | + | |
- | $enable_dkim_verification = 1; # enable | + | Haben wir noch weitere [[centos: |
- | $enable_dkim_signing = 0; # load DKIM signing | + | |
- | dkim_key(' | + | <code perl amavisd.conf> |
- | @dkim_signature_options_bysender_maps | + | |
- | | + | dkim_key(' |
- | + | ', h=>' | |
+ | dkim_key(' | ||
+ | ', h=>' | ||
+ | dkim_key('ebersberger-liedersammlung.de', ' | ||
+ | ', | ||
+ | |||
+ | ... | ||
</ | </ | ||
- | Bei diesem Beispiel gehen wir davon aus, dass wir nur eine Domäne auf unserem | + | Betreiben |
+ | # vim / | ||
+ | <file / | ||
+ | nausch.org | ||
+ | it-ignorant.de | ||
+ | it-ignorant.org | ||
+ | wetterstation-pliening.info | ||
+ | ebersberger-liedersammlung.de | ||
+ | </ | ||
- | Haben wir noch weitere | + | Hat man sehr viele Maildomänen, |
- | <code perl amavisd.conf> | + | Über ein kleines Script erzeugen wir die oben gezeigte Konfigurationsdatei // |
- | dkim_key(' | + | # vim / |
- | dkim_key('lists.nausch.org', 'main', '/var/amavis/dkim/dkim-key.pem'); # Nausch.org's Mailserver key | + | <file perl / |
- | dkim_key(' | + | # Perl-script zum Erstellen der Datei /etc/ |
+ | # Daten aus der mySQL-Datenbank " | ||
+ | # Wir verbinden uns dabei mit dem User " | ||
+ | # mit der Datenbank " | ||
+ | # Django : 2014-02-10 | ||
+ | # | ||
+ | use DBI; | ||
+ | use strict; | ||
+ | my $config = "/ | ||
+ | my $dbh = DBI-> | ||
+ | |||
+ | my $sth = $dbh-> | ||
+ | |||
+ | $sth-> | ||
+ | |||
+ | open (FH, "> $config" | ||
+ | while (my @row = $sth-> | ||
+ | print FH join(', ', @row), " | ||
+ | } | ||
+ | close FH; | ||
+ | $dbh-> | ||
+ | </file> | ||
+ | |||
+ | Anschließend tragen wir in der //**/etc/ | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | |||
+ | # Django : 2014-02-10 | ||
+ | # jede Stunde alle Maildomains in configfile für amavisd schreiben | ||
+ | 0 * * * * root / | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | In der **AMaViS**-Konfigurationsdatei // | ||
+ | # vim / | ||
+ | <code perl / | ||
+ | |||
+ | # Django : 2014-02-28 | ||
+ | # DKIM-Keys für automatisch generierte Domainliste definieren | ||
+ | open(filehandle,'/ | ||
+ | or die " | ||
+ | while (< | ||
+ | { | ||
+ | chomp; s/\s*#.*$//; next if $_ eq ''; | ||
+ | dkim_key($_, '140228', '/ | ||
+ | } | ||
+ | close(filehandle) or die " | ||
+ | |||
+ | # Django : 2014-02-07 | ||
+ | # | ||
+ | @local_domains_maps = ( read_hash("/ | ||
</ | </ | ||
- | Im ersten Schritt aktivieren | + | Damit **AMaViS** ausgehende eMail auch signieren kann, muss der Deamon natürlich wissen, welche Domains "// |
+ | |||
+ | Wir tragen also in unserer Konfigurationsdatei // | ||
+ | # vim / | ||
+ | |||
+ | <file perl / | ||
+ | |||
+ | # Django : 2012-05-21 | ||
+ | # @mynetworks = qw( 127.0.0.0/8 [::1] [FE80::]/10 [FEC0:: | ||
+ | # | ||
+ | @mynetworks = qw( 127.0.0.0/8 10.0.0.0/24 10.0.10.0/ | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | |||
+ | 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 **// | ||
+ | |||
+ | Für diese Nutzer haben wir auf unserem Postfix-Mailserver den Submission-Port **587** eingerichtet. Das besondere an diesem Port ist die zwingende Notwendigkeit, | ||
+ | |||
+ | Haben wir die Einrichtung des Submission-Ports auf Seiten unseres Postfix-Servers | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | |||
+ | # Django : 2013-02-15 | ||
+ | # # Submission auf Port 587 geöffnet | ||
+ | submission inet n | ||
+ | -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, | ||
+ | -o smtpd_etrn_restrictions=reject | ||
+ | -o smtpd_proxy_filter=amavis.dmz.nausch.org: | ||
+ | -o milter_macro_daemon_name=ORIGINATING | ||
+ | |||
+ | # Django : 2013-02-15 | ||
+ | # HTPPS auf Port 465 geöffnet | ||
+ | smtps | ||
+ | -o smtpd_tls_security_level=encrypt | ||
+ | -o smtpd_tls_wrappermode=yes | ||
+ | -o smtpd_sasl_auth_enable=yes | ||
+ | -o smtpd_client_restrictions=permit_mynetworks, | ||
+ | -o smtpd_etrn_restrictions=reject | ||
+ | -o smtpd_proxy_filter=amavis.dmz.nausch.org: | ||
+ | -o milter_macro_daemon_name=ORIGINATING | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Anschließend starten | ||
+ | # service postfix condrestart | ||
+ | |||
+ | Shutting down postfix: | ||
+ | Starting postfix: | ||
+ | |||
+ | 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 // | ||
+ | # vim / | ||
+ | |||
+ | <file perl / | ||
+ | |||
+ | # Django : 2014-02-10 | ||
+ | # default: $inet_socket_port = 10024; | ||
+ | # | ||
+ | $inet_socket_port = [10024, | ||
+ | |||
+ | ... | ||
+ | |||
+ | # 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{' | ||
+ | |||
+ | $policy_bank{' | ||
+ | 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 => [" | ||
+ | spam_admin_maps | ||
+ | warnbadhsender | ||
+ | # forward to a smtpd service providing DKIM signing service | ||
+ | # | ||
+ | # force MTA conversion to 7-bit (e.g. before DKIM signing) | ||
+ | smtpd_discard_ehlo_keywords => [' | ||
+ | bypass_banned_checks_maps => [1], # allow sending any file names and types | ||
+ | terminate_dsn_on_notify_success => 0, # don't remove NOTIFY=SUCCESS option | ||
+ | }; | ||
+ | |||
+ | ... | ||
+ | </ | ||
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. | ||
# service amavisd restart | # service amavisd restart | ||
- | Shutting down Mail Virus Scanner (amavisd): | + | |
- | | + | Starting Mail Virus Scanner (amavisd): |
==== öffentlichen Schlüssel ==== | ==== öffentlichen Schlüssel ==== | ||
- | Damit wir den unseren öffentlichen Schlüssel via DNS veröffentlichen können, | + | Damit wir den unseren öffentlichen Schlüssel via DNS veröffentlichen können, |
- | # amavisd | + | # amavisd |
- | < | + | |
- | main._domainkey.nausch.org. | + | < |
+ | 140224._domainkey.nausch.org. 3600 TXT ( | ||
" | " | ||
- | "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/COZmYML/9j/MRNH9C" | + | "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/CruOs3fCU0ujOStc" |
- | "hw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq" | + | " |
- | "34MgWsDi3h/mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/AH9eNB2F9qbRFR" | + | "2ObpRkzKRUXmAa0qVezUZwQIbKeiuKII0PnpQclDrmQrzSXcQWPT57tkPg17Q9Wa" |
- | "B4WWJyuCF6GNQLX9jQIDAQAB") | + | " |
+ | "ezqbLHLB8DLJQBZEGUILvJjAHX0722XyqYtkn1qfv63nPRGw/qqAW1072Gchq4ZS" | ||
+ | " | ||
+ | "/ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
</ | </ | ||
- | Auch hier können wir mittels **openssl** | + | Alternativ |
- | # | + | # |
| | ||
Die Dateiberechtigung passen wir entsprechend an: | Die Dateiberechtigung passen wir entsprechend an: | ||
- | # chmod 600 / | + | # chmod 600 / |
Die Schlüsseldatei enthält nun den public-key für unsere DKIM-Konfiguration. | Die Schlüsseldatei enthält nun den public-key für unsere DKIM-Konfiguration. | ||
- | # cat / | + | # cat / |
< | < | ||
- | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/COZmYML/9j/MRNH9C | + | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/CruOs3fCU0ujOStc |
- | hw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq | + | NN85TJh+5HvMa9m99C5XuRBlxOr+fp5BeIEtiPO0szKvvPojwrueCq0oOuEzjR/i |
- | 34MgWsDi3h/mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/AH9eNB2F9qbRFR | + | 2ObpRkzKRUXmAa0qVezUZwQIbKeiuKII0PnpQclDrmQrzSXcQWPT57tkPg17Q9Wa |
- | B4WWJyuCF6GNQLX9jQIDAQAB | + | mFUUaHeN3+pVGtMyjYekRaAoRlV+a1gD111kXMPhiaFTMIncoRBS/ |
+ | ezqbLHLB8DLJQBZEGUILvJjAHX0722XyqYtkn1qfv63nPRGw/qqAW1072Gchq4ZS | ||
+ | 4ZPQ89SrK4KcHt/XptSlztXMWtmRFQriHdvbjr1Fx7ZwXdTQ+ik2AUZLMdhMrQe6 | ||
+ | / | ||
+ | mJhVDnzZODQy0nSafedlr5g4VR36vgm0YPWjSyRNnC/ | ||
+ | 80uMPbEdujrw9gLbK3H8ow42iTicmgPgT3J5j70ZOo4o4FMtpZ/ | ||
+ | bkMjufLc29XHbtp22wfgq2Lmarr3+psaHokFaQrImkMbzdSL9CdabkLptanAilLS | ||
+ | cvq8UaKVC+G1+vHDgaweq3BhXD5+YcJnJlp4msUqqxGYlnx4RSvv8PipMU2DsVFb | ||
+ | NJSH5NJuS7GuzplNg+f20ysCAwEAAQ== | ||
-----END PUBLIC KEY----- | -----END PUBLIC KEY----- | ||
</ | </ | ||
- | Diesen Schlüssel stellen | + | <WRAP round important> |
- | | + | </ |
+ | |||
+ | Die nachfolgende Zeichenfolge veröffentlichen wir nun überunseren Nameserver. Dazu tragen wir die Textausgabe entweder in die ZONEN-Datei unseres eigenen DNS-Servers ein, tragen die Daten in die WEB-GUI unseres ISPs ein oder schicken die Daten dem DNS-Administrator des Domain-Hosters mit der Bitte, diese dort zu hinterlegen. | ||
+ | |||
+ | Alternativ | ||
+ | |||
+ | # amavisd showkeys | ||
+ | < | ||
+ | 140224._domainkey.omni128.de. 3600 TXT ( | ||
+ | "v=DKIM1; p=" | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | ... | ||
+ | |||
+ | ... | ||
+ | |||
+ | ; key#16, domain c3n705.guru, | ||
+ | 140224._domainkey.c3n705.guru. 3600 TXT ( | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | "/ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | </ | ||
+ | ===== 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 **< | ||
+ | **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 "// | ||
+ | * **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, | ||
+ | _adsp._domainkey.sec-mail.guru. | ||
+ | Diesen Record veröffentlichen wir nun über unseren DNS. | ||
===== Tests ===== | ===== Tests ===== | ||
Zeile 220: | Zeile 464: | ||
# amavisd testkeys | # amavisd testkeys | ||
- | TESTING# | + | TESTING# |
... | ... | ||
... | ... | ||
... | ... | ||
- | TESTING# | + | TESTING# |
Wollen wir nur den Schlüssel einer bestimmten Domain testen, so verwenden wir folgenden Aufruf. | Wollen wir nur den Schlüssel einer bestimmten Domain testen, so verwenden wir folgenden Aufruf. | ||
# amavisd testkey domain omni128.de | # amavisd testkey domain omni128.de | ||
- | TESTING# | + | TESTING# |
Das folgende Beispiel zeigt eine Abfrage, die die Fehlermeldung **invalid (public key: OpenSSL error: bad base64 decode)** nach sich zieht. | Das folgende Beispiel zeigt eine Abfrage, die die Fehlermeldung **invalid (public key: OpenSSL error: bad base64 decode)** nach sich zieht. | ||
# amavisd testkey domain ebersberger-liedersammlung.de | # amavisd testkey domain ebersberger-liedersammlung.de | ||
- | TESTING# | + | TESTING# |
Die Fehlermeldung **bad base64 decode** weißt direkt auf einem Typo-Fehler im Schlüsseldaten hin! | Die Fehlermeldung **bad base64 decode** weißt direkt auf einem Typo-Fehler im Schlüsseldaten hin! | ||
Zeile 240: | Zeile 484: | ||
# amavisd testkey domain ebersberger-liedersammlung.de | # amavisd testkey domain ebersberger-liedersammlung.de | ||
- | TESTING# | + | TESTING# |
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, | 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**, | Wurde der public DKIM-Schlüssel **revoked**, | ||
- | TESTING# | + | TESTING# |
Möchte man einen DKIM-Schlüssel zurückziehen (**revoke**), | Möchte man einen DKIM-Schlüssel zurückziehen (**revoke**), | ||
main._domainkey.piraten-it.guru | main._domainkey.piraten-it.guru | ||
- | Wir können natürlich auch direkt den TXT-Record eines Hosts abfragen: | + | Wir können natürlich auch direkt den TXT-Record eines Hosts abfragen |
- | # host -t TXT main._domainkey.nausch.org | + | # host -t TXT 140224._domainkey.nausch.org |
- | main._domainkey.nausch.org descriptive text " | + | < |
+ | 140224._domainkey.nausch.org descriptive text " | ||
- | ==== local ==== | + | |
+ | ==== lokaler Test beim Empfänger/ | ||
Für die abschließenden Test aktivieren wir nun in der AMaViS-Konfigurationsdatei // | Für die abschließenden Test aktivieren wir nun in der AMaViS-Konfigurationsdatei // | ||
# vim / | # vim / | ||
Zeile 261: | 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 | + | # service amavisd |
- | | + | Shutting |
- | | + | Starting Mail Virus Scanner (amavisd): |
Schicken wir nun eine Test-eMail so findet der Empfänger im Mailheader die entsprechende DKIM-Signatur: | Schicken wir nun eine Test-eMail so findet der Empfänger im Mailheader die entsprechende DKIM-Signatur: | ||
< | < | ||
- | content-transfer-encoding: | + | content-transfer-encoding: |
- | :subject: | + | : |
- | : | + | 140224; t=1394130616; x=1395945017; bh=frcCV1k9oG9oKj3dpUqdJg1Px |
- | HSbA6sPw6t20KKJq4BJloWj/gx+FxejGNDKe4s=; b=SY5VgOrZ96JkrXrte9SJQ | + | RT2RSN/XKdLCPjaYaY=; b=JTAoETI+ZtTJ0xFDk4DcZqDxPAq+fOuQ+BbjyYmMx |
- | 5FvtveuL9D64c0snDhqNNH/QeaYUGQRKPeNvkkLRMoC+pZpSUL4jcsNm3R3cIrKb | + | izj2W0G8zJe+a5RVAKj9nFlPgPB1KtQ3rCPXmYsn59zJ/ |
- | vPxz94JSm2cSh8cMXjDLcqxfbTd0CEv3lh2VrCSZVVwyoknH/+Z6BHYcJuaMJIrj | + | Hf3z8QmFmPWvvBx/bLKWrs9+RwsckDsJ7OSh1u3pOvqaTzdMjOcxt3CFNFXhSBj0 |
- | DRI//gty7R70y6q4IJvskA= | + | ipOZa2FrXNeHJpAhMpAFZ9ynhxV8ekg9v000f6ZLKlzTj5MNuXzohhfdH7I1hy/R |
+ | b9r+/ | ||
+ | o+LB2i8zLWNe56hrKDzEoOS872xQQvErezZ4+X7UPpMeswspcaLdnSkbeWMNGElw | ||
+ | pTpL/h/WN3lJiVYB7+ZrC0k/ | ||
+ | S4Gnk0yXgrx6B9wVwytAhEguDe3dhm6stQgkzvSi0sl1I9WV85OS3+5sFfOpuvju | ||
+ | icOrI2DGNZnuFWFmbiaTLmMlw4y2QENxP/ | ||
+ | mqH8mwZRdaTcQD2M3mtGNqDYIlnCsir/ | ||
+ | XkEEoELtW7aIWIKM2xWagUtmVVW/ | ||
+ | dk= | ||
</ | </ | ||
Der empfangende Mailserver ist mit Hilfe des **Authentication-Results:// | Der empfangende Mailserver ist mit Hilfe des **Authentication-Results:// | ||
- | < | + | < |
- | dkim=pass (1024-bit key) header.d=nausch.org | + | dkim=pass (4096-bit key) header.d=nausch.org |
</ | </ | ||
+ | |||
Wurde die Nachricht hingegen verändert, so schlägt die Überprüfung fehl und wird entsprechend quittiert: | Wurde die Nachricht hingegen verändert, so schlägt die Überprüfung fehl und wird entsprechend quittiert: | ||
< | < | ||
Zeile 285: | Zeile 540: | ||
header.d=controlc.de | header.d=controlc.de | ||
</ | </ | ||
- | Die Veränderung der Nachricht passierte in dem obigen Beispiel dadurch, dass die Nachricht aus einer Mailingliste vom Mailinglisten verändert wurde, da am ende ein Listenspezifischer | + | Die Veränderung der Nachricht passierte in dem obigen Beispiel dadurch, dass die Nachricht aus einer Mailingliste vom Mailinglisten-Server |
==== WEB-online ==== | ==== WEB-online ==== | ||
Eine sehr gute und einfache Möglichkeit die DKIM-Konfiguration zu testen, stellt die [[http:// | 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. | Die angegebene temporäre eMailadresse kopieren wir uns und schicken an diese eine Testnachricht. | ||
- | {{ :centos:mailserver: | + | {{ :centos:mail_c6: |
Über die Schaltfläche **//[View Results]// | Über die Schaltfläche **//[View Results]// | ||
=== Original Message: === | === Original Message: === | ||
- | < | + | < |
- | X-Original-To: | + | X-Original-To: |
- | Delivered-To: | + | Delivered-To: |
- | Received: from mx1.nausch.org (mx1.nausch.org [88.217.187.21]) | + | Received: from mx01.nausch.org (mx01.nausch.org [217.91.103.190]) |
- | by www.brandonchecketts.com (Postfix) with ESMTP id 2AB933091E | + | by yen.roundsphere.com (Postfix) with ESMTP id 7297B53300D2 |
- | for <zSQ3lX8C5X@www.brandonchecketts.com>; | + | for <Dj4n90-i5-a-G33k@www.brandonchecketts.com>; |
- | Received: from localhost | + | Received: from viruswall.dmz.nausch.org |
- | by mx1.nausch.org (Postfix) with ESMTP id 392E71158615 | + | by mx01.nausch.org (Postfix) with ESMTP id 691224A |
- | for <zSQ3lX8C5X@www.brandonchecketts.com>; | + | for <Dj4n90-i5-a-G33k@www.brandonchecketts.com>; |
DKIM-Signature: | DKIM-Signature: | ||
- | x-mailer: | + | content-transfer-encoding: |
- | :content-transfer-encoding: | + | : |
- | : | + | : |
- | t=1247914197; x=1249728597; bh=E1isxuEic/ | + | mKE3eWNgYb30A42NNvzmrD4zdGQYblGKdqriyyJM=; b=FM7au9fI7gUwznGnpZd |
- | HS/Xwkrnr3I=; b=EEIoq4COIkREvU+Oil+f0Qg0yrwdYX0mZFEtnlqRR06ck6HV | + | m2iCsFB0ufNhWGcGNadPZC82G6XhJ+9TRrXIhqgBLHWvVMZ4XvcWfoX0QEwjwU8Q |
- | Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z | + | SuLItU4J/+HuGFhrgEkbDO3TzYvRg1LzgTVX4CeYSfQ7rwcoOrcCmDge1li9W+kB |
- | D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/sqnULNldJk= | + | kfmk3ZSdwHJIjAU+qvb9fY706FGZpv8vMm6k5jH4fIptrNsncyT131P4bp9Kj4eF |
+ | kIYCz1jErtbsxicWmUMv4Jvb02+hfYfecmoT318xsq6J8IojIVNVLEeBDewkhI0s | ||
+ | ae5tjbgF8HUM8v3STvbd9q78+wVHerSV/L3KyUJQjMlQr+dWXn2W/ | ||
+ | xNlNdKlekrl1GdqGgIFxWAzQncl0qLWzvla3QZpoA/ | ||
+ | 1TDWALr1TqHP5Hlw9uuBKxe24JEqBf+R+Srpy1rJFXVjNhE6bskYC+mk4czfjPZL | ||
+ | LmJPRUNiVwI50scsxq6p5uYFqab0ls+kv7pBYITbxuHtZdtEFuS/ | ||
+ | l1Npp173MIWTT/ | ||
+ | ivaFQpBFqNna91f2/ | ||
+ | BiywAPRwJeqcAn2WemOdRrQA= | ||
X-Virus-Scanned: | X-Virus-Scanned: | ||
- | Received: from mx1.nausch.org ([127.0.0.1]) | + | Received: from mx01.nausch.org ([10.0.0.80]) |
- | by localhost | + | by viruswall.dmz.nausch.org |
- | with ESMTP id zUoWGqr6KT3G | + | with ESMTP id cQavTPLwa_If |
- | Sat, 18 Jul 2009 12:49:57 +0200 (CEST) | + | Thu, 6 Mar 2014 19:42:00 +0100 (CET) |
- | Received: from buero.nausch.org (office.nausch.org [192.168.10.20]) | + | Received: from pml010045.intra.nausch.org (vml000020.dmz.nausch.org [10.0.0.20]) |
- | by mx1.nausch.org (Postfix) with ESMTP | + | (using SSLv3 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) |
- | for <zSQ3lX8C5X@www.brandonchecketts.com>; | + | (No client certificate requested) |
- | Received: by buero.nausch.org | + | by mx01.nausch.org (Postfix) with ESMTPSA |
- | id 5F1722DC040E; | + | for <Dj4n90-i5-a-G33k@www.brandonchecketts.com>; |
- | Subject: Testmessage | + | Message-ID: < |
- | From: Michael Nausch | + | Date: Thu, 06 Mar 2014 19:42:09 +0100 |
- | Reply-To: michael@nausch.org | + | From: " |
- | To: zSQ3lX8C5X@www.brandonchecketts.com | + | User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/ |
- | Content-Type: | + | MIME-Version: |
- | Content-Transfer-Encoding: | + | To: Dj4n90-i5-a-G33k@www.brandonchecketts.com |
- | Organization: | + | Subject: DKIM-Test |
- | Date: Sat, 18 Jul 2009 12:49:57 +0200 | + | X-Enigmail-Version: |
- | Message-Id: < | + | Content-Type: |
- | Mime-Version: | + | Content-Transfer-Encoding: |
- | X-Mailer: Evolution 2.12.3 (2.12.3-8.el5_2.3) | + | |
- | HI, | + | -----BEGIN PGP SIGNED MESSAGE----- |
+ | Hash: SHA1 | ||
- | ist nur ein Test f=C3=BCr' | + | Na, dann wollen wir mal sehen,ob das Ganze auch so funktioniert, |
+ | wir uns das vorstellen! | ||
+ | -----BEGIN PGP SIGNATURE----- | ||
+ | Version: GnuPG v1.4.13 (GNU/ | ||
+ | Comment: Using GnuPG with Thunderbird - http:// | ||
- | ttyl, | + | iQIcBAEBAgAGBQJTGMGAAAoJEAdOz2FQpr/ |
- | Django | + | 4uSwsIfcYu4iMnpjDtDk2+z3EqW/ |
+ | On4tnNlE5BgS5l6Dz4VnteBmt71NCOjSiWe2FipDsWxohjT+F+jPgeoPdk8S+OJM | ||
+ | Jtzchq8VxiMh7n1evD14/ | ||
+ | z0+GTv98SYkVADVkru7a24A8GRklWnP1D9KpOQhMsFa4ip4YjW7khfsPd5oSrNOC | ||
+ | VxI70za89AeN/ | ||
+ | fzX9FKIq6Xqkvrq0T07ZWvOU33hY/ | ||
+ | CaQEhKbgkVK2YJvXlpmsgc10FwNcpXHilLlUDsb+fC0ZQgZNBlu0hXs+56CbWM8l | ||
+ | 81r9w3nPQ7jyo4FRQmFtzKPcOffs3+272bLoPTTjAPZCNogJhIfn60zQm6JEnTYS | ||
+ | VjwACvx2JEKI7sZ26CWk4V0fVMZU8lZUCbIqK+fNpOtJ9dA8O2t9/ | ||
+ | vQMB1bRXgMyxItR+L+PA9FW0xdInFlNvcetHRNBXaAYkht+zq5anpUjn9FrFypTQ | ||
+ | EowtsmxX9pfKCPqBEvdT | ||
+ | =Jb01 | ||
+ | -----END PGP SIGNATURE----- | ||
</ | </ | ||
=== DKIM Information: | === DKIM Information: | ||
Zeile 346: | Zeile 625: | ||
Message contains this DKIM Signature: | Message contains this DKIM Signature: | ||
DKIM-Signature: | DKIM-Signature: | ||
- | x-mailer: | + | content-transfer-encoding: |
- | :content-transfer-encoding: | + | : |
- | : | + | : |
- | t=1247914197; x=1249728597; bh=E1isxuEic/ | + | mKE3eWNgYb30A42NNvzmrD4zdGQYblGKdqriyyJM=; b=FM7au9fI7gUwznGnpZd |
- | HS/Xwkrnr3I=; b=EEIoq4COIkREvU+Oil+f0Qg0yrwdYX0mZFEtnlqRR06ck6HV | + | m2iCsFB0ufNhWGcGNadPZC82G6XhJ+9TRrXIhqgBLHWvVMZ4XvcWfoX0QEwjwU8Q |
- | Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z | + | SuLItU4J/+HuGFhrgEkbDO3TzYvRg1LzgTVX4CeYSfQ7rwcoOrcCmDge1li9W+kB |
- | D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/sqnULNldJk= | + | kfmk3ZSdwHJIjAU+qvb9fY706FGZpv8vMm6k5jH4fIptrNsncyT131P4bp9Kj4eF |
+ | kIYCz1jErtbsxicWmUMv4Jvb02+hfYfecmoT318xsq6J8IojIVNVLEeBDewkhI0s | ||
+ | ae5tjbgF8HUM8v3STvbd9q78+wVHerSV/L3KyUJQjMlQr+dWXn2W/ | ||
+ | xNlNdKlekrl1GdqGgIFxWAzQncl0qLWzvla3QZpoA/ | ||
+ | 1TDWALr1TqHP5Hlw9uuBKxe24JEqBf+R+Srpy1rJFXVjNhE6bskYC+mk4czfjPZL | ||
+ | LmJPRUNiVwI50scsxq6p5uYFqab0ls+kv7pBYITbxuHtZdtEFuS/ | ||
+ | l1Npp173MIWTT/ | ||
+ | ivaFQpBFqNna91f2/ | ||
+ | BiywAPRwJeqcAn2WemOdRrQA= | ||
Zeile 360: | Zeile 647: | ||
c= Method: | c= Method: | ||
d= Domain: | d= Domain: | ||
- | s= Selector: | + | s= Selector: |
q= Protocol: | q= Protocol: | ||
- | bh= E1isxuEic/ | + | bh= c0z |
- | HS/Xwkrnr3I= | + | mKE3eWNgYb30A42NNvzmrD4zdGQYblGKdqriyyJM= |
- | h= Signed Headers: | + | h= Signed Headers: |
- | :content-transfer-encoding: | + | : |
- | : | + | : |
- | b= Data: | + | b= Data: |
- | Oap6CURctdOqHqlFhkG4TXJtgDKNNhaAbDqG8wXlYFxhbQ+s1dY+TIBQDhVy445z | + | m2iCsFB0ufNhWGcGNadPZC82G6XhJ+9TRrXIhqgBLHWvVMZ4XvcWfoX0QEwjwU8Q |
- | D4NWWQ1UtbHocHrCHl0j1yPHVCSgWNIlRR7w4By1LsuNhTbY/sqnULNldJk= | + | SuLItU4J/+HuGFhrgEkbDO3TzYvRg1LzgTVX4CeYSfQ7rwcoOrcCmDge1li9W+kB |
+ | kfmk3ZSdwHJIjAU+qvb9fY706FGZpv8vMm6k5jH4fIptrNsncyT131P4bp9Kj4eF | ||
+ | kIYCz1jErtbsxicWmUMv4Jvb02+hfYfecmoT318xsq6J8IojIVNVLEeBDewkhI0s | ||
+ | ae5tjbgF8HUM8v3STvbd9q78+wVHerSV/L3KyUJQjMlQr+dWXn2W/ | ||
+ | xNlNdKlekrl1GdqGgIFxWAzQncl0qLWzvla3QZpoA/ | ||
+ | 1TDWALr1TqHP5Hlw9uuBKxe24JEqBf+R+Srpy1rJFXVjNhE6bskYC+mk4czfjPZL | ||
+ | LmJPRUNiVwI50scsxq6p5uYFqab0ls+kv7pBYITbxuHtZdtEFuS/ | ||
+ | l1Npp173MIWTT/ | ||
+ | ivaFQpBFqNna91f2/ | ||
+ | BiywAPRwJeqcAn2WemOdRrQA= | ||
Public Key DNS Lookup | Public Key DNS Lookup | ||
- | Building DNS Query for main._domainkey.nausch.org | + | Building DNS Query for 140224._domainkey.nausch.org |
- | Retrieved this publickey from DNS: v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDWypzomx/COZmYML/9j/MRNH9Chw652qzbHjM4RdzpeWzainKC+kyYP+VuoJWMtUX2KSo+kTuWaH4AUgwWSxKq4IBq34MgWsDi3h/mFekOqtnIHTZM16CLtouQDlkUYdatXLcMTlhIO/AH9eNB2F9qbRFRB4WWJyuCF6GNQLX9jQIDAQAB | + | Retrieved this publickey from DNS: v=DKIM1; p=MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuJ3/CruOs3fCU0ujOStcNN85TJh+5HvMa9m99C5XuRBlxOr+fp5BeIEtiPO0szKvvPojwrueCq0oOuEzjR/i2ObpRkzKRUXmAa0qVezUZwQIbKeiuKII0PnpQclDrmQrzSXcQWPT57tkPg17Q9WamFUUaHeN3+pVGtMyjYekRaAoRlV+a1gD111kXMPhiaFTMIncoRBS/gYN8FjfekH+ezqbLHLB8DLJQBZEGUILvJjAHX0722XyqYtkn1qfv63nPRGw/ |
Validating Signature | Validating Signature | ||
result = pass | result = pass | ||
- | Details: </ | + | Details: |
+ | </ | ||
=== SPF Information: | === SPF Information: | ||
< | < | ||
- | 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: | + | Found the following namesevers for nausch.org: |
- | Retrieved this SPF Record: v=spf1 ip4:88.217.187.21/32 a mx include: | + | Retrieved this SPF Record: v=spf1 ip4:217.91.103.190/32 a mx include: |
- | Result: | + | using authoritative server {ns.udagdns.de} directly for SPF Check |
+ | Result: | ||
Result code: pass | Result code: pass | ||
- | Local Explanation: | + | Local Explanation: |
- | spf_header = Received-SPF: | + | spf_header = Received-SPF: |
</ | </ | ||
+ | === SPAM-Scoring: | ||
+ | < | ||
+ | Message is NOT marked as spam | ||
+ | Points breakdown: | ||
+ | -0.0 T_RP_MATCHES_RCVD | ||
+ | domain | ||
+ | -0.0 SPF_PASS | ||
+ | 0.9 FRT_TODAY2 | ||
+ | -1.9 BAYES_00 | ||
+ | [score: 0.0000] | ||
+ | -0.1 DKIM_VALID_AU | ||
+ | domain | ||
+ | 0.1 DKIM_SIGNED | ||
+ | -0.1 DKIM_VALID | ||
+ | </ | ||
+ | |||
+ | ===== Besonderheit - Mailinglisten ===== | ||
+ | Wie am Anfang dieses Artikels beschrieben, | ||
+ | |||
+ | Der empfangende Mail-Server ist nun in der Lage, an Hand des öffentlichen Schlüssels, | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== 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 | ||
+ | |||
+ | ... | ||
+ | </ | ||
+ | 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 | ||
+ | |||
+ | Shutting down mailman: | ||
+ | Starting mailman: | ||
+ | |||
+ | ===== Besonderheit - DMARC ===== | ||
+ | Möchten wir DMARC bei der Bewertung der anzunehmenden Nachrichten mit berücksichtigen, | ||
+ | |||
+ | Die Installation und Konfiguration von OpenDMARC ist im Kapitel [[centos: | ||
+ | ==== 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 < | ||
+ | # rpm -qil opendkim | ||
+ | < | ||
+ | Version | ||
+ | Release | ||
+ | Install Date: Tue 25 Mar 2014 06:04:24 PM CET Build Host: lisse.hasselt.wieers.com | ||
+ | Group : System Environment/ | ||
+ | Size : 593359 | ||
+ | Signature | ||
+ | Packager | ||
+ | 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 (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: | ||
+ | |||
+ | # Create a socket through which your MTA can communicate. | ||
+ | # Django: 2014-03-25 | ||
+ | # default: Socket inet: | ||
+ | Socket inet: | ||
+ | |||
+ | # 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. | ||
+ | # | ||
+ | |||
+ | ## SIGNING OPTIONS | ||
+ | |||
+ | # Selects the canonicalization method(s) to be used when signing messages. | ||
+ | Canonicalization relaxed/ | ||
+ | |||
+ | # 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. | ||
+ | # | ||
+ | |||
+ | # Defines the name of the selector to be used when signing messages. | ||
+ | # | ||
+ | |||
+ | # Gives the location of a private key to be used for signing ALL messages. | ||
+ | # | ||
+ | |||
+ | # 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. | ||
+ | # | ||
+ | |||
+ | # 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. | ||
+ | # | ||
+ | |||
+ | # Identifies a set of " | ||
+ | # of the signing domains without credentials as such. | ||
+ | # | ||
+ | # Django : 2014-03-25 | ||
+ | ExternalIgnoreList | ||
+ | |||
+ | # Identifies a set internal hosts whose mail should be signed rather than verified. | ||
+ | # | ||
+ | </ | ||
+ | # vim / | ||
+ | Wie schon auch bei der [[centos: | ||
+ | |||
+ | In der Konfigurationsdatei **main.cf** unseres Postfix-Mailserver tragen wir nun noch am Ende nachfolgende Zeilen ein. | ||
+ | # vim / | ||
+ | <file bash / | ||
+ | |||
+ | # Django : 2014-03-16 | ||
+ | # SPF-Check und DKIM-Signaturüberprüfung via SMF-SPF- und DKIM-Milter einbinden. | ||
+ | smtpd_milters = | ||
+ | # SMF-SPF-Milter: | ||
+ | | ||
+ | # DKIM-Milter | ||
+ | | ||
+ | ... | ||
+ | </ | ||
+ | ==== Programmstart ==== | ||
+ | === erster manueller Start === | ||
+ | Nun können wir das erste mal den Daemon anstarten. | ||
+ | # service opendkim start | ||
+ | |||
+ | Starting OpenDKIM Milter: | ||
+ | |||
+ | In der Prozessliste finden wir nun unseren Prozess opendkim, der mit den Rechten des Users opendkim läuft: | ||
+ | # ps auxw | grep opendkim | ||
+ | |||
+ | opendkim | ||
+ | |||
+ | Mittels lsof können wir nun noch überprüfen, | ||
+ | # lsof -i :10011 | ||
+ | |||
+ | COMMAND | ||
+ | opendkim 7535 opendkim | ||
+ | |||
+ | === 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, | ||
+ | # 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 | ||
+ | |||
+ | 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: | ||
+ | Starting postfix: | ||
+ | |||
+ | ==== 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 ====== | ====== Links ====== | ||
* **[[centos: | * **[[centos: | ||
* **[[wiki: | * **[[wiki: | ||
* **[[http:// | * **[[http:// | ||
- | |||
- | ~~DISCUSSION~~ | ||
- | |||