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

DKIM подписывает исходящую почту с любого домена (с Postfix и Ubuntu)

Я установил DKIM на моем почтовом сервере (postfix и ubuntu), поэтому он подписывает исходящие письма. Я использовал эти инструкции: https://help.ubuntu.com/community/Postfix/DKIM

Однако он мне нужен для подписи писем из любого домена (в адресе От), а не только из моего собственного. Я создаю службу рассылки новостей по электронной почте, и клиенты будут отправлять свою электронную почту через сервер.

Сначала я установил «Домен *» в /etc/dkim-filter.conf. Это позволило включить заголовки DKIM во все исходящие электронные письма, независимо от домена.

Однако проверка подлинности в Gmail не выполняется, поскольку он проверяет домен в адресе отправителя, а не мой домен (и запись DNS). Кто-нибудь знает как это сделать?

Хорошо, мне удалось выяснить это самостоятельно, но я хотел опубликовать шаги здесь для потомков, потому что по этому поводу не было никакой документации (которую я смог найти), и это было практически предположение и проверка.

После того, как я установил "Домен *", как описано выше, он подписал бы его так:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=clientdomain.com;
    s=main; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

обратите внимание на "d = clientdomain.com". Он генерировал это на основе адреса отправителя в электронном письме, где адрес отправителя был чем-то вроде «contact@clientdomain.com». Очевидно, если бы он проверил домен клиента, а не мой, там не было бы записи DNS TXT, и проверка не удалась бы.

Так или иначе, я узнал в этом документе, что вы можете установить параметр KeyList. http://manpages.ubuntu.com/manpages/hardy/man5/dkim-filter.conf.5.html

Это не совсем описывало то, чем я хотел заниматься, но я решил, что поиграю с этим. Я закомментировал KeyFile и установил KeyList в "/etc/mail/dkim_domains.key", которое является произвольным именем файла, которое я придумал. Затем я создал этот файл и поместил в него "*: feedmailpro.com: /etc/mail/dkim.key". Это говорит его для любого клиентского домена, подписать его с моим доменом (feedmailpro.com) и использовать файл dkim.key.

Перезапустил DKIM и постфикс

sudo /etc/init.d/dkim-filter restart
sudo /etc/init.d/postfix restart

Теперь это ключ, который он сгенерировал, когда я отправил тестовое письмо.

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=dkim.key; t=1250005729;
    bh=twleuNpYDuUTZQ/ur9Y2wxCprI0RpF4+LlFYMG81xwE=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=kohI7XnLlw/uG4XMJoloc4m9zC13g48+Av5w5z7CVE0u3NxsfEqwfDriapn7s7Upi
     31F3k8PDT+eF57gOu2riXaOi53bH3Fn/+j0xCgJf8QpRVfk397w4nUWP/y8tz4jfRx
     GhH21iYo05umP0XflHNglpyEX02bssscu2VzXwMc=

Улучшение, вы видите, что d = now установлен для моего домена (даже если адрес отправителя электронной почты не был моим доменом). Однако s = был изменен на "dkim.key" вместо селектора, который я выбрал в dkim-filter.conf. В оригинале инструкции по установке Я бы установил селектор на «почту». Это было странно, но я заметил, что он изменил его на имя файла моего ключа, dkim.key.

Поэтому я переименовал «/etc/mail/dkim.key» в «/ etc / mail / mail». Также обновил ссылку на него в «/etc/mail/dkim_domains.key».

Перезапустите dkim-filter и postfix снова, как указано выше, и теперь он заработал. Вот последний заголовок, который правильно подписывается с использованием правильного селектора (очевидно, на основе имени файла ключа).

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=feedmailpro.com;
    s=mail; t=1250006218;
    bh=tBguOuDhBDlhv0m4KF66LG10V/8ijLcAKZ4JbjpLXFM=;
    h=Date:From:To:Message-Id:Subject:Mime-Version:Content-Type;
    b=c9eqvd+CY86BJDUItWVVRvI3nibfEDORZbye+sD1PVltrcSBOiLZAxF3Y/4mP6vRX
     MUUNCC004oIH1u7FYafgF32lpuioMP1cd7bi6x3AZ5zH4BYETNBnnz4AhAPBtqlIh/
     FFMz8jkhhLhcM2hDpwJkuKjAe3LzfNVDP8kD11ZI=

