Назад | Перейти на главную страницу

Exim4 не добавляет подпись DKIM

Я потратил 2 дня на то, чтобы сказать Exim'у добавить подписи DKIM на мой сервер Debian8. Безуспешно. Я прочитал много инструкций, форумов, но ни одно из возможных решений не работает на моем сервере.

Сгенерированы ключи:

cd /etc/exim4/

openssl genrsa -out example.com-private.pem 1024 -outform PEM
openssl rsa -in example.com-private.pem -out example.com.pem -pubout -outform PEM

Созданный файл

00_local_macros 

в

/etc/exim4/conf.d/main/ 

со следующим содержанием:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}

Опубликовали текстовую DNS-запись:

20160604._domainkey.example.com

контент с открытым ключом:

k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRpHpC2q1ycmaqdnYlf5WI5g7ZyiXybd6EFdOqk35Sl7ZNfSeZelbyxqgLN+BzHpbp4Z4JDtKLSgBwugCePhl2xVDtQvO9XfqwQLMO5PAOONCLTwoGYrViwf5ki2zIqS2uN5MpuRTKW/IiK3CtRId+w5gjdACAvkwZWBstKEDrQQIDAQAB

# update-exim4.conf
# service exim4 restart

даже перезагрузил сервер.

Все электронные письма по-прежнему приходят без подписи DKIM.

Пытался добавить строчки:

dkim_domain = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
dkim_sign_headers = true

в файл /etc/exim4/conf.d./transport/30_exim4-config_remote_smtp, как это предлагается на каком-то форуме. Безуспешно. По-прежнему нет подписи DKIM.

exim4 -bV

Exim version 4.84_2 #2 built 13-Mar-2016 17:47:19
Copyright (c) University of Cambridge, 1995 - 2014
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2014
Berkeley DB: Berkeley DB 5.3.28: (September  9, 2013)
Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DKIM PRDR OCSP
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
Configuration file is /var/lib/exim4/config.autogenerated

Обновить

Практически все руководства ошибочны. При однофайловой конфигурации Exim настройки DKIM должны находиться в файле exim4.conf.template. Оно работает! Но только один домен этой конфигурации:

DKIM_CANON = relaxed
DKIM_DOMAIN = example.com
DKIM_PRIVATE_KEY = /etc/exim4/dkim/example.com-private.pem
DKIM_SELECTOR = 20160604
#DKIM_STRICT = true

Несколько доменов по-прежнему не работают. Пробовал несколько конфигураций, но безуспешно. Все три ниже не работают:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${sender_address_domain}
DKIM_FILE = /etc/exim4/dkim/{DKIM_DOMAIN}-private.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}


DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem} {/etc/exim4/dkim/${DKIM_DOMAIN}-private.pem}}

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
dkim_domain = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}

Убедитесь, что вы используете remote_smtp транспорт. Это должно быть указано после T= в /var/log/exim4/mainlog в строках, содержащих =>. Проверка DKIM для локально доставленных писем не работает, поскольку этот транспорт не используется. Используйте службу проверки, чтобы проверить, подписано ли ваше письмо, например http://dkimvalidator.com

Если вы используете remote_smtp_smarthost транспорт, вы должны изменить его, чтобы включить подпись DKIM. На машине Debian / Ubuntu с раздельной конфигурацией добавьте в 30_exim4-config_remote_smtp_smarthost файл:

# DKIM setup copied from `30_exim4-config_remove_smtp`
# see: https://serverfault.com/a/782069/117087
.ifdef DKIM_DOMAIN
dkim_domain = DKIM_DOMAIN
.endif
.ifdef DKIM_SELECTOR
dkim_selector = DKIM_SELECTOR
.endif
.ifdef DKIM_PRIVATE_KEY
dkim_private_key = DKIM_PRIVATE_KEY
.endif
.ifdef DKIM_CANON
dkim_canon = DKIM_CANON
.endif
.ifdef DKIM_STRICT
dkim_strict = DKIM_STRICT
.endif
.ifdef DKIM_SIGN_HEADERS
dkim_sign_headers = DKIM_SIGN_HEADERS
.endif

Проверьте права доступа к вашему закрытому ключу. Он должен быть доступен для чтения при использовании Exim, под которым запускается Debian-exim для установок Debian и Ubuntu. Если ваш транспорт в dkim_strict, он будет повторно ставить сообщения в очередь, если не может подписать сообщение. Он будет регистрировать причины сбоя в mainlog и paniclog. Возможно, будет проще найти сообщение в paniclog.

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

DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_PRIVATE_KEY = CONFDIR/dkim.private.20160604
DKIM_SELECTOR = ${extract{-1}{.}{DKIM_PRIVATE_KEY}}
DKIM_STRICT = true # optional - causes signing failures to defer (requeue)
#DKIM_SIGN_HEADERS = # Use default

После того, как вы подписались со статическим ключом. Вы можете попробовать эти изменения

DKIM_PRIVATE_KEY = CONFDIR/${sender_address_domain}.private.201604
DKIM_SELECTOR = 20160604
DKIM_STRICT = false # optional - pass if no key available

Вы можете просмотреть:

Это работает для меня:

DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/dkim/${dkim_domain}-private.pem} {/etc/exim4/dkim/${dkim_domain}-private.pem}}

