Действительная подпись DKIM ramdomly не может проверить

Сценарий:

У меня есть пара серверов электронной почты, работающих на Debian за брандмауэром, публичный IP-адрес, и я правильно настроил свои записи DNS (MCX, DMARC, DKIM, SPF).

Это пример моих записей DNS (вывод команды dig):

DKIM
customselector._domainkey.domain.com. 3600 IN TXT  "v=DKIM1\; h=rsa-sha256\; k=rsa\; s=email\; " "p=MII...

SPF:
domain.com.           3599    IN      TXT     "v=spf1 mx -all"

MX:
domain.com.           3599    IN      MX      1 mailsystem.domain.com.

DMARC:
_dmarc.domain.com.    3599    IN      TXT     "v=DMARC1\;p=quarantine\;sp=reject\;rua=mailto:dmarc@domain.com\; ruf=mailto:dmarc@domain.com\; fo=1\; adkim=r\; aspf=r\; pct=100\; rf=afrf\; ri=86400"

При тестировании нескольких общедоступных систем тестирования вся моя установка проходит проверку на 100%. Но потом я начинаю получать эти странные отчеты, показывающие, как много плохих писем выходит из моего публичного IP-адреса, а также некоторые письма, полностью проверенные одним и тем же доменом. Следующий фрагмент взят из отчета Google:

<record>
    <row>
      <source_ip>0.0.0.0</source_ip>
      <count>6</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>pass</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>domain.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>domain.com</domain>
        <result>pass</result>
        <selector>customselector</selector>
      </dkim>
      <spf>
        <domain>domain.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
  <record>
    <row>
      <source_ip>0.0.0.0</source_ip>
      <count>16</count>
      <policy_evaluated>
        <disposition>none</disposition>
        <dkim>fail</dkim>
        <spf>pass</spf>
      </policy_evaluated>
    </row>
    <identifiers>
      <header_from>domain.com</header_from>
    </identifiers>
    <auth_results>
      <dkim>
        <domain>domain.com</domain>
        <result>fail</result>
        <selector>customselector</selector>
      </dkim>
      <spf>
        <domain>domain.com</domain>
        <result>pass</result>
      </spf>
    </auth_results>
  </record>
  <record>

Я получил 6 хороших писем против 16 плохих писем, все они практически с одинаковым содержанием.

Тесты:

  • check-auth@verifier.port25.com -> хорошо
  • Заголовки Gmail -> dkim = pass header.i=@domain.com;
  • www.mail-tester.com -> DKIM_VALID
  • autorespond+dkim@dk.elandsys.com -> DKIM Проверка подписи: пропуск
  • копаться на нескольких DNS серверах -> хорошо
  • mxtoolbox.com -> все выглядит хорошо
  • Заголовки почты на разных доменах -> хорошо

Конфигурация:

Я использую opendkim, вот что я считаю актуальным:

Canonicalization    relaxed/relaxed
Mode            sv
SubDomains      yes

1 ответ

Решение

Хотя моя запись DKIM является "действительной", некоторые валидаторы не принимают h=rsa-sha256; аргумент в записи DNS и сделает подпись DKIM недействительной. Я полагаю, что Google использует несколько разных дистрибутивов Linux на своих почтовых серверах с разными валидаторами.

Чтобы решить эту проблему, просто удалите этот аргумент из вашей записи DKIM, он должен выглядеть следующим образом:

v=DKIM1; k=rsa; s=email; p=MI...

После этого каждое письмо будет правильно проверено.

Я пересек http://dkimvalidator.com/, проводя некоторые исследования, и это был единственный инструмент, который выдает довольно запутанное сообщение:

result = invalid
Details: public key: does not support hash algorithm 'sha256'

Удивительно, но эта ошибка кажется необычной, но когда вы используете opendkim для генерации ваших ключей, вы можете обнаружить, что делаете что-то вроде этого:

opendkim-genkey -b 2048 -h rsa-sha256 -r -s customselector -d domain.com -v

Который пишет неверный аргумент в txt выходной файл, приводящий к неверной записи DKIM.

Другие вопросы по тегам