{{: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]]