Настройка DKIM · 4 min read · Oct 14, 2025

Настройка DKIM (DomainKeys Identified Mail) для работы с Postfix на CentOS с использованием OpenDKIM

Настройка DKIM (DomainKeys Identified Mail) для работы с Postfix на CentOS с использованием OpenDKIM

Версия 1.0
Автор: Эладо Мартинес < [email protected] >
http://twitter.com/mafecsllc

Этот учебник показывает, как настроить DKIM на сервере CentOS с работающим Postfix с использованием OpenDKIM. Я также расскажу о некоторых простых советах по устранению неполадок и рекомендации по будущим обновлениям вашей установки OpenDKIM.

1 Требования

Этот учебник предполагает, что у вас есть полностью функциональная установка CentOS, работающая с следующими службами:

  • Postfix 2.3.3 или лучше, в настоящее время работающий.
  • Sendmail отключен.

2 Предварительные заметки

Я выполняю все шаги в этом учебнике с правами root, в настоящее время я использую CentOS 6.3 с версией OpenDKIM 2.4.2 и буду использовать example.com в качестве основного домена для этого учебника.

3 Загрузка и установка OpenDKIM

Вам также нужно установить пакеты разработки OpenSSL и Sendmail, так как они содержат некоторые “библиотеки”, необходимые для работы OpenDKIM.

yum install sendmail-devel openssl-devel

Скачайте OpenDKIM в директорию /usr/local/src:

cd /usr/local/src
wget http://sourceforge.net/projects/opendkim/files/opendkim-2.4.2.tar.gz

Распакуйте, настройте, скомпилируйте и установите OpenDKIM с помощью:

tar zxvf opendkim-2.4.2.tar.gz
cd opendkim-2.4.2
./configure –sysconfdir=/etc –prefix=/usr/local –localstatedir=/var
make
make install

Обратите внимание, что команда ./configure включает несколько очень важных флагов, которые будут переданы в скрипт запуска, создаваемый при выполнении команды configure. Первый указывает системе, где будет находиться конфигурационный файл OpenDKIM, второй устанавливает предпочтительный префикс для некоторых других важных местоположений файлов, а последний контролирует директорию, где будет храниться файл PID для OpenDKIM.

4 Создание нового пользователя

Добавьте нового пользователя для DKIM с именем opendkim с помощью следующих опций:

useradd -r -U -s /sbin/nologin opendkim

Эта команда создаст новую системную учетную запись (-r) и группу (-g) с именем opendkim и не предоставит этому пользователю доступ к оболочке (-s).

5 Создание рабочих директорий

Создайте новые директории для OpenDKIM и задайте им правильные права собственности и разрешения с помощью:

mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod -R go-wrx /etc/opendkim/keys

6 Копирование скрипта запуска в /etc/init.d/

Исходный пакет OpenDKIM включает каталог contrib, который содержит пользовательский скрипт инициализации, который можно использовать со всеми системами, совместимыми с RedHat, включая Fedora и CentOS. Вы можете скопировать его в директорию /etc/init.d/, чтобы упростить запуск, остановку, перезапуск и перезагрузку OpenDKIM:

cp /usr/local/src/opendkim-2.4.2/contrib/init/redhat/opendkim /etc/init.d/

Теперь установите правильные разрешения для скрипта инициализации:

chmod 755 /etc/init.d/opendkim

7 Генерация ключей для подписи

Вам нужно сгенерировать закрытый и открытый ключ для каждого из доменов, для которых вы хотите подписывать почту. Закрытый ключ хранится на вашем сервере, в то время как открытый ключ публикуется в DNS-записях вашего домена, чтобы принимающие почтовые серверы могли проверить вашу подписанную DKIM почту.

Вам нужно сейчас решить, каково будет имя вашего селектора. Селектор — это уникальное ключевое слово, которое связано с обоими ключами (публичным и приватным), включается во все подписи и публикуется в ваших DNS-записях. Для простоты я использую слово default в качестве своего селектора по умолчанию. Не стесняйтесь выбрать что-то другое, но если вы это сделаете, вам нужно будет использовать его последовательно на протяжении всей настройки. Также, хотя это и должно быть очевидно, вы должны использовать свой почтовый домен вместо example.com на протяжении следующих шагов.

