SCROLL
Среднее время на прочтение: 5 мин.

Настройка 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
Если на почтовом сервере несколько доменом, то DKIM запись должна быть по одной строке на каждую пару селектор/домен и путь к их закрытому ключу.

Добавляем в файл /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 должен выглядеть следующим образом:

/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:

/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, либо отредактируем его если он существует.

/etc/systemd/system/multi-user.target.wants/opendkim.service
[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:

/etc/postfix/main.cf
...

# 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:

/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
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.