Я использую exim 4.82 на Debian sid. Я следил за несколькими руководствами о том, как настроить exim для подписи исходящих писем, но похоже, что что-то работает не так, как должно быть.
Мой диагноз таков $sender_address_domain
всегда устанавливается на имя хоста сервера (/etc/hostname
), независимо от того, что From:
поле находится в сообщении электронной почты.
Я определил следующие макросы в /etc/exim4/conf.d/transport/00_exim4-config_header
:
DKIM_CANON = relaxed
DKIM_DOMAIN = ${sender_address_domain}
DKIM_SELECTOR = dkim
DKIM_PRIVATE_KEY = /etc/exim4/dkim.private.key
Эта текущая настройка подписывает исходящие электронные письма, но домен в подписи DKIM всегда установлен на euvps.rolisoft.net
, независимо от From:
поле. Мое лучшее предположение $sender_address_domain
установлен на euvps.rolisoft.net
, когда он должен быть установлен на домен адреса электронной почты в From:
поле.
Из-за этого проверка не выполняется с bad version
сообщение:
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=euvps.rolisoft.net; s=dkim; // <- d= should be set to whatever is in From
h=Date:Message-Id:From:Subject:To; bh=...; b=...;
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of root@euvps.rolisoft.net designates 188.226.159.108 as permitted sender) smtp.mail=root@euvps.rolisoft.net;
dkim=neutral (bad version) header.i=@euvps.rolisoft.net;
dmarc=fail (p=NONE dis=NONE) header.from=seriesinfos.com
Настройка DKIM_DOMAIN
вручную на доменное имя, с которого я собираюсь отправить сообщение, решает эту проблему, и подпись DKIM становится действительной. Однако я использую несколько доменных имен, поэтому было бы лучше, если DKIM_DOMAIN
будет автоматически настроен на любой адрес электронной почты, с которого я отправляю сообщение.
Я не настраивал настраиваемые маршрутизаторы и транспорты, как это предлагается в некоторых руководствах. (Я делал это в какой-то момент, но результаты были те же, поэтому я удалил их.)
Настройка DKIM_DOMAIN
к ${lookup{$sender_address}lsearch*@{/etc/exim4/dkim_senders}}
(с участием dkim_senders
правильно настроен) просто не будет подписывать сообщения, однако dkim_senders
не имеет euvps.rolisoft.net
в нем, так что я предполагаю здесь $sender_address
также установлен на euvps.rolisoft.net
, поэтому отсутствие подписи.
Я не совсем уверен, как отлаживать что $sender_address_domain
установлен на.
Хотя я все еще не уверен, почему нет $sender_address
правильно заполненный, я нашел обходное решение моей проблемы, используя другую переменную:
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
Это правильно устанавливает доменное имя в подписи DKIM.
Чтобы прекратить подписывать домены, для которых у меня нет ключа, я установил два других макроса:
DKIM_FILE = /etc/exim4/keys/${lc:${domain:$h_from:}}.pem
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
По сути, они просто ищут закрытый ключ в /etc/exim4/keys/*domain*.pem
и не подпишет, если его не существует.