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 [27.11.2014 12:49. ] – [verifying] 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 353: | Zeile 350: | ||
Somit ergibt sich in unserem Anwendungsbeispiel, | Somit ergibt sich in unserem Anwendungsbeispiel, | ||
_adsp._domainkey.sec-mail.guru. | _adsp._domainkey.sec-mail.guru. | ||
- | Diesen Record veröffentlichen wir nun über unseren DNS. Somit kann ein Empfänger | + | Diesen Record veröffentlichen wir nun über unseren DNS. Somit kann ein Empfänger |
===== Tests ===== | ===== Tests ===== | ||
==== DNS + private key ==== | ==== DNS + private key ==== | ||
Nachdem der TXT zur Verfügung steht, können wir mit Hilfe von **amavisd** diesen Überprüfen. | Nachdem der TXT zur Verfügung steht, können wir mit Hilfe von **amavisd** diesen Überprüfen. | ||
- | # amavisd testkeys | + | # amavisd |
TESTING#1: 141126._domainkey.omni128.de | TESTING#1: 141126._domainkey.omni128.de | ||
Zeile 367: | Zeile 364: | ||
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 |
TESTING#1: 141126._domainkey.omni128.de | 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. | 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 |
TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de | TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de | ||
Zeile 378: | Zeile 375: | ||
Das nächste Beispiel zeigt eine Abfrage, die eine weitere Fehlermeldung nach sich zieht: | Das nächste Beispiel zeigt eine Abfrage, die eine weitere Fehlermeldung nach sich zieht: | ||
- | # amavisd testkey domain ebersberger-liedersammlung.de | + | # amavisd |
TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de => fail (OpenSSL error: data too large for key size) | TESTING#6: 141126._domainkey.ebersberger-liedersammlung.de => fail (OpenSSL error: data too large for key size) | ||
Zeile 589: | Zeile 586: | ||
===== Besonderheit - Mailinglisten ===== | ===== Besonderheit - Mailinglisten ===== | ||
- | FIXME | + | 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. | ||
+ | |||
+ | <WRAP center round tip> \\ | ||
+ | Nachfolgend finden sich daher Hinweise, wie man (s)einen Mailinglistenserver **Mailman** **// | ||
+ | </ | ||
==== eMail nicht verändern ==== | ==== eMail nicht verändern ==== | ||
- | FIXME | + | 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 ==== | ==== DKIM-Signaturen entfernen ==== | ||
- | FIXME | ||
+ | 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 | ||
+ | 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:// | ||