Не попасть в спам: настройка DKIM и SPF в Exim

exim-dkim

 

 

 

 

 

Продолжение этого поста. Настраиваем наш smtp, что-бы письма не попадали в спам.

Немного теории для начала.

DKIM (расшифровывается как DomainKeys Identified Mail) — метод идентификации письма по доменным ключам.
DKIM настраивается на почтовом сервере для того, чтобы подписывать исходящие письма цифровой подписью. Наличие такой подписи в заголовке отправленного письма сообщает серверу-получателю, что оно действительно было отправлено с указанного домена.
Известно, что в СПАМ-письмах часто в поле From: ставят е-mail, не имеющий совершенно никакого отношения к отправителю. В этом случае DKIM поможет распознать реальное письмо от спама. В отличие от других методов цифровой подписи письма, DKIM совместим с существующими форматами и протоколами и может быть плавно интегрирован в имеющиеся системы доставки и получения почты.

Подпись письма происходит на SMTP-сервере с помощью секретного ключа (Private key), а расшифровка подписи происходит на сервере-получателе или клиентской программе с помощью публичного ключа (Public key). Что интересно, публичный ключ хранится в DNS, что позволяет убить сразу двух зайцев. Во-первых, нет необходимости прикладывать Public key с каждым письмом для его расшифровки. А во-вторых, в таком случае DKIM позволяет сообщать серверам-получателям что делать с письмом, которое не имеет цифровой подписи, но якобы отправлено от вас. Эта технология называется ADSP (Author Domain Signing Practices). ADSP также хранится в DNS SMTP-сервера и доступен всем и отовсюду.

Для работы потребуется, что бы Exim был собран с поддержкой SPF/DKIM. Для Debianэто означает установку пакета exim4-daemon-heavy.

apt-get install exim4-daemon-heavy opendkim opendkim-tools

Для начала надо сформировать пару Private key + Public key.

 Генерим секретный ключ:
opendkim-genkey -D /etc/exim4/dkim -d mydomain.com -s dkim

