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