Настройка 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
перечень доверенных хостов, исходящие от этих хостов подписанными:
cat << EOF > /etc/opendkim/TrustedHosts
127.0.0.1
localhost
*.example.com
EOF
Настройка 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/var/run/opendkim/opendkim.sock
PidFile /var/run/opendkim/opendkim.pid
Указываем расположение сокета для Postfix в файле OpenDKIM defaults /etc/default/opendkim
:
SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"
Создаем необходимый каталог /var/spool/postfix/var/run/opendkim
для размещения сокета opendkim и назначаем права собственности пользователю opendkim:
mkdir -p /var/spool/postfix/var/run/opendkim
chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
Systemd
Для управление сервисов 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:var/run/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
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.