DKIM + Postfix
DKIM + Postfix = просто
Подписывать исходящие письма с помощью DKIM в Postfix не просто, а очень просто. Для этого нам потребуется сам Postfix и замечательный во всех отношениях пакет dkim-filter.
Установим его с помощью вашего пакетного менеджера:
aptitude install dkim-filter
В конец его конфига /etc/dkim-filter.conf дописываем:
Canonicalization relaxed/relaxed KeyList /etc/dkim-keys.conf Domain * BodyLengths yes#On-DNSError accept
(описание этих и других директив читайте в документации)
Создадим каталог под ключи:
mkdir -p /etc/postfix/dkim/ chgrp postfix /etc/postfix/dkim/ chmod 750 /etc/postfix/dkim/ cd /etc/postfix/dkim/
Генерируем ключи для сервера mail.example.com:
dkim-genkey-dexample.com-smail-r
Сейчас в mail.txt у нас лежит TXT запись, которую нужно добавить, а в mail.private лежит приватный ключ, который и будет использоваться для подписи писем. Запись, которую нужно добавить, будет вида:
mail._domainkey IN TXT "v=DKIM1;g=*;k=rsa;p=..."
Теперь обязательно нужно удалить расширение у файла с ключом, потому что в описываемой мною схеме dkim-filter берёт имя сервера из имени файла с ключом:
mv mail.private mail
В файл /etc/dkim-keys.conf записываем какие домены каким ключом нужно подписывать:
*@example.com:example.com:/etc/postfix/dkim/mail *:example.com:/etc/postfix/dkim/mail
Аналогично можно добавить свои отдельные ключи для других доменов или даже для отдельных адресов. Если не нужно, чтобы dkim-filter подписывал письма для всех других доменов, не указанных явно, последнюю строчку можно удалить.
В /etc/default/dkim-filter объясним dkim-демону где ему ждать подключений:
SOCKET="inet:8891@localhost"
Наконец, добавим в конец /etc/postfix/main.cf следующие строки:
milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Не забываем добавить TXT запись и проверить, что она на месте:
dig txt mail._domainkey.example.com
Готово!
Перезапускаем postfix и dkim-filter, отправляем тестовое письмо куда-нибудь на Яндекс и наслаждаемся успешным результатом проверки подписи:
Если проверка прошла успешно то стоит формально запретить другим серверам принимать письма с вашим доменом, но без подписи, добавив ADSP запись:
_adsp._domainkey IN TXT "dkim=all"
Проверить правильность записи в DNS можно на сайте: http://dkimcore.org/c/keycheck