Эти настройки необходимо поместить в exim4.conf.template файл если вы используете конфигурацию Exim из одного файла а не в 00_local_macros или других файлах, как сказано во многих инструкциях.

Установка подписей DKIM в Exim является проблемой (я потратил 3 дня), и разработчики Exim должны ее исправить.

Exim version 4.84_2 #2 built 25-Jul-2016 18:59:44

Вот что сработало для меня, я был в точной ситуации, exim4 не добавлял подпись dkim.

Я редактировал файл /etc/exim4/update-exim4.conf.conf и я обнаружил, что даже когда я использовал раздельную конфигурацию, конфигурационный файл был неправильным, поэтому мне пришлось изменить эту строку:

dc_use_split_config='true'

А потом я отредактировал 10_exim4-config_transport-macros файл и добавил в конце следующие строки:

DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = exim

Предыдущая работа заключалась в создании файла закрытого ключа и добавлении записи TXT DNS и т. Д.

Как предложил @BillThor, настройка отправителя smarthost для подписи DKIM должна работать.

Наконец-то я смог увидеть копию своего отправленного сообщения, получившего желанный DKIM-Signature заголовок с d=MY_DOMAIN кусок.

Однако я полагал, что мой почтовый ящик Yahoo (smarthost) все еще может быть недоволен отправкой сообщений от его имени. Я вижу открытый ключ MY_DOMAIN (поскольку я сохранил его в записи DNS TXT), но d=yahoo.ca в моем сообщении, полученном mail-tester.com,

DomainKeys Identified Mail (DKIM) is a method for associating a domain name to an email message, thereby allowing a person, role, or organization to claim some responsibility for the message.

The DKIM signature of your message is:

    v=1;
    a=rsa-sha256;
    c=relaxed/relaxed;
    d=yahoo.ca;
    s=s2048;
    t=1592188362;
    bh=15pFrAvOGi+eHKJgB6psh6iIBCbvYSuhPj+wQn6C7Ss=;
    h=To:Subject:From:Date:References:From:Subject;
    
b=FJXwJU3U+W+Eo4xlupet4274ZKmQ22IaAbKZn7xAAwMICJ+2LqCgC3gSHh88u/ru06+Pty9UpLcue8t0A5INFumoQqyZ1CcPLELMNcEfY76QdH92AmFds61hY5y8alQ1vuZUmIEB9ZlYHmmlaN25gYzy6IbzJ2ccjGYqovrjPMMLBeD20U662ted2TcyVz3HoeG1aRo3zSf+FCsvgi70zw0fJVsrTQ8LOKXwzxPqtgS0scjXExEB9yJ5p8U9xwnGzED4uWvfSW9NNL5H8NsUpeAni4rU/ccYLNO8NgMcwUbDtfFP6VzwdfE+wOzm3tNQqUUNnUE5jPsL+6ysrO/wMw==

Your public key is:

"k=rsa;
p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuoWufgbWw58MczUGbMv176RaxdZGOMkQmn8OOJ/HGoQ6dalSMWiLaj8IMcHC1cubJx2gziAPQHVPtFYayyLA4ayJUSNk10/uqfByiU8qiPCE4JSFrpxflhMIKV4bt+g1uHw7wLzguCf4YAoR6XxUKRsAoHuoF7M+v6bMZ/X1G+viWHkBl4UfgJQ6O8F1ckKKoZ5KqUkJH5pDaqbgs+F3PpyiAUQfB6EEzOA1KMPRWJGpzgPtKoukDcQuKUw9GAul7kSIyEcizqrbaUKNLGAmz0elkqRnzIsVpz6jdT1/YV5Ri6YUOQ5sN5bqNzZ8TxoQlkbVRy6eKOjUnoSSTmSAhwIDAQAB;
"

Key length: 2048bits

Я подозреваю, что это связано с тем, что я переписал адрес From моего локального пользователя в exim4 в / etc / email-addresses,

LOCALUSER: YAHOOUSER@yahoo.ca

Я решил, что mail-tester.com показывает более подробную информацию о расслабленных проверках DKIM в разделе «Вы правильно аутентифицированы» / «Ваше сообщение прошло тест DMARC». Ошибки с мелким шрифтом проявлялись следующим образом.

Your DMARC record is set correctly and your message passed the DMARC test

DMARC DNS entry found for the domain _dmarc.yahoo.ca:

"v=DMARC1; p=reject; pct=100; rua=mailto:dmarc_y_rua@yahoo.com;"

Verification details:

    mail-tester.com; dkim=pass (2048-bit key; unprotected) header.d=yahoo.ca header.i=@yahoo.ca header.b=FJXwJU3U; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=MY_DOMAIN header.i=@MY_DOMAIN header.b=X6s0Eqai; dkim-atps=neutral
    mail-tester.com; dmarc=pass header.from=yahoo.ca
    mail-tester.com; dkim=pass (2048-bit key; unprotected) header.d=yahoo.ca header.i=@yahoo.ca header.b=FJXwJU3U; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=MY_DOMAIN header.i=@MY_DOMAIN header.b=X6s0Eqai; dkim-atps=neutral
    From Domain: yahoo.ca
    DKIM Domain: yahoo.ca