Теперь s = mail правильный, а d = feedmailpro.com правильный. Оно работает!

В целом это было намного сложнее, чем я ожидал, и, похоже, не было никакой документации о том, как это сделать (подписание для всех исходящих доменов), но я предполагаю, что это программное обеспечение с открытым исходным кодом, поэтому я не могу жаловаться.

И последнее замечание: чтобы проверить, правильно ли настроена DNS-запись TXT, вы можете выполнить команду, например, с вашим доменом

dig mail._domainkey.feedmailpro.com TXT

Может потребоваться установить dig (sudo apt-get install dig). Если вы используете диспетчер Slicehost для добавления записи DNS, вы должны ввести запись TXT следующим образом.

Type: TXT
Name: mail._domainkey
Data: k=rsa; t=s; p=M5GfMA0...YOUR LONG KEY...fIDAQAB
TTL seconds: 86400

Я действительно не понимаю, почему для имени установлено значение «mail._domainkey» без точки в конце или без моего домена, например, «mail._domainkey.feedmailpro.com». Но как бы то ни было, похоже, это работает, так что я счастлив.

Если вы пытаетесь скопировать это, вот инструкции, с которых я начал: https://help.ubuntu.com/community/Postfix/DKIM

Вдохновленный ответом Брайана Армстронга на dkim-filter, вот как я это сделал для OpenDKIM.

/etc/opendkim.conf

Syslog          yes
UMask           002
KeyTable        /etc/mail/dkim_key_table
SigningTable    refile:/etc/mail/dkim_signing_table

Обратите внимание, что в SigningTable есть refile: в его определении это указывает, что файл включает регулярные выражения; в нашем случае подстановочный знак *.

/ и т.д. / почта / dkim_key_table

keyname  example.com:selector:/etc/mail/selector.key

Вот имя ключа используется для сопоставления ключа между этим файлом и файлом dkim_signing_table. В моем реальном файле я назвал это так же, как мой селектор.

example.com и селектор необходимо заменить домен и селектор, которые вы хотите использовать в своей подписи d = и s = соответственно.

/ etc / mail / dkim_signing_table

*   keyname

Этот файл с адресом простых карт находится в Из: заголовок к ключу в dkim_key_table. В этом случае мы хотим, чтобы все электронные письма, отправляемые через этот сервер, были подписаны одним и тем же ключом, поэтому используется подстановочный знак *.

Старый поток, но, возможно, кто-то еще, кто обнаружит это, имеет смысл знать, что версия 2.x opendkim работает с KeyTable вместо KeyList.

Вы можете преобразовать файл KeyList с помощью инструмента opendkim-convert-keylist (http://manpages.ubuntu.com/manpages/lucid/man8/opendkim-convert-keylist.8.html)

Вы можете узнать больше о реализации KeyTable на странице руководства opendkim: (http://www.opendkim.org/opendkim.conf.5.html)

Я действительно не понимаю, почему для имени установлено значение «mail._domainkey» без точки

Документация к фильтру DKIM обычно устанавливается в формате unix man. Об этом знает только гугл :-) У меня тоже была проблема.

man dkim-filter.conf
man dkim-filter
man dkim-genkey

man dkim-stats
man dkim-testkey
man dkim-testssp

Я пробовал на Debian. Если его нет в вашем дистрибутиве, вы можете загрузить архив с исходными кодами и легко читаемый документ.

man dkim-milter-2.8.3/dkim-filter/dkim-filter.conf.5

и т.п.

-

Я действительно не понимаю, почему в названии указано «mail._domainkey» без точки

Чтобы вы могли использовать одно и то же в обеих записях DNS разных доменов.