Установка и настройка DKIM для Postfix на Debian Wheezy
Иногда почтовые серверы бывают помечены как спамеры; кроме взлома сервера для этого есть следующие причины:
- Сервер является общедоступным сервером ретрансляции почты.
- IP-адрес отправителя или сервера добавлен в черный список.
- У сервера нет FQDN и PTR-записи.
- У отправителя отсутствует или неправильно настроена DNS-запись SPF.
- Отсутствует или не правильно настроен DKIM (DomainKeys Identified Mail).
Это лишь некоторые из основных параметров, которые проверяются спам-фильтрами (в том числе и SpamAssassin). Правильно настроенный почтовый сервер обязательно должен соответствовать этим требованиям.
Данное руководство поможет установить и настроить OpenDKIM, открытую реализацию системы аутентификации отправителя DKIM.
Примечание: Для выполнения руководства нужно предварительно настроить доступ к серверу через SSH, а также установить и настроить Postfix и Dovecot. Кроме того, нужно настроить имя хоста, FQDN и SPF-запись.
Что такое DKIM?
DKIM – это сетевой стандарт, позволяющий пользователю или организации связывать доменное имя с сообщением электронной почты. Таким образом на пользователя возлагается ответственность за отправку сообщения. В основе DKIM лежит асимметричная криптография. Агент пересылки почты (МТА, Mail Transfer Agent) отправителя подписывает каждое исходящее сообщение при помощи закрытого ключа. Затем получатель извлекает открытый ключ из DNS-записей отправителя и проверяет, было ли тело сообщения или некоторые поля заголовка изменены с момента подписи сообщения.
Установка OpenDKIM
Прежде чем приступить к установке, нужно обновить систему:
sudo apt-get update
sudo apt-get dist-upgrade
Установите OpenDKIM и зависимости программы:
sudo apt-get install opendkim opendkim-tools
Дополнительные пакеты будут добавлены в список в качестве зависимостей. Чтобы продолжить, введите yes и нажмите Enter.
Настройка OpenDKIM
Теперь нужно создать пару файлов для настройки OpenDKIM.
Откройте текстовый редактор (в данном случае Nano).
Примечание: Замените условный домен example.com своим доменным именем во всех командах.
Создайте главный конфигурационный файл.
sudo nano /etc/opendkim.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: эти параметры включают подробное журналирование.
- Canonicalization: задаёт методы каноникализации при подписи сообщения; например метод simple не разрешает вносить изменения, а relaxed позволяет вносить небольшие поправки в сообщение (пробелы); значение relaxed/simple: заголовок сообщения использует метод relaxed, а тело – метод simple.
- ExternalIgnoreList: указывает внешние хосты, которые могут отправлять сообщения с сервера в качестве одного из доменов без учётных данных.
- InternalHosts: задаёт список внутренних хостов, чьи сообщения не нужно проверять, но нужно подписывать.
- KeyTable: привязывает имена ключей к ключам подписи.
- SigningTable: содержит список подписей, применяемых к сообщениям согласно адресу, указанному в поле заголовка From.
- Mode: объявляет операционные режимы; в этом случае используются режимы signer (s) и verifier (v).
- PidFile: путь к Pid-файлу, содержащему необходимые идентификаторы.
- SignatureAlgorithm: устанавливает алгоритм подписи.
- UserID: пользователь и группа, при помощи которых работает opendkim.
- Socket: заданный здесь сокет будет прослушиваться и использоваться Posfix для отправки сообщений opendkim; значение 12301@localhost определяет TCP-сокет на localhost, порт 12301.
Эти простые настройки нужны для поддержки подписи сообщений для одного домена и больше. Подробнее о конфигурациях можно прочесть здесь.
Теперь подключите сервер milter (сокращение от mail filter) к 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 и т.д.). Если следующие параметры находятся в файле, просто добавьте в них сервер opendkim milter (серверы milter нужно разделять запятыми), номер порта должен совпадать с заданным в файле 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
Создание закрытых и открытых ключей
Откройте каталог keys:
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. Если настройки выполнены верно, вы получите ответ:
==========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham
Кроме того, можно отправить сообщение на адрес Gmail, к которому у вас есть доступ, и просмотреть заголовки полученного сообщения; в поле заголовка Authentication-Results должен находиться 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;
2 комментария
Отличная статья, спасибо, все с пол пинка заработало =)
Непонятно ничего на последнем пункте:
Отправьте пустое сообщение на check-auth@verifier.port25.com. Если настройки выполнены верно, вы получите:
Как отправить и где получу?!