class: center, middle ![img33r](postbote.webp) ## Eigenen Mailserver konfigurieren ## Googles und Yahoos DKIM-Anforderungen 2024 ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - Community-Video-Serie *"Nicht der Weisheit letzter Schluß"* auf
tube.tchncs.de
und
YouTube
mit **beruflichen** oder **privaten Projekten** - Kümmert sich auch um Mailserver :-) --- ### Neue Anforderungen: Google & Yahoo 2024 ![img33r](postbote2.webp) Seit Februar 2024 fordern Google & Yahoo zur **Spamreduzierung** von Mailserverbetreibern: * DKIM * SPF-Eintrag im DNS * DMARC-Eintrag im DNS Grundlagen zur Mailserver-Einrichtung in meinen Video:
Linux Web/Mail/Datenbank-Server: Installation, Konfiguration, Absicherung
. --- ### DKIM? **D**omain**K**eys **I**dentified **M**ail ist ein Protokoll, um die Authentizität von eMail-Absendern sicherzustellen und damit
eMail-Spoofing
(das Vortäuschen des Sendens von einer anderen Domain) zu verhindern. Ausgehende **Mails** werden **signiert** und der öffentliche Teil des **DKIM-Schlüsselpaares** wird **im DNS** hinterlegt. Hierdurch kann der Empfänger überprüfen, ob eine Mail wirklich von einer Domain verschickt wurde. **DKIM** ist **kein** eigentlicher **Spamschutz**, aber wenn Spam-Mails von einem Mailserver kommen, der DKIM verwendet, kann die ganze Domain auf eine Blacklist gesetzt werden. Stimmen **Signatur** und **Domain** **nicht überein**, so kann eine Mail sofort automatisch **ausgefiltert** werden. Verwendet ein Mailserver **kein DKIM**, so kann er als **potentieller Spamversender** (mit höherem Spamscore) und Mails von diesem als weniger vertrauenswürdig angesehen werden, was eine strengere Überprüfung nach sich ziehen kann. --- ### Webadresse + Domain In den kommenden Skriptzeilen werden die Variablen ***$DT_INST_hostname*** und ***$DT_INST_domain*** verwendet: ```bash # Webadresse (FQDN), unter der die VM erreichbar ist export DT_INST_hostname='ttdemo.pc-kiel.de' # Liste mit Domains, für die der Mailserver zuständig ist # (mehrere mit Komma und Leerzeichen trennen): export DT_INST_domain='ttdemo.pc-kiel.de' ``` --- ### Installation + Konfiguration Hier **installieren** wir die **Software** und erstellen eine **grundlegende Konfiguration**. ```bash # Paket(e) für DKIM installieren apt -y install opendkim # Verzeichnis für die DKIM-Konfiguration anlegen mkdir -p /etc/opendkim # Alle noch zu konfigurierenden Optionen entfernen sed -i -e '/^Mode/d' -e '/^KeyTable/d' -e '/^SigningTable/d' -e '/^ExternalIgnoreList/d'\ -e '/^InternalHosts/d' /etc/opendkim.conf # Pfade zu Konfigurationsdateien festlegen echo ' Mode sv KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts' >> /etc/opendkim.conf ``` ***Mode***: **s** (signer/Signierer) und **v** (verifier/Überprüfer) --- ### Mehr Konfiguration Damit OpenDKIM die **Schlüssel finden** kann, legen wir Tabellen und eine **Liste** mit **vertrauenswürdigen IP-Adressen** an. ```bash # Tabelle um die privaten Schlüssel für eine Domain zu finden echo "default._domainkey.$DT_INST_domain $DT_INST_domain:default:/etc/opendkim/keys/$DT_INST_domain/default.private" > /etc/opendkim/KeyTable # Tabelle um den privaten Schlüssel zum Signieren einer Mail zu finden echo "*@$DT_INST_domain default._domainkey.$DT_INST_domain" > /etc/opendkim/SigningTable # Liste mit vertrauenswürdigen IPs erstellen # Alle IPs durchgehen + localhost (echo ::1 echo 127.0.0.1/8 for i in $(hostname -I) do # IP via "ip a" um Netmask ergänzen und alles in eine Zeile ip a | grep " $i" | sed -e 's/.*inet6 //' -e 's/.*inet //' -e 's/ .*//' done) | awk -vORS=' ' '{print}' > /etc/opendkim/TrustedHosts ``` --- ### DKIM-Schlüsselpaar Nun brauchen wir noch ein **DKIM-Schlüsselpaar**, das aus einem **öffentlichen** und einem **privaten Teil** besteht. ```bash # Schlüsselpaar erstellen mkdir -p /etc/opendkim/keys/$DT_INST_domain/ opendkim-genkey -D /etc/opendkim/keys/$DT_INST_domain -d $DT_INST_domain -s default ``` ***default*** ist hierbei der Selektor. Daraus ergibt sich für den DNS-Eintrag ***default._domainkey.$DT_INST_domain*** als Namen. --- ### Postfix Damit ausgehende **Mails** mit **DKIM signiert** werden, müssen wir die Postfix-Konfiguration anpassen: ```bash # DKIM-Filter aktivieren echo 'smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept' >> /etc/postfix/main.cf # postfix-Benutzer zur opendkim-Gruppe hinzufügen gpasswd -a postfix opendkim # Besitzer richtig setzen chown -R opendkim:opendkim /etc/opendkim # OpenDKIM- und Postfix-Dienst neu starten service opendkim restart service postfix restart ``` ***Wissensteil***: **
Postfix
** ist ein **
MTA
** (Mail Transfer Agent). --- ### DNS-Eintrag Jetzt brauchen wir noch den **öffentlichen** Teil des **DKIM-Schlüssels**,... ```bash # Öffentlichen Teil des DKIM-Schlüssels ausgeben echo sed -e 's/^.*(//' -e 's/^[[:space:]]*//' -e 's/[[:space:]]*).*$//' -e 's/"//g'\ /etc/opendkim/keys/$DT_INST_domain/default.txt | awk -vORS='' '{print}' echo; echo ``` um diesen beim Domain-Anbieter als neuen **Eintrag hinzuzufügen**: * Typ: TXT * Präfix: default._domainkey * Inhalt: *öffentlicher DKIM-Schlüssel* --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de