Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».

В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.

Проект DomainKeys начала несколько лет назад компания Yahoo, а проект Identified Internet Mail инициировала Cisco Systems. Около года неформальное объединение из десятка организаций, включая Yahoo, Cisco, EarthLink Inc., Microsoft Corp., PGP Corp., StrongMail Systems Inc., VeriSign Inc. и Sendmail Inc., работало над созданием новой спецификации DKIM. В июле 2005 года она была передана в IETF, для рассмотрения в качестве нового стандарта e-mail с целью борьбы с фишингом и спамом.

Нативная поддержка DKIM появилась в EXIM,начиная с версии 4.70, в версии 4.71 было исправлены проблемы при работе с DKIM, на данный момент exim доступен версии 4.77

Создаем каталог где будем хранить ключи
deathstar# mkdir /usr/local/etc/exim/dkim/
И создаем ключ
deathstar# openssl genrsa -out /usr/local/etc/exim/dkim/deathstar.name.key 1024
Выствляем права на чтение каталога с ключами
deathstar# chown mailnull:wheel /usr/local/etc/exim/dkim/
deathstar# chmod 640 /usr/local/etc/exim/dkim/

Теперь создаем публичный ключ
deathstar# openssl rsa -in /usr/local/etc/exim/dkim/deathstar.name.key -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB+E6ldHf2KovD3DSAd1CiQQCe
TxB9pE4o+mLlBIMpF85L+bp3mhGCYe4eR68tVpEqwdewNQaP/kEhqQ0GlmMw1AdR
mGYga2qNbQZpGDQHL+n+/sVt6JzupZNYH3jAcZE2jW/jxBOXbu3dQKrR1Ma03HMF
5F//dkvoJTWDYs3kQwIDAQAB
-----END PUBLIC KEY-----

Добавляем TXT запись для домена
dkim._domainkey TXT "k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB+E6ldHf2KovD3DSAd1CiQQCeTxB9pE4o+mLlBIMpF85L+bp3mhGCYe4eR68tVpEqwdewNQaP/kEhqQ0GlmMw1AdRmGYga2qNbQZpGDQHL+n+/sVt6JzupZNYH3jAcZE2jW/jxBOXbu3dQKrR1Ma03HMF5F//dkvoJTWDYs3kQwIDAQAB"

То есть после k=rsa; p= идет наш публичный ключ в одну (!!!!) строку.

Проверяем запись
deathstar# host -t txt dkim._domainkey.deathstar.name
dkim._domainkey.deathstar.name descriptive text "k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB+E6ldHf2KovD3DSAd1CiQQCeTxB9pE4o+mLlBIMpF85L+bp3mhGCYe4eR68tVpEqwdewNQaP/kEhqQ0GlmMw1AdRmGYga2qNbQZpGDQHL+n+/sVt6JzupZNYH3jAcZE2jW/jxBOXbu3dQKrR1Ma03HMF5F//dkvoJTWDYs3kQwIDAQAB"

Теперь в файл конфигурации Exim добавляем в begin transports
вместо

remote_smtp:
driver = smtp
port = 25

вот это
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /usr/local/etc/exim/dkim/${lc:${domain:$h_from:}}.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}

remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = dkim
dkim_private_key = DKIM_PRIVATE_KEY

Перезапускаем Exim и отправляем почту,и смотрим в логи почтового сервера,куда отправлено было письмо, и видим следующее

2011-12-19 11:40:59 1RcXqF-0001QH-4l DKIM: d=deathstar.name s=dkim c=relaxed/relaxed a=rsa-sha256 [verification succeeded]

На этом все. =)