Настройка DKIM в связке с Postfix.
В этой статье мы по шагам рассмотрим, как настроить DKIM на почтовом сервере Postfix для обеспечения безопасности отправляемых сообщений.
DKIM (DomainKeys Identified Mail) — это система, которая позволяет вашим почтовым серверам добавлять подпись к заголовкам исходящей электронной почты. Он идентифицирует открытый ключ вашего домена, чтобы другие почтовые серверы могли проверить подпись. Кроме того, DKIM помогает не допустить, чтобы ваша почта считалась спамом. Это также позволяет почтовым серверам обнаруживать, когда ваша почта была подделана при пересылке.
Схема работы DKIM:

example.com. И во всех командах нужно подставлять имя своего домена вместо example.com.Устанавливаем OpenDKIM
apt-get install opendkim opendkim-tools -yСоздаем каталоги для хранения файлов данных OpenDKIM:
mkdir /etc/opendkim
mkdir /etc/opendkim/keys
touch /etc/opendkim/KeyTable
touch /etc/opendkim/SigningTable
touch /etc/opendkim/TrustedHostsДобавляем пользователя postfix в группу opendkim. Назначаем права собственности пользователю opendkim:
adduser postfix opendkim
chown -R opendkim:opendkim /etc/opendkimСоздание ключа DKIM
Создаем каталог с названием домена для размещения ключа:
mkdir /etc/opendkim/keys/example.comГенерируем открытый и закрытый ключи:
opendkim-genkey -r -s dkim -d example.com -D /etc/opendkim/keys/example.com -vПрименим права доступа для созданного ключа:
chown -R opendkim:opendkim /etc/opendkim/keys/*Добавляем в файл /etc/opendkim/KeyTable пару селектор/домен и путь к их закрытому ключу. В качестве селектора используем строку которую указывали при генерации ключа mail:
echo "dkim._domainkey.example.com example.com:dkim:/etc/opendkim/keys/example.com/dkim.private" >> /etc/opendkim/KeyTableДобавляем в файл /etc/opendkim/SigningTable домен и его селектор:
echo "*@example.com dkim._domainkey.example.com" >> /etc/opendkim/SigningTableОпределяем в файле /etc/opendkim/TrustedHosts перечень доверенных хостов, исходящие от этих хостов подписанными:
127.0.0.1
localhost
*.example.comНастройка OpenDKIM
Создаем копию файла конфигурации opendkim.conf на всякий случай:
cp /etc/opendkim.conf /etc/opendkim.conf.origФайл конфигурации OpenDKIM /etc/opendkim.conf должен выглядеть следующим образом:
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
Syslog yes
SyslogSuccess yes
LogWhy yes
UMask 002
# OpenDKIM user
# Remember to add user postfix to group opendkim
UserID opendkim
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
# Commonly-used options; the commented-out versions show the defaults.
Canonicalization relaxed/simple
Mode sv
SubDomains no
#ADSPAction continue
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier. From is oversigned by default in the Debian package
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders From
# Define the location of the Socket and PID files
Socket local:/var/spool/postfix/opendkim/opendkim.sock
PidFile /var/run/opendkim/opendkim.pidУказываем расположение сокета для Postfix в файле c переменными среды OpenDKIM /etc/default/opendkim, в место имеющегося значения SOCKET=:
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"Создаем необходимый каталог /var/spool/postfix/opendkim для размещения сокета opendkim и назначаем права собственности пользователю opendkim:
mkdir -p /var/spool/postfix/opendkim
chown opendkim:opendkim /var/spool/postfix/opendkimSystemd
Для управление сервисов opendkim создадим стартовый скрипт /etc/systemd/system/multi-user.target.wants/opendkim.service для systemd, либо отредактируем его если он существует.
[Unit]
Description=OpenDKIM DomainKeys Identified Mail (DKIM) Milter
Documentation=man:opendkim(8) man:opendkim.conf(5) man:opendkim-genkey(8) man:opendkim-genzone(8) man:opendkim-testadsp(8) man:opendkim-testkey http://www.opendkim.org/docs.html
After=network.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/opendkim/opendkim.pid
ExecStartPost=/bin/sh -c 'chown opendkim:opendkim /var/run/opendkim/opendkim.pid'
UMask=0002
ExecStart=/usr/sbin/opendkim -x /etc/opendkim.conf
Restart=on-failure
ExecReload=/bin/kill -USR1 $MAINPID
[Install]
WantedBy=multi-user.targetОбновляем конфигурацию systemd:
systemctl daemon-reloadНастройка Postfix
В файле /etc/postfix/main.cf добавьте после smtp_header_checks = pcre:/etc/postfix/smtp_header_checks раздел для активации обработки электронной почты через демон OpenDKIM:
...
# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
...Перезапускаем службы OpenDKIM и Postfix:
/etc/init.d/opendkim restart
/etc/init.d/postfix restartНастройка DNS
DKIM использует записи TXT для хранения информации о ключе подписи для домена. Создаем текстовую TXT запись dkim._domainkey для домена со значением которое можно найти файл для домена /etc/opendkim/keys/example.com/dkim.txt:
dkim._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; s=email; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5CXahNNCRTTR1mw+uTLRNsTU9BWC0RoUtTODVdk4Yww/d0sAfuSjx2mMhSknJzCuejpHjwZHDYqUsXh6MZ9XFgNOp7d18JVVpiPIMTGZgyKqfqrqrvo1JMQi7vGVqvC6YX54WoShRuGBzAEDAOQ5IyWCFkGNInx1CxpO2vIMWDmOS6CtW7+wSPi0nj9q1fZMwqnn/UHA/qZwy5"
"Gi7Z7VxlKaBRtY8CdsJdtkDHKvZwA+zTID6fZ1NMROxC+OF3IZ1XzlpzumNPAm8VG/wuI4pkadrxOUvrEc+F+3tFPWXxSU2lzPzod+nKDEVV8HZZpuI91vBLxtCLHSecdrYlM1PQIDAQAB" ) ; ----- DKIM key email for example.comНужное нам значение внутри круглых скобок. Выберите и скопируйте весь регион из и не заключайте двойную кавычку перед v=DKIM1. Также не заключайте заключительную двойную кавычку перед закрывающими скобками. Затем удалите двойные кавычки внутри скопированного текста и пробел между ними.
Из приведенного выше файла результатом будет:
v=DKIM1; h=sha256; k=rsa; s=email; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5CXahNNCRTTR1mw+uTLRNsTU9BWC0RoUtTODVdk4Yww/d0sAfuSjx2mMhSknJzCuejpHjwZHDYqUsXh6MZ9XFgNOp7d18JVVpiPIMTGZgyKqfqrqrvo1JMQi7vGVqvC6YX54WoShRuGBzAEDAOQ5IyWCFkGNInx1CxpO2vIMWDmOS6CtW7+wSPi0nj9q1fZMwqnn/UHA/qZwy5Gi7Z7VxlKaBRtY8CdsJdtkDHKvZwA+zTID6fZ1NMROxC+OF3IZ1XzlpzumNPAm8VG/wuI4pkadrxOUvrEc+F+3tFPWXxSU2lzPzod+nKDEVV8HZZpuI91vBLxtCLHSecdrYlM1PQIDAQABПроверка работы
Для проверки все ли работает правильно, можно выполнить команду:
opendkim-testkey -d example.com -s dkim -k /etc/opendkim/keys/example.com/dkim.private -vvvУспешный вывод должен быть такой:
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: key loaded from /etc/opendkim/keys/example.com/dkim.private
opendkim-testkey: checking key 'dkim._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OKПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.