Я потратил 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