Подписываем и проверяем почту при помощи DomainKeys и DKIM в Postfix

Давным-давно настроив у себя SPF, я собирался поразбираться с DomainKeys и DomainKeys Identified Mail (DKIM), но, как часто случается, банально не хватило времени. Но наконец-то нашлась свободная минутка (пришлось знакомиться с ними по долгу работы).

В данной статье я расскажу о том, как настроить DK/DKIM для совместной работы с Postfix в Debian/Ubuntu Linux.

Предполагается, что Postfix уже неастроен и работает; если это не так, то очень рекомендую к прочтению этот замечательный мануал.

Прежде всего нужно установить dk-filter и dkim-filter:

[-]
View Code Bash
sudo apt-get install dk-filter dkim-filter

Обращаю внимание, что с большой вероятностью при установке пакета dkim-filter dpkg выдаст ошибку о невозможности запуска демона dkim-filter. Это нормально, ибо демон нужно сначала настроить.

Начнём с генерации ключей. Для этого воспользуемся утилитой dkim-genkey:

[-]
View Code Bash
dkim-genkey -d example.com -s mail

Результатом работы утилиты будут два файла: mail.txt (открытый ключ) и mail.private (закрытый ключ).

В файле mail.txt будет что-то вроде этого:

[-]
View Code Text
mail._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIG...AQAB"

Эту запись нужно поместить в файл зоны почтового сервера и перезапустить сервер DNS. Также рекомендую добавить в файл зоны информацию об Author Signing Practises (ASP) — практики подписывания сообщений. Не буду на этом останавливаться, кому интересно — смотрите сюда.

Переходим к mail.private. Лично я храню "почтовые ключи" в каталоге /etc/mail:

[-]
View Code Bash
sudo mkdir -p /etc/mail/example.com
sudo mv -f mail.private /etc/mail/example.com/mail

При необходимости генерацию ключей нужно произвести для других доменов.

Теперь, когда у нас есть открытый и закрытый ключи, можно с чистой совестью приступать к конфигурированию dkim-filter. Его файл конфигурации находится в /etc/dkim-filter.conf

[-]
View Code Bash
sudo nano /etc/dkim-filter.conf

Я использую следующую конфигурацию:

[-]
View Code Text
# Запись сообщений в 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 имеет следующий вид:

[-]
View Code Text
example.com
example.net
# По домену на строку

Файл /etc/dkim.keylist имеет следующий вид:

[-]
View Code Text
# Отправитель:Подписывающий домен:Путь к закрытому ключу
*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:

[-]
View Code Bash
/etc/init.d/dkim-filter start

По умолчанию он будет прослушивать порт 8891 на localhost.

Теперь переходим к dk-filter. Будем использовать те же самые ключи (а смысл генерировать новые?).

Начнём с редактирования файла зоны: в него нужно добавить строку (политику подписи сообщений):

[-]
View Code Text
_domainkey      IN TXT "o=~"

или

[-]
View Code Text
_domainkey      IN TXT "o=-"

В первом варианте мы сообщаем, что почтовые сообщения могут быть подписаны (а могут и не быть подписаны); во втором — что все сообщения, исходящие из данного домена, должны быть подписаны.

После изменения файла зоны (не забываем обновить serial зоны) DNS-сервер необходимо перезапустить.

Переходим к файлу /etc/default/dk-filter:

[-]
View Code Bash
sudo nano /etc/default/dk-filter

У меня этот файл имеет следующий вид:

[-]
View Code Bash
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 выглядит так:

[-]
View Code Text
# Подписывающий домен:Путь к закрытому ключу
example.com:/etc/mail/example.com/mail
example.net:/etc/mail/example.net/mail

Перезапускаем dk-filter:

[-]
View Code Bash
/etc/init.d/dk-filter restart

Наконец, переходим к конфигурации Postfix. Дописываем в /etc/postfix/main.cf следующие строки:

[-]
View Code Text
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:

[-]
View Code Bash
/etc/init.d/postfix reload

Перед тестированием DK/DKIM, возможно, придётся подождать окончания распространения изменений в DNS-записях.

Самый простой способ тестирования — отправка произвольного сообщения на адрес autorespond+dk@dk.elandsys.com (для тестирования DomainKeys) или autorespond+dkim@dk.elandsys.com (для тестирования DKIM).

Пример успешного прохождения проверок DK/DKIM:

[-]
View Code eMail (mbox)

В примере выше я поменял адреса (на горе спамерам); те, кто рискнёт отправить письмо на internetnetworkmarketer.org.ua, рискуют попасть в чёрный список UCEPROTECT Level 1 :-)

Рекомендую к прочтению:

  • Sendmail DomainKeys;
  • Sendmail DKIM.
Добавить в закладки

Связанные записи

30
Авг
2008

Комментарии к статье «DomainKeys и DKIM с Postfix в Ubuntu Linux» (2)  »

  1. Sindy says:

    А как SPF в Postfix настроить?

  2. [...] Данная статья написана по просьбам трудящихся. [...]

Подписаться на RSS-ленту комментариев к статье «DomainKeys и DKIM с Postfix в Ubuntu Linux» Trackback URL: http://blog.sjinks.org.ua/administring/324-domainkeys-and-dkim-with-postfix-on-ubuntu-linux/trackback/

Оставить комментарий к записи «DomainKeys и DKIM с Postfix в Ubuntu Linux»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя