Что такое SPF, DKIM, DMARC объяснять не буду. Раз вы это читаете, то вы уже знаете, что это или хотя бы зачем. Тут просто расскажу как я это установил на debian buster c почтовым сервером sendmail.
#apt install opendkim opendkim-tools
#vim /etc/opendkim.conf
Syslog yes
SyslogSuccess Yes
LogWhy Yes
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Canonicalization relaxed/simple
Mode sv
Socket inet:8891@127.0.0.1
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Domain my.domain.ua
Selector mymail
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
вместо my.domain.ua подставим вывод команды (на почовом сервере)
#hostname -d
вместо mymail подставим вывод команды (также на почтовике)
#hostname
Далее создаем директорию, где находится пара приватный-публичный ключи:
#mkdir -p /etc/opendkim/keys
И создаем собственно эти ключи:
#opendkim-genkey -D /etc/opendkim/keys -d my.domain.ua -s mymail
#chown -R opendkim:opendkim /etc/opendkim/keys
#chmod 640 /etc/opendkim/keys/mymail.private
#chmod 644 /etc/opendkim/keys/mymail.txt
mymail.private - здесь хранится приватный ключ, доступ к которому имеет только почтовый демон (в нашем случае - сендмейл).
mymail.txt - здесь хранится публичный ключ, который мы впишем в файл зоны днс.
Далее создаем и редактируем три таких файла:
#vim /etc/opendkim/KeyTable
mymail._domainkey.my.domain.ua my.domain.ua:mymail:/etc/opendkim/keys/mymail.private
#vim /etc/opendkim/SigningTable
*@my.domain.ua mymail._domainkey.my.domain.uaЗдесь мы говорим какие почтовые адреса соответствуют dkim-записи в днс.
#vim /etc/opendkim/TrustedHosts
127.0.0.1Тут имя файла говорит само за себя.
localhost
my.domain.ua
#netstat -nlp | grep 8891
tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN 23116/opendkim
...INPUT_MAIL_FILTER(`milter1', `...')dnl
INPUT_MAIL_FILTER(`milter2', `...')dnl
INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')dnl
define(`confINPUT_MAIL_FILTERS',`opendkim,milter1,milter2')dnl
...
milter1 и milter2 вписаны для примера. Их может и не быть или может быть больше двух. У меня, например, к сендмейлу подсоединены два мильтера кламава и спамассассина. Третий стало быть опендким. Обратите внимание на `S=inet:8891@127.0.0.1' - эта запись должна совпадать с тем, что мы прописали в конфиге выше.
Выполняем
#sendmailconfig
#systemctl restart sendmail
Осталось отконфигурировать файл прямой зоны авторитетного днс для домена, который обслуживает наш почтовый сервер:
$ORIGIN my.domain.ua.
@ IN SOA mydns.my.domain.ua. hostm.my.domain.ua. ( ... )
IN NS mydns.my.domain.ua.
IN MX 10 mymail.my.domain.ua.
@ IN TXT "v=spf1 +mx +a ip4:11.11.11.11 -all"
mymail._domainkey IN TXT "v=DKIM1\; h=sha256\; k=rsa\; p=""xxxx""xxxx""xxxx""xxxx"
_adsp._domainkey IN TXT "dkim=all"
_dmarc IN TXT "v=DMARC1\; p=reject\; rua=mailto:hostm@my.domain.ua"
11.11.11.11 - айпишник нашего почтовика. Строка
mymail._domainkey IN TXT "v=DKIM1\; h=sha256\; k=rsa\; p=""xxxx""xxxx""xxxx""xxxx"
полностью соответствует содержимому файла mymail.txt, что мы создали ранее. ххххххх - так обозначены цифры ключа. Есть пара нюансов. Точки с запятой в файле днс соответствуют началу комментариев. Поэтому мы их экранируем слэшем. Также, строки в файле зоны днс не могут быть длиннее кажется 256 символов, что меньше, чем длина нашей строки (строка, что начинается из v= ), из-за чего эту длинную строку надо разбить несколькими вставками "" - они обозначены синим цветом. Также длинные строки можно заключать в круглые скобки, но у меня почему-то это не работало.
Строка с v=spf1 и есть spf запись. Строка с v=DKIM1 и есть dkim запись. Строка с v=DMARC1 и есть dmarc запись. Две строки, начинающиеся с _adsp и _dmarc просят всех не принимать письма без DKIM-подписи нашего домена. Собственно для этого все это и затевалось.
Теперь при отсылке почты в логах почтовика появяться соответствующие строки:
# journalctl -u opendkim
DKIM-Signature field added (s=mymail, d=my.domain.ua)
Также в служебной информации писем появяться DKIM-подписи вашего домена.
Я б рекомендовал бы вот эту ссылку , которая была основой данного изложения, но надеюсь, здесь все написано достаточно точно.