Sendmail DKIM SPF FreeBSD или борьба со СПАМ

Небольшой рассказ о том, как настроить sendmail для подписывания писем ключом DKIM, и настройка записей  SPF для вашего домена. Борьба со спамом, что бы ваши письма не попадали в СПАМ.

Очень большое количество СПАМа заставляет придумывать все новые и новые технологии  борьбы с ним. По мимо различных списков «черных хостов» и «открытых релеев», компании Гугл и Яху, и еще кто-то придумали два метода идентификации писем SPF и DKIM. Большинство крупных почтовых провайдеров поддерживают эту технологию, и для гарантированной доставки контента пользователям я решил внедрить это и на нашем серваке.

Технология SPF позволяет указывать явно с каких почтовых серверов ожидать письма с вашего домена. То есть, если спамер решит слать письмо от вашего имени, то принимающая сторона увидев несовпадение IP адреса отправителя с IP в SPF может отклонить такое письмо, или добавить ему балов в SpamAssasin

SPF реализуется очень легко, в домене с которого вы шлете письма надо лишь добавить строчку типа ТХТ вида

"v=spf1 a mx a:usa.pupkin.tv ip4:96.31.22.22 include:_spf.google.com ~all"

Что это значит?
V=spf1 – это версия протокола, на сегодня первая и единственная
a – это принимать почту с айпи указанного в записи А DNS сервера
mx – это принимать почту с айпи указанных в записях МХ DNS сервера
a:usa.pupkin.tv – это принимать почту с айпи резолвящегося по записи A домена usa.pupkin.tv
ip4:96.31.22.22 – принимать почту с этого айпишника
include: _spf.google.com – принимать почту согласно правилам указаным для домена _spf.google.com. Это нужно для того, чтобы письма от нашего домена которые я и другие сотрудники шлют через сервера гугла, не попадали в спам.
~all – означает что от остальных ip адресов сервер может принимать почту на свое усмотрение.

Тут все очень просто, составляете такую строчку, пихаете ее в ДНС. И вперед, больше ничего делать не надо. А вот в DKIM ситуация значительно сложнее, все дело в том, что DKIM предполагает что письмо отправляемое с вашего домена будет подписано подписью с ключом шифрования не менее 512 бит. Но конечно не это самое страшное, а реализация этого геммороя. И так, начнем. Механизм следующий, вы генерируете открытый и закрытый ключ, далее создаете зону
_domainkey.example.com в которой в селекторах содержаться ключи. Селектор  — это еще одна зона, в ТХТ записи которой лежит открытый ключ. Смысл в том, что для одного домена может быть неограниченное количество ключей.

Первое что нам надо сделать, это сгенерировать подпись и открытый ключ.

Мне понравился визард http://www.port25.com/support/support_dkwz.php

Там просто вводите название домена, и селектор. Селектор может быть любым, например key1 и жмете generate key. В результате вы получаете два блока, с открытым и закрытым ключом, и чуть ниже табличку в которой написано какие ТХТ записи в какую зону надо внести что бы все это заработало. Оба блока желательно сохранить. Публичный ключ используется в селекторе, а приватный ключ нужен для прописывания писем. Его надо положить на сервер например в папку /var/dkim/domen.com

Далее, необходимо установить плагин dkim-milter для exim

cd /usr/ports/mail/dkim-milter/
make
make install clean

 

теперь надо привести файл /usr/local/etc/mail/dkim-milter.conf вот к такому виду:

==============TBC=============

и не забыть включить поддержку мильтера в rc.conf

milterdkim_enable="YES"
sendmail_enable="YES"

Ну и все, включаем поддержку DKIM-MILTER sendmail добавив строчки в sendmail.mc:

INPUT_MAIL_FILTER(`dkim-filter', `S=inet:8891@localhost')
define(`confINPUT_MAIL_FILTERS', `dkim-filter')
перезапускаем sendmail /etc/rc.d/sendmail restart

ну и теперь можно отправить тестовое письмо на check-auth@verifier.port25.com для проверки того, насколько все хорошо.