Есть много факторов, которые увеличивают процент доставки ваших почтовых рассылок. Одним из них является 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, для закрытой придется выполнить несколько простых действий:
- Авторизоваться на Яндекс и получить авторизационный токен с помощью запроса:
https://pddimp.yandex.ru/get_token.xml?domain_name=example.com
- Получить приватный ключ можно с помощью API Яндекс.Почты для домена с помощью запроса:
https://pddimp.yandex.ru/dkim/status.xml?domain=example.com&token=ТОКЕН&secretkey=yes
Полученные ключи сохраняем в «/etc/opendkim/» с именами «домен.ru.private» и «домен.ru.txt».
Затем задаем владельца — opendkim и права 600. Если этого не сделать, то будет ошибка:
can't load key from /etc/opendkim/домен.ru.private: Permission denied |
Следует обратить внимание на формат записи приватного ключа:
Иначе, можно получить ошибку:
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 |
Или же визуально (зеленая медалька):
8. Запретим письма без подписи
По желанию у домена можно прописать ADSP запись (RFC5617) — это позволит принимающему серверу понять, должно ли ваше письмо быть подписано или нет.
_adsp._domainkey TXT "dkim=all" |
Как видно, ничего сложного, надеюсь у вас все заработает с первой попытки 🙂
Установка DKIM положительно повлияет на процент доставки ваших писем и общее доверие почтовых систем к вашему домену.