Настройка DKIM/SPF в postfix
Надёжность, доступная каждому

Настройка DKIM/SPF в postfix

Для примера будет использоваться домен example.com

Установка postfix и mailutils

apt-get update
apt-get install postfix mailutils

Настройка postfix через конфигуратор пакета

На первом шаге в конфигураторе пакета необходимо выбрать опцию Internet site:

Postfix Configuration
---------------------

Please select the mail server configuration type that best meets your needs.

 No configuration:
  Should be chosen to leave the current configuration unchanged.
 Internet site:
  Mail is sent and received directly using SMTP.
 Internet with smarthost:
  Mail is received directly using SMTP or by running a utility such
  as fetchmail. Outgoing mail is sent using a smarthost.
 Satellite system:
  All mail is sent to another machine, called a 'smarthost', for delivery.
 Local only:
  The only delivered mail is the mail for local users. There is no network.

  1. No configuration  2. Internet Site  3. Internet with smarthost  4. Satellite system  5. Local only

General type of mail configuration: 2

На втором шаге необходимо задать имя почтовой системы:

The "mail name" is the domain name used to "qualify" _ALL_ mail addresses without a domain name. This includes mail to and from <root>: please do not make your machine send out mail from
root@example.org unless root@example.org has told you to.

This name will also be used by other programs. It should be the single, fully qualified domain name (FQDN).

Thus, if a mail address on the local host is foo@example.org, the correct value for this option would be example.org.

System mail name: example.com

Настройка SPF

Настроенный SPF и DKIM снизит вероятность попадания письма в спам.

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

#-all означает, что письмо, которое не прошло проверку, будет отклонено
Хост        Указатель                    TTL
@           v=spf1 ip4:server_ip -all    300

server_ip необходимо заменить на IP-адрес сервера, который отправляет письма.

Настройка DKIM

apt-get install opendkim opendkim-tools
mkdir /etc/postfix/dkim/
#создание ключей для домена example.com
opendkim-genkey -D /etc/postfix/dkim/ -d example.com -s mail

После выполнения последней команды в директории /etc/postfix/dkim/ появятся ключевая пара (публичный и приватный ключ) для домена example.com:

#Установка прав на приватный ключ
chmod 600 /etc/postfix/dkim/example.com.private
#Смена владельца директории
chown -R opendkim /etc/postfix/dkim/

Файл /etc/opendkim.conf необходимо привести к следующему виду:

Syslog yes
#Режим подписи и проверка подписей
Mode sv
#Указываем список ключей
KeyTable file:/etc/postfix/dkim/keytable
#Соответствие ключей и доменов
SigningTable file:/etc/postfix/dkim/signingtable

В файле /etc/postfix/dkim/keytable необходимо указать информацию о приватном ключе:

#имя_ключа домен:селектор:/путь/до/ключа
mail._domainkey.example.com example.com:mail:/etc/postfix/dkim/example.com.private

В файле /etc/postfix/dkim/signingtable указываются домены, которые необходимо подписывать:

#домен имя_ключа
example.com mail._domainkey.example.com
#можно указать несколько доменов
#example.net www._domainkey.example.net

В /etc/default/opendkim необходимо указать сокет, который будет слушать opendkim (другие директивы SOCKET необходимо закоментировать):

SOCKET="inet:8891@localhost"

Добавляем в /etc/postfix/main.cf:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Затем перезапускаем postfix и opendkim:

service postfix restart
service opendkim restart

Осталось настроить DNS.

Необходимо создать TXT-записи следующего вида:

#p=MIID...AQAB берем из файла /etc/postfix/dkim/example.com.txt

Хост                        Указатель                             TTL
mail._domainkey             v=DKIM1; g=*; k=rsa; p=MIID...AQAB    300
#Указываем, что все письма для домена example.com должны быть подписаны
#Возможные варианты:
#all - все сообщения должны быть подписаны
#discardable - отклонять не подписанные сообщения
#unknown - аналогично отсутствию записи

Хост                        Указатель                             TTL
_adsp._domainkey            dkim=all                              300

Тестирование

Для проверки можно отправить тестовое сообщение на свой почтовый ящик с помощью утилиты mail.

echo "test" | mail -aFrom:root@example.com my_email@yandex.ru

В заголовках полученного сообщения проверки SPF и DKIM должны быть успешно пройдены:

spf=pass
dkim=pass

Также проверить DKIM можно с помощью утилиты opendkim-testkey:

# opendkim-testkey -d example.com -s mail -vvv -k /etc/opendkim/keys/mail.private

opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'mail._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

При написании статьи использовались следующие материалы.