В данной статье я расскажу о том, как настроить DK/DKIM для совместной работы с Postfix в Debian/Ubuntu Linux.
Предполагается, что Postfix уже неастроен и работает; если это не так, то очень рекомендую к прочтению этот замечательный мануал.
Прежде всего нужно установить dk-filter и dkim-filter:
sudo apt-get install dk-filter dkim-filter
Обращаю внимание, что с большой вероятностью при установке пакета dkim-filter dpkg выдаст ошибку о невозможности запуска демона dkim-filter. Это нормально, ибо демон нужно сначала настроить.
Начнём с генерации ключей. Для этого воспользуемся утилитой dkim-genkey:
dkim-genkey -d example.com -s mail
Результатом работы утилиты будут два файла: mail.txt (открытый ключ) и mail.private (закрытый ключ).
В файле mail.txt будет что-то вроде этого:
mail._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIG...AQAB"
Эту запись нужно поместить в файл зоны почтового сервера и перезапустить сервер DNS. Также рекомендую добавить в файл зоны информацию об Author Signing Practises (ASP) — практики подписывания сообщений.
Переходим к mail.private. Лично я храню "почтовые ключи" в каталоге /etc/mail:
sudo mkdir -p /etc/mail/example.com
sudo mv -f mail.private /etc/mail/example.com/mail
При необходимости генерацию ключей нужно произвести для других доменов.
Теперь, когда у нас есть открытый и закрытый ключи, можно с чистой совестью приступать к конфигурированию dkim-filter. Его файл конфигурации находится в /etc/dkim-filter.conf
sudo nano /etc/dkim-filter.conf
Я использую следующую конфигурацию:
# Запись сообщений в syslog
Syslog yes# Всегда добавлять заголовок Authentication-Results
AlwaysAddARHeader yes
# Файл с перечнем доменов, для которых осуществляется
# подписывание исходящих сообщений
Domain /etc/dkim.domains
# Файл с перечнем закрытых ключей
KeyList /etc/dkim.keylist
# Не перезапускаться при ошибках
AutoRestart no
# Режим работы: подпись и проверка
Mode sv
# Подписывать сообщения из поддоменов
# доменов, указанных в Domains
SubDomains yes
# Отклонять письма с неверной подписью
On-BadSignature reject
Файл /etc/dkim.domains имеет следующий вид:
example.com
example.net
# По домену на строку
Файл /etc/dkim.keylist имеет следующий вид:
# Отправитель:Подписывающий домен:Путь к закрытому ключу
*example.com:example.com:/etc/mail/example.com/mail
*example.net:example.net:/etc/mail/example.net/mail
Обращаю внимание, что имя файла ключа (mail) должно совпадать с селектором ключа в TXT-записи DKIM домена (mail._domainkey).
После этого запускаем dkim-filter:
/etc/init.d/dkim-filter start
По умолчанию он будет прослушивать порт 8891 на localhost.
Теперь переходим к dk-filter. Будем использовать те же самые ключи (а смысл генерировать новые?).
Начнём с редактирования файла зоны: в него нужно добавить строку (политику подписи сообщений):
_domainkey IN TXT "o=~"
или
_domainkey IN TXT "o=-"
В первом варианте мы сообщаем, что почтовые сообщения могут быть подписаны (а могут и не быть подписаны); во втором — что все сообщения, исходящие из данного домена, должны быть подписаны.
После изменения файла зоны (не забываем обновить serial зоны) DNS-сервер необходимо перезапустить.
Переходим к файлу /etc/default/dk-filter:
sudo nano /etc/default/dk-filter
У меня этот файл имеет следующий вид:
DAEMON_OPTS="-l"
DAEMON_OPTS="$DAEMON_OPTS -k -d /etc/dkim.domains -s /etc/dk.keylist -D -h -S mail"
SOCKET="inet:8892@localhost"
А файл /etc/dk.keylist выглядит так:
# Подписывающий домен:Путь к закрытому ключу
example.com:/etc/mail/example.com/mail
example.net:/etc/mail/example.net/mail
Перезапускаем dk-filter:
/etc/init.d/dk-filter restart
Наконец, переходим к конфигурации Postfix. Дописываем в /etc/postfix/main.cf следующие строки:
milter_default_action = accept
milter_protocol = 2
smtpd_milters =
inet:localhost:8891,
inet:localhost:8892
non_smtpd_milters =
inet:localhost:8891,
inet:localhost:8892
После чего перезагружаем Postfix:
/etc/init.d/postfix reload
Перед тестированием DK/DKIM, возможно, придётся подождать окончания распространения изменений в DNS-записях.
Самый простой способ тестирования — отправка произвольного сообщения на адрес autorespond+dk@dk.elandsys.com (для тестирования DomainKeys) или autorespond+dkim@dk.elandsys.com (для тестирования DKIM).
Пример успешного прохождения проверок DK/DKIM:
Authentication-Results: ns1.qubic.net; sender-id=pass header.from=vladimir@internetnetworkmarketer.org.ua; <strong>spf=pass</strong> smtp.mfrom=vladimir@internetnetworkmarketer.org.ua
Authentication-Results: ns1.qubic.net; <strong>domainkeys=pass</strong> header.from=vladimir@internetnetworkmarketer.org.ua
Authentication-Results: ns1.qubic.net; <strong>dkim=pass</strong> (1024-bit key)
header.i=@internetnetworkmarketer.org.ua; dkim-adsp=none
В примере выше я поменял адреса (на горе спамерам); те, кто рискнёт отправить письмо на vladimir@internetnetworkmarketer.org.ua, рискуют попасть в чёрный список UCEPROTECT Level 1
|