linux:email:amavisd:dkim:sign

Domain Key Identified Mail outbound - ORIGINATING - signieren

DKIM basiert auf asymetrischer Verschlüsselung mit public- und private-Key.
Das Key-Paar wird mit folgender Syntax erzeugt:

amavisd genrsa <Dateiname> [Anzahl der Bits für den Schlüssel]


Die Bitgröße sollte heutzutage - wenn vom DNS-Provider unterstützt - 4096 Bit betragen, 1024 Bit ist definitiv die unterste Grenze, die sinnhaft ist!

Als Namen wird eine Kombination aus Datums-Stempel des Erstellungsdatums in der Form YYYYMMDD , Dateiversion NN und Domainname gewählt.
So ist es einfacher, die einzelnen Schlüssel auseinander zu halten, wenn mehrere benötigt, oder einzelne Schlüssel für ungültig erklärt (revoked) werden müssen.
Dieser Datums-Stempel wird auch als Selector in der AMaViS-Konfiguration verwendet.
Also z.B. am 26. August 2014, als Version 01 des Keys:

# amavisd-new genrsa /etc/postfix/dkim/2014082601_haas-online.org_key.pem 1024
Private RSA key successfully written to file "/etc/postfix/dkim/2014082601_haas-online.org_key.pem" (1024 bits, PEM format)


Der Public-Key muss nun in der DNS-Zone hinterlegt werden:
Dieser wird mit folgendem Befehl angezeigt:

# amavisd-new showkey haas-online.org
; key#1, domain haas-online.org, /etc/postfix/dkim/2014082601_haas-online.org_key.pem
2014082601._domainkey.haas-online.org.  3600 TXT (
  "v=DKIM1; p="
  "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZRaQ59r+k9NrREiM84nFo6SVF"
  "lTer21iSUVVg3VHDuaMPMAckNt+g/yNl1Ni/9r7/KFTn9P98T3JOTV8iRa7K5ZmN"
  "e3WtlmqbcKEvlXCgXhablqAGOlYMeKJ0JoL+zfivycROn3lrESv7tbuVvA52q2Ao"
  "TV2Yt6/0dfoZ1xwE/wIDAQAB")

Dieser Eintrag muss ggf. noch für den jeweiligen DNS-Provider umgeformt werden. Manche DNS-Provider akzeptieren nur Keys mit 1024 Bit, andere kommen mit den Zeilenumbrüchen nicht zurecht.

Man sollte es immer nach folgendem Grundmuster versuchen:

Selector._domainkey.domainname.de. TXT ( "v=DKIM1; p=dkim-public-key" )