Создайте свои ключи:

mkdir /etc/opendkim/keys/example.com
/usr/local/bin/opendkim-genkey -D /etc/opendkim/keys/example.com/ -d example.com -s default
chown -R opendkim:opendkim /etc/opendkim/keys/example.com
mv /etc/opendkim/keys/example.com/default.private /etc/opendkim/keys/example.com/default

В этом примере я использовал опцию -D (директория), опцию -d (домен) и опцию -s (селектор). Это все, что вам нужно, чтобы это заработало.

8 Редактирование конфигурационных файлов

Вам нужно создать или отредактировать четыре файла:

  • 1 /etc/opendkim.conf –- основной конфигурационный файл OpenDKIM
  • 2 /etc/opendkim/KeyTable –- список ключей, доступных для подписи
  • 3 /etc/opendkim/SigningTable – список доменов и учетных записей, разрешенных для подписи
  • 4 /etc/opendkim/TrustedHosts –- список серверов, которым “доверять” при подписании или проверке

Создайте файл /etc/opendkim.conf:

vi /etc/opendkim.conf

Убедитесь, что ваш файл выглядит следующим образом:

##
## opendkim.conf -- конфигурационный файл для фильтра OpenDKIM
##
AutoRestart             Yes
AutoRestartRate         10/1h
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
LogWhy                  Yes
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
SigningTable            refile:/etc/opendkim/SigningTable
Socket                  inet:8891@localhost
Syslog                  Yes
SyslogSuccess           Yes
TemporaryDirectory      /var/tmp
UMask                   022
UserID                  opendkim:opendkim

Создайте файл /etc/opendkim/KeyTable:

vi /etc/opendkim/KeyTable

Убедитесь, что ваш файл выглядит следующим образом:

default._domainkey.example.com example.com:default:/etc/opendkim/keys/example.com/default

Файл KeyTable сообщает OpenDKIM, где найти ваши ключи. Каждая запись в файле KeyTable — это одна строка для каждого местоположения ключа (например, весь текст в приведенном выше примере должен находиться в одной строке в вашем файле). Если вы собираетесь использовать несколько ключей (для подписания почты для виртуальных доменов с разными ключами), вам нужно будет создать отдельную строку в файле KeyTable для каждого домена.

Создайте файл /etc/opendkim/SigningTable:

vi /etc/opendkim/SigningTable

Убедитесь, что ваш файл выглядит следующим образом:

*@example.com default._domainkey.example.com

Файл SigningTable сообщает OpenDKIM, как использовать ваши ключи, то есть какие отправители должны использовать какие селекторы для своих подписей. В приведенном выше примере я говорю, что все () отправляющие почту с сервера “example.com” должны использовать селектор с именем “default”. Важно отметить, что символ подстановки будет работать только в том случае, если опция SigningTable использует префикс refile: перед именем файла.

Создайте файл /etc/opendkim/TrustedHosts:

vi /etc/opendkim/TrustedHosts

Убедитесь, что ваш файл выглядит следующим образом:

127.0.0.1
hostname1.example1.com
example1.com
hostname1.example2.com
example2.com

Файл TrustedHosts сообщает OpenDKIM, кому разрешено использовать ваши ключи. Поскольку он упоминается в директиве ExternalIgnoreList в вашем конфигурационном файле, OpenDKIM будет игнорировать этот список хостов при проверке входящей почты, а поскольку он также упоминается в директиве InternalHosts, этот же список хостов будет считаться “внутренним”, и OpenDKIM будет подписывать их исходящую почту.

ВАЖНО: Убедитесь, что вы указали IP-адрес для localhost (127.0.0.1) в файле TrustedHosts, иначе OpenDKIM не будет подписывать почту, отправленную с этого сервера. Если у вас есть несколько серверов в одной сети, которые пересылают почту через этот сервер, и вы хотите подписывать их почту, они также должны быть перечислены в файле TrustedHosts. Поместите каждую запись на отдельной строке. Запись может быть именем хоста, доменным именем (например, “example.com”), IP-адресом, адресом IPv6 (включая адрес, сопоставленный с IPv4) или спецификацией IP в стиле CIDR (например, “192.168.1.0/24”).

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.