Почтовые рассылки: OpenDKIM + Postfix

dkim

Есть много факторов, которые увеличивают процент доставки ваших почтовых рассылок. Одним из них является DKIM-подпись.

DomainKeys Identified Mail метод E-mail аутентификации.
Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».
В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.

DKIM — позволяет антиспам-системам однозначно верифицировать отправителя домена. В случае массовых почтовых рассылок — DKIM-подпись нужна для работы технологии FBL.

Под Linux процедуру подписи реализует демон OpenDKIM, его мы и будем настраивать.


1. Установка OpenDKIM

yum install opendkim opendkim-tools

2. Генерируем ключи и настраиваем OpenDKIM и DNS записи.

Мои домены наводятся под управлением Яндекс.DNS, который самостоятельно создал пару необходимую пару ключей.

Публичную часть получить достаточно просто — в настройках DNS, для закрытой придется выполнить несколько простых действий:

  1. Авторизоваться на Яндекс и получить авторизационный токен с помощью запроса:
    https://pddimp.yandex.ru/get_token.xml?domain_name=example.com
  2. Получить приватный ключ можно с помощью API Яндекс.Почты для домена с помощью запроса:
    https://pddimp.yandex.ru/dkim/status.xml?domain=example.com&token=ТОКЕН&secretkey=yes

2015-04-23 13-42-38 yandex.ru dkim

Полученные ключи сохраняем в «/etc/opendkim/» с именами «домен.ru.private» и «домен.ru.txt».

Затем задаем владельца — opendkim и права 600. Если этого не сделать, то будет ошибка:

can't load key from /etc/opendkim/домен.ru.private: Permission denied

Следует обратить внимание на формат записи приватного ключа:
2015-04-23 13-53-47 Скриншот экрана

Иначе, можно получить ошибку:

error loading key 'домен.ru.private'

Также ключи можно создать утилитой:

opendkim-genkey --domain=домен.ru --selector=mail --verbose

В последнем случаем необходимо создать TXT запись указанную в «домен.ru.txt» на вашем DNS сервере.

3. Меняем настройки opendkim.conf

Мы задаем сокет для работы, путь до файла с описанием ключей и файл с правилами применения подписи.

# cat /etc/opendkim/opendkim.conf | grep -v "^#" | grep -v "^$"
PidFile /var/run/opendkim/opendkim.pid
Mode    sv
Syslog  yes
SyslogSuccess   yes
LogWhy  yes
SoftwareHeader yes
UserID  opendkim:opendkim
Socket  inet:8891@localhost
Umask   002
Canonicalization        relaxed/relaxed
Selector        mail
MinimumKeyBits 1024
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable

4. Добавляем ключи и создаем правила применения подписи

В KeyTable добавляем ключи:

#формат: "имя ключа:домен:селектор:путь до ключа"
mail._domainkey домен.ru:mail:/etc/opendkim/домен.ru.private

В SigningTable описываем правила:

#формат: "регулярное выражение для подписываемой почты  имя ключ"
*@домен.ru mail._domainkey

5. Запускаем opendkim

[init.d]# ./opendkim restart
Stopping OpenDKIM Milter:                                  [FAILED]
Generating default DKIM keys:                              [  OK  ]
Default DKIM keys for ru created in /etc/opendkim/keys.
Starting OpenDKIM Milter:                                  [  OK  ]

6. Настраиваем Postfix

Выполняем команду, для того чтобы Postfix отправлял все письма на подпись.

postconf -e milter_default_action=accept
postconf -e milter_protocol=2
postconf -e smtpd_milters=inet:localhost:8891
postconf -e non_smtpd_milters=inet:localhost:8891

7. Делаем проверку

echo "Test DKIM" | mail -s "Test DKIM" youmail@yandex.ru
echo "Test DKIM" | mail -s "Test DKIM" youmail@gmail.com

В случае успеха, в наших логах мы должны увидеть следующее:

opendkim[10921]: 22E1E12800068: DKIM-Signature field added (s=mail, d=домен.ru)

В тегах письма у google.com

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of user@домен.ru designates xxx.xxx.xxx.xxx as permitted sender)

В тегах письма у yandex.ru

smtp.mail=user@домен.ru;
       dkim=pass header.i=@домен.ru

Или же визуально (зеленая медалька):

2015-04-23 14-40-33 (2)

8. Запретим письма без подписи

По желанию у домена можно прописать ADSP запись (RFC5617) — это позволит принимающему серверу понять, должно ли ваше письмо быть подписано или нет.

_adsp._domainkey TXT "dkim=all"

Как видно, ничего сложного, надеюсь у вас все заработает с первой попытки 🙂

Установка DKIM положительно повлияет на процент доставки ваших писем и общее доверие почтовых систем к вашему домену.

Вы можете оставить комментарий ниже.