headermask image

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

В данной статье я расскажу о том, как настроить 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

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

Спонсор поста:

Тем кто хочет купить бионикл в Москве, советую интернет магазин игрушек Lego.

Теперь, когда у нас есть открытый и закрытый ключи, можно с чистой совестью приступать к конфигурированию 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

Разное

Клубы являются местом, где приятно провести время. Первые клубы Москвы, возникшие в начале 90-х годов – “Арлекино”, “Метелица” и “Манхэттен-Экспресс”. Они, как правило, имели стандартную программу – платный вход, выпивка, закуска, показ мод, выступление отечественных и иногда зарубежных исполнителей.

vtoroy

One Comment

  1. подскажите плиз что такое private._domainkey и для чего он служит ?

    1. Dtpshka on December 7th, 2012 at 2:49 pm