/etc/exim4/dkim — директория, где будут лежать ключи
mydomain.com — доменное имя
-s  — указываем селектор, (например, mail или dkim). Селектор будет использоваться в DNS записи и указываться в настройке транспортов exim`а.

Итак, создается два файла — dkim.txt (dkim — выбранный нами селектор) и dkim.private.

[su_spoiler title=»dkim.txt»]

dkim._domainkey IN TXT «v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2RM2t1S03pfVPATl9vv8Iw4BZFWdjgKZDH7tfQhs0G9vRuAmaZgCI09sn+6ZK9irIFHaP7CBrpsSE0IPi+g1v7z9+PlvQ7RP5Q6DlhUHM01Zts86HL2dkLB3zilagUzYPPgARjEniTWlWMxj8uex0KtfpKdie4mb0tuK8LBJrOwIDAQAB» ;

—— DKIM key dkim for mydomain.com

[/su_spoiler]

 

[su_spoiler title=»dkim.private»]

——BEGIN RSA PRIVATE KEY——
MIICXQIBAAKBgQC2RM2t1S03pfVPATl9vv8Iw4BZFWdjgKZDH7tfQhs0G9vRuAma
ZgCI09sn+6ZK9irIFHaP7CBrpsSE0IPi+g1v7z9+PlvQ7RP5Q6DlhUHM01Zts86H
L2dkLB3zilagUzYPPgARjEniTWlWMxj8uex0KtfpKdie4mb0tuK8LBJrOwIDAQAB
AoGBAIDNxG+oqyidLeqj2eXj2ERwK75IYuStIFFlFjtt8t1zJndgz+B9XrlSxZfO
vShSJ892roZsfki09EFLPThkLqOOqwaxJzdtaH2vhRsdlrdnF+yhT6J0ntiv+kYs
UtttkKCJZFJyW7pXPsVPsM8HAeHwzVKFO/mrcAHr68z6zZbhAkEA5JwJLeI6X14i
4sWWRVuWTxa9BHzlTzLyUd3BY3XYbb1Temy46LGfVnLquCv+uUl6+8AJpExRO8aO
gwyuwMc2MQJBAMwbZK32ZIfieOl4/I2DaDSONLAzqyCqh358uOwyYuHwbXtehnyc
9jKMr0pQuQqFPZyni3zpRGJj2ncK1J6gISsCQQCUhO7NuWi05oKBk15iJvNK5Hne
PYn4Xx/godHu3PPDr7lZEuM6gZMD5dqp1iNBmwRkI8nfzJkF3aRebVHm+kUxAkA/
7pSqqPL0XUviVbNF4FNTovd9+bEwmjm2tPp3gZDXlKe2bPVTMxcq3kZJ0N8lHHcg
Cpr2lVqGNyDHCO1wglfhAkBJW1EyrrKn9vQqChmDD14UnvnqE/GCX4BFwMMH6T7b
h5FNtyi1Q2gXH78thPrM5AU4x73WbF5oRri5U6wca5y/
——END RSA PRIVATE KEY——

[/su_spoiler]

Правим DNS

Добавляем DKIM селектор

Содержимое файла dkim.txt добавим в DNS зону example.com, причем вот в таком виде (скобки и кавычки нужно удалить):

 IN TXT "v=DKIM1; k=rsa; t=s; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzNINDkom8ZxTA4aImiZk...;"

Если у вас BIND то просто отредактируем файл с зоной

nano /etc/bind/db.maydomain.com
$TTL    300
$ORIGIN mydomain.com.

@       IN      SOA     mydomain.com. root.mydomain.com. (
        2016090801 ; Serial
                1d ; Refresh
                1h ; Retry
                1w ; Expire
                2h ; Negative Cache TTL
        )

@       IN      NS      ns1.fdns.tk.
@       IN      NS      ns2.fdns.tk.
@       IN      NS      mydomain.com.
@       IN      A       109.248.32.106
 IN TXT "v=DKIM1; k=rsa; t=s; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzNINDko
TksVpEL2Lxb4CMUgfrpzU8GjJRXa2701iYDEybIlsnhDy1VJWqwv6WEeF2bdyglRPlW2ZRhXb9biYoqVj7
X99pfKEbJneJkY8h8JZc4Yh/AV1PMaKMHzsDBRfPmyKm+dopUdGTt4lnTbREBBS0FvDHkbFDBGjc9IJS+J
vwIDAQAB;"

Проверяем:

host -t txt dkim._domainkey.mydomain.com

 

dkim._domainkey.mydomain.com descriptive text "\"v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2RM2t1S03pfVPATl9vv8Iw4BZFWdjgKZDH7tfQhs0G9vRuAmaZgCI09sn+6ZK9irIFHaP7CBrpsSE0IPi+g1v7z9+PlvQ7RP5Q6DlhUHM01Zts86HL2dkLB3zilagUzYPPgARjEniTWlWMxj8uex0KtfpKdie4mb0tuK8LBJrOwIDAQAB\" \;"

Правим opendkim.conf

nano /etc/opendkim.conf

Приводим его к следующему виду

Syslog                  yes
UMask                   002

Domain                  sdns.tk
KeyFile                 /etc/exim4/dkim/dkim.private
Selector                dkim

OversignHeaders         From

Выставим права /usr/sbin/opendkim (иначе получим ошибку при перезапуске «Restarting OpenDKIM: No /usr/sbin/opendkim found running; none killed.
opendkim») и перезапустим opendkim

chmod 777 -R /usr/sbin/opendkim
service opendkim restart

Настроим exim

nano /etc/exim4/exim4.conf.template

Добавляем после ### transport/10_exim4-config_transport-macros

### transport/10_exim4-config_transport-macros
## DKIM:
DKIM_DOMAIN_NAME=${lc:${domain:$h_from:}}
DKIM_FILE=/etc/exim/dkim/${lc:${domain:$h_from:}}.key
DKIM_PRIVATE_KEY_NAME=${if exists{DKIM_FILE}{DKIM_FILE}{0}}
...
## чуть правим транспорт:
remote_smtp:
...
 driver = smtp
 dkim_domain = DKIM_DOMAIN_NAME
 dkim_selector = dkim
 dkim_private_key = DKIM_PRIVATE_KEY_NAME
...

Будьте внимательны с именами, т.к. exim, по крайней мере, не чувствителен к регистру!!!
По этому DKIM_DOMAIN и dkim_domain для него будет одним и тем-же, в следствии возникает ошибка повторения «dkim_domain» option set for the second time

Для решения этой проблемы просто переименуйте DKIM_DOMAIN например в DKIM_DOMAIN_NAME

Если получите ошибку при рестарте exim

ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken

просто очистите содержимое файла/var/log/exim4/paniclog

Настройка SPF

Добавляем в DNS такие записи (предпочтительнее):

mydomain.com. IN TXT "v=spf1 a mx ~all"

а если позволяет DNS, то такую:

mydomain.com. IN SPF "v=spf1 a mx ~all"

Для проверки того, что запись добавилась и работает, её нужно проверить через spfquery:

# dig -t spf mydomain.com +short

PS: И всё же я попал в спам. DKIM в заголовке сообщения почему-то не валидный. Где-то происходит изменение dkim при отправке через exim. Как разберусь — допишу этот пост.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *