Nach unglaublich viel gefuckel hab ich es jetzt endlich geschafft, dass ausgehende E-Mails mit einer DKIM & DomainKey Signatur versehen werden.

    Wer noch keine DKIM/DomainKey Schlüssel erstellt hat, lese bitte erst den Eintrag 2487.

    Grundlage dafür war dkimproxy. Für Debian kann das Paket über aptitude oder apt-get bezogen werden.

    Nach der Installation gibt es zwei Dateien die für die Konfiguration von dkimproxy maßgeblich sind.

    Verifizierung eigehende E-mails -> /etc/dkimproxy/dkimproxy_in.conf

    Signierung ausgehender E-Mails -> /etc/dkimproxy/dkimproxy_out.conf

    Wer so wie ich nur E-Mails signieren möchte, kann in der /etc/init.d/dkimproxy die Zeile dafür auskommentieren

    # DKIMPROXY_IN_ARGS=“–hostname=${DKIM_HOSTNAME} –conf_file /etc/dkimproxy/dkimproxy_in.conf –user=${DKIMPROXYUSER} –group=${DKIMPROXYGROUP}“

    dkimproxy dem privaten Schlüssel mitgeben

    Dkimproxy muss nun noch den privaten Schlüssel bekommen, mit dem es dann ausgehende E-Mails signieren kann.

    keyfile  /etc/postfix/dkim/2nibbles4u.de/dkim_1

    DKIM & DomainKey Signierung „erzwingen“

    Jetzt kommt „mein Haken“ an der Sache, Postfix muss zwar noch angepasst werden, aber dazu später….

    In der bis jetzt erstellen Konfiguration signiert dkimproxy nur mit dkim und nicht mit domainkey wie ich es wollte. Nach einigem Suchen habe ich dann gesehen, dass dkimproxy einen Parameter sender_map unterstüzt. Dieser kann nicht über die /etc/dkimproxy/dkimproxy_out.conf angepasst werden und ermöglicht pro Domain zwei Signierungstypen zu aktivieren.

    Also habe ich die Datei /etc/postfix/domainkeys/domainkeyfile mit folgendem Inhalt erstellt.

    2nibbles4u.de domainkeys(a=rsa-sha1,c=nofws), dkim(a=rsa-sha256,c=relaxed)

    Dieser muss dann als weiterer Aufrufparameter im Startscript /etc/init.d/dkimproxy hinterlegt werden.

    DKIMPROXY_SENDERMAP="/etc/postfix/domainkeys/domainkeyfile"
    [...]
    DKIMPROXY_OUT_ARGS="--domain=${DOMAIN} --method=simple --conf_file /etc/dkimproxy/dkimproxy_out.conf --user=${DKIMPROXYUSER} --group=${DKIMPROXYGROUP}  --sender_map=${DKIMPROXY_SENDERMAP}"

    Postfix Anpassung

    Nun kommt die Postfix Anpassung.

    /etc/postfix/master.cf:
    
    #
    # modify the default submission service to specify a content filter
    # and restrict it to local clients and SASL authenticated clients only
    #
    submission  inet  n     -       n       -       -       smtpd
     -o smtpd_etrn_restrictions=reject
     -o smtpd_sasl_auth_enable=yes
     -o content_filter=dksign:[127.0.0.1]:10027
     -o receive_override_options=no_address_mappings
     -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
    
    #
    # specify the location of the DKIM signing proxy
    # Note: we allow "4" simultaneous deliveries here; high-volume sites may
    #   want a number higher than 4.
    # Note: the smtp_discard_ehlo_keywords option requires Postfix 2.2 or
    #   better. Leave it off if your version does not support it.
    #
    dksign    unix  -       -       n       -       4       smtp
     -o smtp_send_xforward_command=yes
     -o smtp_discard_ehlo_keywords=8bitmime,starttls
    
    #
    # service for accepting messages FROM the DKIM signing proxy
    #
    127.0.0.1:10028 inet  n  -      n       -       10      smtpd
     -o content_filter=
     -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
     -o smtpd_helo_restrictions=
     -o smtpd_client_restrictions=
     -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o mynetworks=127.0.0.0/8
     -o smtpd_authorized_xforward_hosts=127.0.0.0/8
    

    Nach einem Neustart aller Dienste sollten dann jetzt ausgehende E-Mails mit dkim & DomainKey signiert werden. Ich bin mir nicht mehr ganz sicher, aber ich glaube ich habe die Ports von dkimproxy in der Out Datei auf 10027 & 10028 umgestellt. Eingestellt war, wenn ich mich recht erinner 10028 & 10029 was zu einer Kollision mit der Postfix Konfiguration führte.

    prüfen der Signierung

    Über http://www.brandonchecketts.com/emailtest.phpkann die Signierung getestet werden, dazu muss lediglich vom enstprechenden System eine E-Mail an die zufällig generierte E-Mail Adresse geschickt werden.

    in Kooperation mit amavisd-new (ohne Submission)

    Wenn man in der Datei /etc/dkimproxy/dkimproxy_out.conf die signature Zeilen auskommentiert,

    #signature dkim(c=relaxed)
    #signature domainkeys(c=nofws)

    kann man ohne Probleme in der /etc/postfix/master.cf  beim Wiedereintrittspunkt von amavisd-new den Parameter content_filter nutzen:

    127.0.0.1:10025 inet    n       -       -       -       -       smtpd
    [...]
    -o content_filter=dksign:[127.0.0.1]:10027

    Eingehende E-Mails durchlaufen so nur amavisd-new. Ausgehende werden jedoch signiert, da hier die sender_map zuschlägt  … ergo, gehts auch ohne Submission-Port 😉

    Ein Kommentar

    1. Pingback: DKIM/DomainKey Schlüssel erstellen und veröffentlichen @ .: blog.cscholz.io :.

    Leave A Reply