Bei OVH muss der „fortgeschrittene Modus“ aktiviert werden, in dem die DNS-Zone als Textfile editiert werden kann:
Empfang > Shared Hosting > Domains & DNS > DNS Zone (fortgeschrittener Modus)
Fortgeschrittener Modus (Deaktiviert die Assistenten, es wird nur die Syntax der Zone überprüft)
Leider unterstützt OVH auch nur 1024 Bit große TXT-Records :-(

2014082601._domainkey    IN TXT    ( "v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZRaQ59r+k9NrREiM84nFo6SVFlTer21iSUVVg3VHDuaMPMAckNt+g/yNl1Ni/9r7/KFTn9P98T3JOTV8iRa7K5ZmNe3WtlmqbcKEvlXCgXhablqAGOlYMeKJ0JoL+zfivycROn3lrESv7tbuVvA52q2AoTV2Yt6/0dfoZ1xwE/wIDAQAB" )



Die AMaVIS-Konfiguration muss nun um folgende Zeilen ergänzt werden, wobei zunächst die DKIM-Signierung explizit ausgeschaltet wird ($enable_dkim_signing = 0;):

/etc/amavis/conf.d/50-user
# DKIM-Signierung:
# $enable_dkim_signing = 1;
$enable_dkim_signing = 0;
$signed_header_fields{'received'} = 0;  # turn off signing of Received
dkim_key('haas-online.org', '2014082601', '/etc/postfix/dkim/2014082601_haas-online.org_key.pem');
dkim_key('andere-domain.de', '2014060101', '/etc/postfix/dkim/andere-domain.de_key.pem');
@mynetworks = qw(127.0.0.0/8);  # list your internal networks
@local_domains_maps = (
    ".$mydomain",
    read_hash('/etc/postfix/virtual_domains')
);
@client_ipaddr_policy = (
  [qw( 0.0.0.0/8 127.0.0.1/8 [::] [::1] )] => 'ORIGINATING',
  \@mynetworks => 'ORIGINATING',
);
@dkim_signature_options_bysender_maps = (
    { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } # catchall defaults
);
# damit Amavisd
# auf 10024/tcp fuer inbound (DKIM/SPF verify, Anti-SPAM)
# forwarding auf 10025/tcp
# und 10026/tcp fuer outbound (DKIM sign)
# forwarding auf 10027/tcp
# lauscht:
$inet_socket_port = [10024,10026];  # listen on multiple TCP ports
$forward_method = 'smtp:[127.0.0.1]:10025';  # MTA with non-signing service
$notify_method  = 'smtp:[127.0.0.1]:10027';  # MTA with signing service
# 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{'10026'} = 'ORIGINATING';
$policy_bank{'ORIGINATING'} = {  # mail supposedly originating from our users
  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 => ["virusalert\@$mydomain"],
  spam_admin_maps  => ["virusalert\@$mydomain"],
  warnbadhsender   => 1,
  # forward to a smtpd service providing DKIM signing service
  forward_method => 'smtp:[127.0.0.1]:10027',
  # force MTA conversion to 7-bit (e.g. before DKIM signing)
  smtpd_discard_ehlo_keywords => ['8BITMIME'],
  bypass_banned_checks_maps => [1],  # allow sending any file names and types
  terminate_dsn_on_notify_success => 0,  # don't remove NOTIFY=SUCCESS option
};  

Für die Signierung muss in Postfix ein zweiter Kanal eröffnet werden, da AMaVIS als pre-queue Filter für inbound emails konfiguriert wurde, und eine Signatur erst ganz am Schluss - nach der ganzen „email-Sanitation“ - durchgeführt werden sollte.

Dazu wurde in der AMaVIS-Konfiguration der Port 10027 konfiguriert, der nun auch in Postfix eingerichtet werden muss:

/etc/postfix/master.cf
# AMaViS - non-signing:
localhost:10025      inet  n       -       -       -       -       smtpd
 -o smtpd_proxy_filter=
 -o smtpd_authorized_xforward_hosts=127.0.0.0/8
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o receive_override_options=no_unknown_recipient_checks
# AMaViS - signing:
localhost:10027      inet  n       -       -       -       -       smtpd
 -o smtpd_proxy_filter=
 -o smtpd_authorized_xforward_hosts=127.0.0.0/8
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o receive_override_options=no_unknown_recipient_checks

Ausserdem müssen inbound emails als INCOMING und outbound emails als ORIGINATING getagged werden:

/etc/postfix/master.cf
# inbound emails:
smtpd     pass  -       -       -       -       -       smtpd
  # AmaVis als 'before-queue-filter':
  -o smtpd_proxy_filter=localhost:10024
  -o smtpd_proxy_timeout=600
  -o smtpd_client_connection_count_limit=200
  -o milter_macro_daemon_name=INCOMMING
 
# outbound emails:
# damit auch direkt vom Server erzeugt emails versendet weren koennen (z.B. Webmailer, Statusmails etc.):
localhost:smtp      inet  n       -       -       -       -       smtpd
   -o smtpd_proxy_filter=localhost:10026
   -o smtpd_proxy_timeout=600
   -o milter_macro_daemon_name=ORIGINATING
submission inet n       -       -       -       -       smtpd
  ...
  -o smtpd_proxy_filter=localhost:10026
  -o smtpd_proxy_timeout=600
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  ...
  -o smtpd_proxy_filter=localhost:10026
  -o smtpd_proxy_timeout=600
  -o milter_macro_daemon_name=ORIGINATING

Der DKIM-Eintrag kann nun mit AMaVIS getestet werden:

# amavisd-new testkeys haas-online.org
TESTING#1: 2014082601._domainkey.haas-online.org => invalid (public key: not available)

der DKIM-Eintrag im DNS ist entweder fehlerhaft, oder noch nicht aktiv (TTL!) Sobald der DKIM-Eintrag im DNS aktiv ist, kann der DKIM-Key nochmals getestet werden:

# amavisd-new testkeys haas-online.org
TESTING#1: 2014082601._domainkey.haas-online.org => pass



zurück

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • linux/email/amavisd/dkim/sign.txt
  • Zuletzt geändert: 2017-04-25 14:53
  • von 127.0.0.1