Ложный отрицательный результат проверки DKIM от Exim

Ложный отрицательный результат проверки DKIM от Exim

Мой почтовый сервер, использующий 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.

  1. Обновите exim до более новой версии — возможно, потребуется обновление Debian, поскольку вы уже используете backports —или
  2. Читайте или отправляйте отчеты об ошибках Debian, недостающее исправление (ссылка ведет натщательно отобранная версия, готовая к применению в 4.94.2) Я подозреваю, что виновный может быть признан достойным вытягивания, если действительно виновен здесь -или
  3. полностью отключите поддержку фрагментации (RFC 3030), если это приемлемо для вашего варианта использования -пустой chunking_advertise_hosts =не будет объявлять о доступности BDAT кому-либо, это должно сработать — но с потенциально значительным снижением производительности для больших сообщений.

Связанный контент