Используемые термины: DKIM, DNS, SPF, DMARC, FreeBSD, Ubuntu, CentOS.
Все примеры по настройке DKIM в данной инструкции выполнены на базе систем FreeBSD, Ubuntu и CentOS.
Для начала, устанавливаем пакет OpenDKIM. Он выполняет операции шифрования заголовков для DKIM, а также содержит набор утилит для формирования ключей.
Для его установки вводим следующее.
Для FreeBSD:
pkg install opendkim
или из портов:
cd /usr/ports/mail/opendkim
make config-recursive
make install clean
Для Ubuntu:
apt-get install opendkim opendkim-tools
Для CentOS:
yum install opendkim opendkim-tools
Переносим старый конфигурационный файл opendkim и создаем новый.
FreeBSD:
mv /usr/local/etc/mail/opendkim.conf /usr/local/etc/mail/backup.opendkim.conf
ee /usr/local/etc/mail/opendkim.conf
Linux:
mv /etc/opendkim.conf /etc/backup.opendkim.conf
vi /etc/opendkim.conf
И приводим его к следующему виду:
AutoRestart YesAutoRestartRate 10/1hUmask 002Syslog yesSyslogSuccess YesLogWhy YesCanonicalization relaxed/simpleExternalIgnoreList refile:/etc/opendkim/TrustedHostsInternalHosts refile:/etc/opendkim/TrustedHostsKeyTable refile:/etc/opendkim/KeyTableSigningTable refile:/etc/opendkim/SigningTableMode svPidFile /var/run/opendkim/opendkim.pidSignatureAlgorithm rsa-sha256UserID opendkim:opendkimSocket inet:[email protected]
* все параметры можно оставить, как в данном примере, за исключением Socket — можно указать любой другой порт, вместо 12301.
Создаем файл доверенных узлов. В него пока войдут имя локального хоста (localhost) и его IP-адрес, которые будут приняты, как доверенные и подписаны:
vi /etc/opendkim/TrustedHosts
И вносим следующее:
127.0.0.1localhost
* в данный файл мы заносим все IP-адреса и сети почтовых серверов, которые могут использовать наш сервер как почтовый релей. Таким образом, если в вашей системе используется подобная конфигурация, в файл TrustedHosts мы должны добавить адреса данных почтовых серверов.
Открываем файл /etc/default/opendkim:
vi /etc/default/opendkim
… его либо не должно быть, либо он должен быть пустой, либо проверяем строку с настройкой SOCKET и приводим ее к виду:
SOCKET=inet:[email protected]
Запускаем службу opendkim.
На FreeBSD:
Сначала добавляем демона в rc.conf:
echo ‘milteropendkim_enable=”YES”‘ >> /etc/rc.conf
echo ‘milteropendkim_uid=”opendkim”‘ >> /etc/rc.conf
* первая команда разрешает запуск демона, вторая — принудительно заставляет его запускаться от пользователя opendkim.
И запускаем его:
service milter-opendkim start
На Linux:
а) CentOS:
systemctl enable opendkim –now
* для старый систем это будут команды chkconfig opendkim on и service opendkim start.
б) Ubuntu:
systemctl enable opendkim
systemctl restart opendkim
Открываем конфигурационный файл.
ee /usr/local/etc/postfix/main.cf
vi /etc/postfix/main.cf
Добавляем или редактируем:
milter_protocol = 2milter_default_action = acceptsmtpd_milters = inet:localhost:12301non_smtpd_milters = inet:localhost:12301
* если smtpd_milters и non_smtpd_milters присутствуют в конфигурационном файле, то приведенные в данном примере значения нужно дописать к имеющимся.** 12301 — порт работы opendkim, который был задан в opendkim.conf.
Перезапускаем Postfix:
service postfix restart
или:
systemctl restart postfix
Для создания сертификата можно воспользоваться бесплатным онлайн инструментом на сайте dkimcore.org. Однако, в данном примере, мы воспользуемся opendkim-genkey и сформируем его самостоятельно. Мы будем работать с доменом admins24.com (Вам необходимо его заменить своим).
И так, создаем каталог для размещения ключей домена:
mkdir -p /etc/opendkim/admins24.com
И генерируем их следующей командой:
opendkim-genkey -D /etc/opendkim/admins24.com/ –domain admins24.com –selector relay
* где admins24.com — домен, с которого будет отправляться почта: relay — имя селектора (селектор — это строковый идентификатор, он может быть любым).
В папке /etc/opendkim/admins24.com должно появиться два файла с расширениями .private и .txt. Первый — закрытый ключ (храним его у себя на сервере), второй — готовая txt-запись для DNS.
Создадим пользователя opendkim.
pw useradd opendkim -m -s /usr/sbin/nologin -w no
Linux (Ubuntu, CentOS):
useradd opendkim -m -s /sbin/nologin
* мы можем получить ошибку useradd: user ‘opendkim’ already exists — это значит, что пользователь уже создан. Просто продолжаем настройку.
После создания пользователя, задаем группу владельца opendkim для созданных ключей:
chown :opendkim /etc/opendkim/admins24.com/*
Если система выдаст ошибку, что группы opendkim не существует (chown: opendkim: illegal group name), необходимо сначала создать учетную запись.
Задаем права для группы владельца:
chmod g+rw /etc/opendkim/admins24.com/*
Открываем созданный нами ранее TrustedHosts:
И добавим следующее:
…*.admins24.com
* где admins24.com — почтовый домен.
Создаем таблицу KeyTable. В ней хранится список соответствий между селекторами, доменами и файлами с закрытыми ключами. Формат записей:<селектор>._domainkey.<домен> <домен>:<селектор>:<путь к закрытому ключу>
vi /etc/opendkim/KeyTable
И в соответствии с форматом приводим его к нужному виду:
relay._domainkey.admins24.com admins24.com:relay:/etc/opendkim/admins24.com/relay.private
И напоследок, создаем SigningTable. В данной таблице хранятся соответствия между определенными email-адресами и записями в KeyTable.
vi /etc/opendkim/SigningTable
И приводим к такому виду:
*@admins24.com relay._domainkey.admins24.com
Перезапускаем opendkim:
service opendkim restart
Смотрим содержимое файла txt, который был сформирован при генерировании сертификата для домена:
cat /etc/opendkim/admins24.com/relay.txt
* где admins24.com — домен, для которого производилась настройка.
И используя данное содержимое, в панели управления нашим DNS создаем TXT-запись следующего формата:
relay._domainkey IN TXT “v=DKIM1; k=rsa; p=MIGfMA0GCSqG…rhyaj8OcbwIDAQAB”
* где relay — название нашего селектора MIGfMA0GCSqG…rhyaj8OcbwIDAQAB — сокращенная запись открытого ключа (она длиннее).
_domainkey IN TXT “o=~; [email protected]”
* где o=~ означает, что не все сообщения подписываются для домена (o=- — говорит, что все письма используют DKIM).
_adsp._domainkey IN TXT “dkim=all”
* all запрещает принимать письма от домена без цифровой подписи. Другие варианты: discardable — блокировать сообщения на стороне получателя, unknown — по умолчанию (такую запись создавать не обязательно).
Стоит учитывать, что записи в DNS могут обновляться на протяжении длительного времени, например, от 15 минут до 24 часов. Если проверка дала отрицательный результат, пробуем повторить тест через час.
Отправляем электронное сообщение на различные почтовые системы — mail.ru, gmail.com, yandex.ru.
Способов отправки несколько, например, можно выполнить следующие команды.
а) на Red Hat / CentOS:
yum install mailx
* данная команда установит утилиту для отправки почты из командной строки, если ее нет.
echo “Test DKIM” | mail -s “Testing DKIM” -S smtp=”localhost:25″ -S from=”[email protected]” -S return-path=”[email protected]” [email protected]
б) на Debian / Ubuntu:
apt-get install mailutils
echo “Test DKIM” | mail -s “Testing DKIM” -a “Smtp: localhost:25” -a “From: [email protected]” -a “Return-path: [email protected]” [email protected]
* где [email protected] — почтовый ящик, от которого отправляется письмо (напомню, в данном примере подпись создается для домена admins24.com), [email protected] — должен быть Ваш адрес почты, на который придет письмо.
Второй способ — настроить почтовый клиент, который будет отправлять почту через настроенный нами сервер.
Открываем наше письмо и смотрим заголовки (в mail.ru: Еще – Служебные заголовки).
Среди них мы должны увидеть следующую строчку:
dkim=pass header.d=admins24.com
Проверка домена на базе DKIM настроена успешно.
Разберем процесс добавления дополнительных записей dkim. Чтобы работать было удобнее и быстрее, в консоли создадим переменную, значением которой должен быть наш домен:
DKIM_DOMAIN=domain.zone
* где вместо domain.zone ставим наш домен.
Создаем каталог для размещения ключей домена:
mkdir -p /etc/opendkim/$DKIM_DOMAIN
Генерируем ключ:
opendkim-genkey -D /etc/opendkim/$DKIM_DOMAIN/ –domain $DKIM_DOMAIN –selector relay
Задаем нужные права:
chown :opendkim /etc/opendkim/$DKIM_DOMAIN/*
chmod g+rw /etc/opendkim/$DKIM_DOMAIN/*
Смотрим содержимое файла txt:
cat /etc/opendkim/$DKIM_DOMAIN/relay.txt
… и используя данное содержимое, в панели управления нашим DNS создаем TXT-запись.
Добавляем соответствующие настройки в файлы TrustedHosts, KeyTable, SigningTable:
echo “*.$DKIM_DOMAIN” >> /etc/opendkim/TrustedHosts
echo “relay._domainkey.$DKIM_DOMAIN $DKIM_DOMAIN:relay:/etc/opendkim/$DKIM_DOMAIN/relay.private” >> /etc/opendkim/KeyTable
echo “*@$DKIM_DOMAIN relay._domainkey.$DKIM_DOMAIN” >> /etc/opendkim/SigningTable
Перезапускаем службу.
а) если Linux:
systemctl reload opendkim
б) если FreeBSD:
service milter-opendkim restart
Готово.
Чтобы отправка сообщений стала еще надежнее, сделайте следующее:
Большинство трудностей решается чтением логов. Для opendkim они будут попадать в общий log-файл почты. Включить его непрерывный просмотр можно следующей командой.
а) для Red Hat / CentOS / FreeBSD:
tail -f /var/log/maillog
б) для Debian / Ubuntu:
tail -f /var/log/mail.log
Также, очень часто, проблемы возникают из-за неправильной настройки прав на ключи. Нужно иметь ввиду, что некоторые системы, из соображений безопасности, выдают ошибку, если на файлы выданы слишком широкие права на чтение. То есть, если разрешить читать файлы всем (chmod 644), система будет возвращать ошибку. Если в логах видим «error loading key», скорее всего, проблема с правами. Внимательно выполните повторно рекомендации 2-о пункта данной инструкции.
Еще одно часто появляющееся сообщение — «opendkim no signing table match for». Оно говорит, что для домена, от которого отправляется почта, нет соответствий в файле SigningTable. Либо была допущена опечатка, либо, на самом деле, для домена отправки не нужно использовать DKIM.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies