Мой почтовый сервер, использующий exim4, имеет ACL для проверки подписей DKIM. Он принимает все, но регистрирует сбои и пишет заголовок с результатами.
Я отправляю почту с другого сервера, который, как я считаю, правильно добавляет подписи DKIM. (Например, я отправлял почту на адреса Gmail и Outlook, проверял заголовки, и обе эти системы пропустили DKIM.) Но мой почтовый сервер сообщает bodyhash_mismatch
.
Мой почтовый сервер не всегда сообщает, что DKIM неисправен.
Вот письмо. Я сменил домены:
- пример.orgЭто основной домен организации; он используется вОт:заголовок и домен подписчика. Открытый ключ публикуется в DNS.
- отправитель.пример.orgЭто сервер, который отправляет электронное письмо, создает заголовок DKIM. ЭтоОбратный путьзаголовок.
- приемник.example.orgЭто домен моего почтового сервера, где проверяется DKIM. Это то место, где
X-dkim-check
добавляется заголовок, и текст, который следует,domain=
взят отсюда$dkim_cur_signer
Return-Path: <[email protected]>
Delivered-To: [email protected]
Received: from mail.receiver.example.org
by mail.receiver.example.org with LMTP
id t8rHGepc52SOVA8ADCPZSA
(envelope-from <[email protected]>)
for <[email protected]>; Thu, 24 Aug 2023 14:36:42 +0100
Received: from sender-rdns.example.org ([1.2.3.4] helo=sender.example.org)
by mail.receiver.example.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
(Exim 4.94.2)
(envelope-from <[email protected]>)
id 1qZAVv-004DMU-00
for [email protected]; Thu, 24 Aug 2023 14:36:42 +0100
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;
d=example.org; s=220151210; h=Sender:Message-Id:Subject:From:To:Date:
Reply-To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID:
Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc
:Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:
List-Subscribe:List-Post:List-Owner:List-Archive;
bh=ecGWgWCJeWxJFeM0urOVWP+KOlqqvsQYKOpYUP8nk7I=; b=GTY2HZVje81tRJ0/xKFNUk5d7/
9wE7CGtwmz2APM5VTDKY6q+qIbwhCRNzc6IWZ4j0Y9FOtnuVBeNR1I5xbOuqPaf62MYQZJFjLQ3/J
PNpOpS3i1Yd3NCZUs1iB/Q8N+ii73FrvD5k1AA8F5yzJhVeaposgbkvU5vv1s/KgqTIA=;
Received: from localhost ([127.0.0.1] helo=sender.example.org)
by sender.example.org with esmtp (Exim 4.96)
(envelope-from <[email protected]>)
id 1qZAVt-001EhO-2k
for [email protected];
Thu, 24 Aug 2023 14:36:41 +0100
Date: Thu, 24 Aug 2023 14:36:41 +0100
To: [email protected]
From: [email protected]
Subject: test Thu, 24 Aug 2023 14:36:41 +0100
Message-Id: <[email protected]>
X-Mailer: swaks v20201014.0 jetmore.org/john/code/swaks/
Sender: [email protected]
X-dkim-check: DKIM test failed: (domain=example.org), signature is bad.
This is a test mailing
Как мне отладить ошибку, из-за которой exim receiver.example.org
считает, что подпись плохая?
(Я заметил, что подпись DKIM включает в себя множество заголовков, которых не существует. Может ли это быть причиной?)
EDIT: добавление деталей:
- Подписание exim: 4.96-15+deb12u1.
- Получение exim: 4.94.2-7~bpo10+1
решение1
Я не думаю, что сообщение "is bad" выражает какую-либо конкретную причину, по которой подпись не может быть проверена. Настройте правильные заголовки Authentication-Results: этот ретрансляторвсе, что exim вам говоритс помощью $dkim_verify_reason
.
Попробуйте определитькоторыйсообщения не проходят, я помню примеры других верификаторов, которые выдавали ошибки только при определенных размерах сообщений или частей сообщений (выровненные по блоку, <=16 КБ, >=16 МБ... ваше тестовое сообщение выглядит маленьким) или длине строки (ваше тестовое сообщение выглядит аккуратно, хотя и необычно, сложенным).
Также сравните источник сообщения, как оно было отправлено (в идеале, как оно было загружено отдельно в Sent
почтовый ящик). Возможно, в нем были некоторые синтаксические проблемы, которые были отброшены при получении, но были существенными для подписи.
Идеи:
- Я вижу точку с запятой в конце подписи и отсутствие сгиба перед последним тегом b=, что встречается нечасто — это менее проверено, и, возможно, сообщение выглядело не так, как было подписано.
- Я также вижу современную версию TLS, используемую с древней версией exim ("Все версии Eximпредыдущие версии 4.96 теперь устарели."). Интересно, используете ли вы сборку дистрибьютора, в которой отсутствуют соответствующие исправления, уже примененные выше?
Я подозреваю, что именно последнее является причиной вашей проблемы, основываясь наэтот патчне применяется Debianстарыйконюшняпока. Если так, то это должно в первую очередь повлиять на небольшие сообщения, передаваемые через BDAT по TLS.
- Обновите exim до более новой версии — возможно, потребуется обновление Debian, поскольку вы уже используете backports —или
- Читайте или отправляйте отчеты об ошибках Debian, недостающее исправление (ссылка ведет натщательно отобранная версия, готовая к применению в 4.94.2) Я подозреваю, что виновный может быть признан достойным вытягивания, если действительно виновен здесь -или
- полностью отключите поддержку фрагментации (RFC 3030), если это приемлемо для вашего варианта использования -пустой
chunking_advertise_hosts =
не будет объявлять о доступности BDAT кому-либо, это должно сработать — но с потенциально значительным снижением производительности для больших сообщений.