DKIM – Domain Keys

Ich habe das Setup bereits unter FreeBSD gemacht (hier beschrieben) – unter Ubuntu ändert es sich nur leicht. Daher verweise ich ab und zu auf das FreeBSD Tutorial um nicht alles doppelt schreiben zu müssen 😉

 

Setup unter Ubuntu:

Installation

sudo apt-get install opendkim opendkim-tools

Konfiguration

Für eine einzelne Domain können mehrere Server das Versenden der Emails übernehmen. So kann es mehrere unterschiedliche öffentliche Schlüssel pro Sender Domain geben. Um diese Funktion zu unterstützen, wird der DNS-Namespace durch „Selektoren“ unterteilt. Selektoren sind willkürliche Namen unterhalb des „_domainkey“ Namensraum. Zum Beispiel können Selektoren die Namen der Serverstandorte angeben (z. B. „mta1“, „mta2“ und „mta3“.

Das Wichtigste ist: Der Selektor zeigt den öffentlichen Schlüssel des DomainKeys / DKIM an. Beispiel: Wenn dein Domain-Selektor „patsy“ lautet, lautet dein öffentlicher Schlüsselsatz „patsy._domainkey.yourdomain“; Wenn dein Domain-Selektor „mta1“ lautet, lautet dein öffentlicher Schlüsselsatz „mta1._domainkey.yourdomain“.

Ich möchte die Keys in folgendem Verzeichnis speichern:

sudo mkdir /etc/opendkim/
cd /etc/opendkim

Und nun den Key mit dem Selector „patsy“ für die Domain domain1.com generieren:

sudo /usr/bin/opendkim-genkey -s patsy -d domain1.com -t

Dieses Script hat jetzt im aktuellen Verzeichnis zwei Files generiert:

patsy.private
patsy.txt

Der Inhalt von patsy.txt kommt in den DNS Record von domain1.com rein.

Die detailierten Infos dazu in meinem anderen Tutorial für die Konfiguration unter FreeBSD:

Hauptunterschiede zur FreeBSD Config:

 FreeBSDUbuntu
Verzeichnis/var/db/dkim/keys/ /etc/opendkim/conf/keys
Usermailnullopendkim
Config File Location/usr/local/etc/mail/opendkim.conf/etc/opendkim.conf

Also Verzeichnisse erstellen & Dateien Verschieben

sudo mkdir -p /etc/opendkim/conf/keys
mv patsy.private /etc/opendkim/conf/keys/domain1.com.key
mv patsy.txt /etc/opendkim/conf/keys/domain1.com.public sudo chmod 600 /etc/opendkim/conf/keys/domain1.com.key sudo chown -R opendkim:opendkim /etc/opendkim/conf

Nun KeyFile & SigningTable erstellen:

sudo touch /etc/opendkim/conf/keyfile
sudo touch /etc/opendkim/conf/signingtable

Dann die Konfiguration wie hier beschrieben abschliessen.

Locations:

  • /etc/opendkim.conf
  • /etc/default/opendkim
  • /etc/opendkim/ (frei wählbar, die Keys sollten sich einfach nicht im /etc/mail Verzeichnis befinden -> siehe Fehlermeldungen)

StartupScript

sudo vi /etc/default/opendkim

Das File sollte so au aussehen:

# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
DAEMON_OPTS="-b s -c relaxed/simple -D -S rsa-sha1"
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
# default:
##SOCKET="local:/var/run/opendkim/opendkim.sock"
# listen on loopback on port 8892
SOCKET="inet:8892@localhost"
# listen on all interfaces on port 54321:
#SOCKET="inet:54321"
# listen on loopback on port 12345:
#SOCKET="inet:12345@localhost"
# listen on 192.0.2.1 on port 12345:
#SOCKET="inet:12345@192.0.2.1"

Und Service neu starten

sudo service opendkim stop
sudo service opendkim start

Mailer config

Einmal Sendmail und einmal Postfix als Beispiel.

Sendmail Config

Folgende Zeile noch ins sendmail.mc

INPUT_MAIL_FILTER(`opendkim', `S=inet:8892@localhost')dnl

Config File als root neu generieren

sudo -i
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
exit

und sendmail neu starten

sudo service sendmail restart

Postfix Config

Config File bearbeiten

vi /etc/postfix/main.cf

und folgende Zeilen einfügen

# dkim
milter_default_action = accept
smtpd_milters = inet:localhost:8892
# bei mehreren Miltern, müssten diese zum Beispiel so ergänzt werden:
# smtpd_milters = unix:spamass/spamass.sock, inet:localhost:8892
non_smtpd_milters = inet:localhost:8892

Legende:

  • milter_default_action = accept führt dazu, dass die Mails trotz defektem Milter akzeptiert werden sollen
  • smtpd_milters gelten für die Mails über das SMTP Protokoll
  • non_smtpd_milters gelten für lokale Mails (z.B. über sendmail)

und Postfix neu starten

service postfix restart

Testen

Wie hier beschrieben.

Fehlermeldungen

im mail.log

patsy._domainkey.domain1.com: key data is not secure: /etc/mail is writeable and owned by uid 118 which is not the executing uid (120) or the superuser
patsy opendkim[16018]: w5QE5QWt016241: error loading key ‚patsy._domainkey.domain1.com‘

Das ist anscheinend ein Bug, der bereits längst hätte gefixt werden müssen, wurde aber anscheinend noch nicht 😉

Problem war, dass ich als Key Verzeichnis:

/etc/mail/dkim/

wählte. Für /etc/mail/dkim/ habe ich ownership, etc korrekt eingestellt. Jedoch reklamiert er wegen den Einstellungen vom /etc/mail Verzeichnis.

Lösung:

Ein anderes Verzeichnis für die Keys anlegen. Ich arbeite jetzt mit

/etc/opendkim/conf/

 

Sep 6 13:03:15 patsy opendkim[2198]: patsy._domainkey.domain1.com: key data is not secure: /etc/opendkim/conf is writeable and owned by uid 120 which is not the executing uid (0)

so, selbes Problem wie oben. Hab jetzt den Besitzer vom Verzeichnis /etc/opendkim/conf/ geändert von bisher opendkim:opendkim auf root:root

cd /etc/opendkim
chown -R root:root conf/

Jetzt gehts ohne Errors durch

nach oben