DKIM configuration

Debian 6 – squeeze

It’s necessary to have package dkim-filter.

Key creation

mkdir /etc/mail
cd /etc/mail
dkim-genkey -d mydomain.com

Edit or create /etc/dkim-filter.conf

Domain                  mydomain.com (if I need more domain - separate it by a comma and use KeyList instead of KeyFile)
KeyFile                 /etc/mail/default.private
Selector                default

KeyList example

*@abc.com:abc.com:/etc/mail/abccom/mail
*@xy.com:xy.com:/etc/mail/xycom/default

Edit /etc/default/dkim-filter

SOCKET="inet:8891@localhost"

Edit /etc/postfix/main.cf

# DKIM signature of SMTP server
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

It’s almost finished. Now add TXT DNS record:

myselector._domainkey 1800 TXT v=DKIM1; p=mykey

Debian 7 – Wheeze

Download and install opendkim with tools.

apt-get install opendkim opendkim-tools

Add configuration to /etc/opendkim.conf.

AutoRestart             Yes
AutoRestartRate         10/1h
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  local:/var/spool/postfix/opendkim/opendkim.sock

Edit /etc/postfix/main.cf.

milter_protocol = 2
milter_default_action = accept

#If there is existing spamassasin in avamis conf, just add at the end of the line opendkim.

smtpd_milters = unix:/spamass/spamass.sock, unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/spamass/spamass.sock, unix:/opendkim/opendkim.sock

#If there is only opendkim filter, add these lines.

smtpd_milters = unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/opendkim/opendkim.sock

Now it’s time to make dir for opendkim socket.

mkdir -p /var/spool/postfix/opendkim
chown opendkim:opendkim /var/spool/postfix/opendkim/
usermod -a -G opendkim postfix

Generating keys.

mkdir /etc/opendkim
mkdir /etc/opendkim/keys
cd /etc/opendkim/keys
mkdir example.com
cd example.com
opendkim-genkey -s mail -d example.com
chown opendkim:opendkim mail.private

Parameter -s is for selector, d is domain. In mail.txt you can find txt entry for DNS record.

Specify trusted hosts /etc/opendkim/TrustedHosts.

127.0.0.1
localhost
192.168.0.1/24
*.example.com

Create a key table /etc/opendkim/KeyTable.

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

Create a signing table /etc/opendkim/SigningTable.

*@example.com mail._domainkey.example.com

And last step is

service opendkim restart
service postfix restart

Debian 8 – Jessie

Create the domain key.

mkdir -p /etc/dkim/amavisd-new 
genrsa /etc/dkim/example.key.pem

Configure amavisd to use the new key /etc/amavis/conf.d/50-user.

$enable_dkim_verification = 1;
$enable_dkim_signing = 1;

dkim_key('example.com', 'foo', '/var/db/dkim/example.key.pem');

@dkim_signature_options_bysender_maps = (
{ '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );

@mynetworks = qw(0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16);  # list your internal networks

To view the public key.

amavisd-new showkeys

Testing the key.

amavisd-new testkeys

If everything is ok, restart amavis.

service amavis restart