Поиск по сайту:

Как установить и настроить DKIM с Postfix в Debian Wheezy


Введение

Разочарование от того, что вас ошибочно пометили как спамера, не является чем-то необычным для большинства администраторов почтовых серверов. Исключая возможность скомпрометированного сервера, ложный флаг обычно возникает по одной из следующих причин:

  • сервер является открытым почтовым ретранслятором
  • IP-адрес отправителя или сервера занесен в черный список
  • у сервера нет полного доменного имени (FQDN) и записи PTR
  • DNS-запись Sender Policy Framework (SPF) отсутствует или неправильно настроена
  • реализация DomainKeys Identified Mail (DKIM) отсутствует или неправильно настроена

Это некоторые из основных свойств, которые проверяются большинством проприетарных и открытых спам-фильтров (включая SpamAssassin). Прохождение этих тестов чрезвычайно важно для хорошо настроенного почтового сервера.

В этом руководстве основное внимание будет уделено установке и настройке OpenDKIM]: реализация системы аутентификации отправителя DKIM с открытым исходным кодом.

Предполагается, что читатель знает, как получить доступ к серверу через SSH, Postfix и Dovecot уже установлены и настроены (учебник).

О ДКИМ

DKIM — это интернет-стандарт, который позволяет человеку или организации связать доменное имя с сообщением электронной почты. По сути, это служит методом взятия на себя ответственности за сообщение. По своей сути DKIM основан на асимметричной криптографии. Агент передачи почты (MTA) отправителя подписывает каждое исходящее сообщение закрытым ключом. Получатель извлекает открытый ключ из DNS-записей отправителя и проверяет, не были ли изменены тело сообщения и некоторые поля заголовка с момента подписания сообщения.

Установить OpenDKIM

Перед началом установки рекомендуется обновить систему:

sudo apt-get update
sudo apt-get dist-upgrade

Установите OpenDKIM и его зависимости:

sudo apt-get install opendkim opendkim-tools

Дополнительные пакеты будут перечислены как зависимости, введите yes и нажмите Enter, чтобы продолжить.

Настроить OpenDKIM

Для настройки OpenDKIM необходимо создать и отредактировать пару файлов.

Nano будет использоваться в качестве редактора, потому что он установлен по умолчанию в дроплетах DigitalOcean и прост в эксплуатации:

  • навигация с помощью клавиш со стрелками
  • выйти без сохранения изменений: нажмите CTRL + X, а затем N
  • выйти и сохранить изменения: нажмите CTRL + X, затем Y и, наконец, нажмите Enter

Важно: замените каждый экземпляр example.com своим собственным доменом во всех командах и файлах конфигурации. Не забудьте сохранить файлы после редактирования.

Начнем с основного файла конфигурации:

sudo nano /etc/opendkim.conf

Добавьте следующие строки в конец файла conf (каждый параметр объясняется ниже). При желании вы можете выбрать собственный номер порта для Socket. Убедитесь, что он не используется другим приложением.

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes

Canonicalization        relaxed/simple

ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable

Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost

  • AutoRestart: автоматический перезапуск фильтра при сбоях
  • AutoRestartRate: указывает максимальную скорость перезапуска фильтра, если перезапуски начинают происходить быстрее, чем эта скорость, фильтр прекращает работу; 10/1h — разрешено не более 10 перезапусков в час.
  • UMask: дает все права доступа группе пользователей, определенной UserID, и позволяет другим пользователям читать и выполнять файлы, в этом случае это позволит создавать и изменять файл PID.
  • Syslog, SyslogSuccess, *LogWhy: эти параметры включают подробное ведение журнала с помощью вызовов syslog.
  • Канонизация: определяет методы канонизации, используемые при подписании сообщения, метод простой почти не допускает изменений, а метод расслабленный допускает незначительные изменения, такие как замена пробелов; relaxed/simple — заголовок сообщения будет обработан с помощью алгоритма relaxed, а тело — с помощью simple.
  • ExternalIgnoreList: указывает внешние хосты, которые могут отправлять почту через сервер, как один из подписывающих доменов без учетных данных.
  • InternalHosts: определяет список внутренних хостов, чья почта не должна проверяться, а вместо этого должна быть подписана.
  • KeyTable: сопоставляет имена ключей с ключами подписи.
  • SigningTable: список подписей, применяемых к сообщению, на основе адреса, указанного в поле заголовка From:.
  • Режим: объявляет режимы работы; в этом случае milter действует как подписывающее лицо (s) и верификатор (v)
  • PidFile: путь к файлу Pid, который содержит идентификационный номер процесса.
  • SignatureAlgorithm: выбирает алгоритм подписи, который будет использоваться при создании подписей.
  • UserID: процесс opendkim запускается под этим пользователем и группой
  • Socket: milter будет прослушивать указанный здесь сокет, Posfix будет отправлять сообщения в opendkim для подписи и проверки через этот сокет; 12301@localhost определяет сокет TCP, который прослушивает localhost, порт 12301

