Установка DKIM
Для создания подписи отправляемых через Sendmail можно использовать утилиту opendkim. Для её установки на CentOS (7-ой версии) необходимо выполнить:yum install opendkim
На Ubuntu:
apt install opendkim
После установки стоит поставить опцию автоматического включения при старте системы. В CentOS:
chkconfig opendkim on
На Ubuntu:
systemctl enable opendkim
Настройка DKIM
После завершения установки необходимо добавить создать private и public ключи для подписи и проверки подписи сообщений. Ключ private хранится на сервере и не доступен для просмотра из вне. Ключ public находится в DNS записи домена и виден всем.Сделаем папку для ключей, создадим ключи и зададим им права на чтение:
mkdir -p /etc/opendkim/keys/mousedc.ru
/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/mousedc.ru/ -d mousedc.ru -s default
chown -R opendkim:opendkim /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim/keys/mousedc.ru
chmod 640 /etc/opendkim/keys/mousedc.ru/default.private
chmod 644 /etc/opendkim/keys/mousedc.ru/default.txt
- в этих командах обязательно замените "mousedc.ru" на свой домен. Каждый домен на сервере должен подписываться своим ключом, поэтому создайте для каждого сайта свою папку и сгенерируйте каждому ключи.После создания ключей можно приступить к настройке, в которой надо задать соответствие доменам и ключам, указать какие письма с каких доменов надо подписывать ключами. Для этого потребуется изменить четыре файла:
- /etc/opendkim.conf - файл конфигурации OpenDKIM
- /etc/opendkim/KeyTable - хранит список ключей
- /etc/opendkim/SigningTable - список доменов, чья почта должна быть подписана
- /etc/opendkim/TrustedHosts - список доменов, которым надо доверять при подписывании или верифицировании
opendkim.conf
По умолчанию функция автоматической подписи исходящей почты с сервера отключена. Для её включения необходимо сделать несколько настроек. Для этого нужно перейти в файл /etc/opendkim.conf и задать:Mode sv
Затем закомментировать (поставить знак решётки в начале строки) две директивы:
# LogWhy yes
И
# KeyFile /etc/opendkim/keys/default.private
После чего снять комментарий (удалить знак решётки в начале строки):
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
После чего сохранить изменения в файле.
KeyTable
В этом файле, в конец и с новой строкой, необходимо прописать путь к "private" ключу:default._domainkey.mousedc.ru mousedc.ru:default:/etc/opendkim/keys/mousedc.ru/default.private
Если на сервере несколько сайтов, то для каждого из них должна быть такая строчка в файле KeyTable. Но для каждого домена нужно указывать именно его файл "private" ключа.
SigningTable
В файл SigningTable, в конце и с новой строки, необходимо прописать какие письма необходимо подписывать. Первым параметром задаётся адрес отправителя. Чтобы подписывать все исходящие с домена письма, необходимо поставить звездочку * перед знаком @, чтобы получилось так:*@mousedc.ru default._domainkey.mousedc.ru
Таких строчек может быть несколько, с указанием разных адресов и доменов.
*@mousedc.ru default._domainkey.mousedc.ru
*@mousedc.com default._domainkey.mousedc.com
TrustedHosts
В файле TrustedHosts прописывается домен, при отправке писем с которого, можно подписать их. Каждая запись должна быть с новой строки. Если доменов несколько, то надо прописать так:mousedc.ru
mousedc.com
Письма с этих адресов так же не будут проверяться на истинность DKIM подписи, потому что ранее мы указали в /etc/opendkim.conf путь к файлу TrustedHosts в директиве ExternalIgnoreList. При этом стоит убедиться, что адрес localhost (127.0.0.1) тоже содержится в TrustedHosts, иначе OpenDKIM не будет подписывать исходящую почту.
Если в вашей сети несколько серверов, которые отправляют почту через текущий, то их ip адреса надо прописать в TrustedHosts.
Внимание. Все файлы конфигурация (KeyTable, SigningTable, TrustedHosts и др.) должны заканчиваться на пустую строку, чтобы не было проблем с запуском OpenDKIM.
Настройка SendMail
Настройка OpenDKIM окончена и остаётся только приказать SendMail пользоваться им для подписи исходящих писем. Для этого необходимо перейти в файл /etc/mail/sendmail.mc и прописать там строчку:INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl
После чего необходимо скомпилировать SendMail командой:
make all -C /etc/mail
Теперь можно запустить OpenDKIM и сделать рестарт SendMail:
systemctl start opendkim
systemctl restart sendmail
Настройка DNS
Как было сказано в начале статьи, DKIM подпись - это не только серверная часть, но и публичный ключ, который надо прописать в DNS записях домена, с которого отправляется почта. Публичный ключ можно найти в файлах, которые были созданы ранее. В нашем случае это файл/etc/opendkim/keys/mousedc.ru/default.txt
, Внутри файла будет очень строка вида:
default._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfM ... IDAQAB" ) ; ----- DKIM default for mousedc.ru
Необходимо взять из неё всё, что находится в круглых скобках за исключением двойных кавычек. То есть в нашем случае надо взять строку:
v=DKIM1; k=rsa; p=MIGfM ... IDAQAB
эту строку нужно сделать значением DNS записи типа TXT для домена default._domainkey.mousedc.ru
.