{{:debian-2.png}}
=== 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 [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;):
# 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:\\
# 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:
# 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
\\
\\
<- [[linux:email:email|zurück]]