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

Exim не хочет правильно подписывать DKIM

Я использую 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 и не подпишет, если его не существует.