Действительная подпись 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.