Эта простая конфигурация позволяет подписывать сообщения для одного или нескольких доменов. Чтобы узнать о других параметрах, перейдите сюда.

Подключаем milter к Postfix:

sudo nano /etc/default/opendkim

Добавьте следующую строку, отредактируйте номер порта, только если используется пользовательский:

SOCKET="inet:12301@localhost"

Настройте postfix для использования этого milter:

sudo nano /etc/postfix/main.cf

Убедитесь, что эти две строки присутствуют в конфигурационном файле Postfix и не закомментированы:

milter_protocol = 2
milter_default_action = accept

Вероятно, Postfix уже использует фильтр (SpamAssasin, Clamav и т. д.); если присутствуют следующие параметры, просто добавьте к ним milter opendkim (milters разделены запятой), номер порта должен быть таким же, как в opendkim.conf:

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301
non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

Если параметры отсутствуют, определите их следующим образом:

smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Создайте структуру каталогов, в которой будут храниться доверенные хосты, таблицы ключей, таблицы подписей и криптоключи:

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

Укажите доверенные хосты:

sudo nano /etc/opendkim/TrustedHosts

Мы будем использовать этот файл для определения как ExternalIgnoreList, так и InternalHosts, сообщения, исходящие от этих хостов, доменов и IP-адресов, будут доверенными и подписанными.

Поскольку наш основной файл конфигурации объявляет TrustedHosts как файл регулярного выражения (refile), мы можем использовать шаблоны подстановочных знаков, *.example.com означает, что сообщения, поступающие с поддоменов example.com, также будут считаться доверенными, а не только сообщения, отправленные с корневого домена.

Настройте и добавьте следующие строки во вновь созданный файл. Можно указать несколько доменов, не редактируйте первые три строки:

127.0.0.1
localhost
192.168.0.1/24

*.example.com

#*.example.net
#*.example.org

Создайте таблицу ключей:

sudo nano /etc/opendkim/KeyTable

Таблица ключей содержит каждую пару селектор/домен и путь к их закрытому ключу. В качестве селектора можно использовать любую буквенно-цифровую строку, в данном примере используется mail и менять его не нужно.

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

#mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private
#mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

Создайте таблицу подписи:

sudo nano /etc/opendkim/SigningTable

Этот файл используется для объявления доменов/адресов электронной почты и их селекторов.

*@example.com mail._domainkey.example.com

#*@example.net mail._domainkey.example.net
#*@example.org mail._domainkey.example.org

Сгенерируйте открытый и закрытый ключи

Перейдите в каталог ключей:

cd /etc/opendkim/keys

Создайте отдельную папку для домена для хранения ключей:

sudo mkdir example.com
cd example.com

Сгенерируйте ключи:

sudo opendkim-genkey -s mail -d example.com

-s указывает селектор, а -d — домен, эта команда создаст два файла, mail.private — наш закрытый ключ, а mail.txt содержит открытый ключ.

Измените владельца закрытого ключа на opendkim:

sudo chown opendkim:opendkim mail.private

Добавьте открытый ключ в записи DNS домена.

Откройте mail.txt:

sudo nano -$ mail.txt

Открытый ключ определяется в параметре p. Не используйте приведенный ниже пример ключа, это всего лишь иллюстрация, и он не будет работать на вашем сервере.

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

Скопируйте этот ключ и добавьте запись TXT в записи DNS вашего домена:

Name: mail._domainkey.example.com.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

Обратите внимание, что изменения DNS могут вступить в силу в течение нескольких часов.

Перезапустите Postfix и OpenDKIM:

sudo service postfix restart
sudo service opendkim restart

Поздравляем! Вы успешно настроили DKIM для своего почтового сервера!

Конфигурацию можно проверить, отправив пустое электронное письмо на адрес check-auth@verifier.port25.com, после чего будет получен ответ. Если все работает правильно, вы должны увидеть DKIM check: pass в разделе Summary of Results.

==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   neutral
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham

Кроме того, вы можете отправить сообщение на адрес Gmail, который вы контролируете, просмотреть заголовки полученного письма в папке «Входящие» Gmail, dkim=pass должен присутствовать в Результаты аутентификации. поле заголовка.

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;
       dkim=pass header.i=@example.com;

Предоставлено: П. Себастьяном