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

40

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

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

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

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

Брайан Армстронг
источник

Ответы:

41

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

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

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». Он генерировал это на основе адреса from в электронном письме, где адрес from был что-то вроде «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 = сейчас установлено для моего домена (даже если адрес электронной почты не был моим доменом). Однако s = получил вместо "dkim.key" вместо селектора, который я выбрал в dkim-filter.conf. В оригинальной инструкции по установке я бы установил селектор на «mail». Это было странно, но я заметил, что оно изменило его на имя моего ключа, 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 - правильно. Оно работает!

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

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

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

Брайан Армстронг
источник
2
Спасибо за то, что
выложили
Юр, добро пожаловать, Томас!
Брайан Армстронг
Вау, это очень помогло. Я бился головой из-за "s = dkim.key", пока не наткнулся на ваш пост!
моль,
Одна вещь, которую руководство на ubuntu.com не упомянуло, состоит в том, что, как только вы заработали, измените t = y на t = n в записи TXT, чтобы заявить, что это не тест.
моль,
Есть несколько хороших ресурсов для использования SigningTable и т. Д. Например, blog.tjitjing.com/index.php/2012/03/… (отлично) и даже readme opendkim
rfay
15

Вдохновленный ответом Брайана Армстронга на 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 = вашей подписи соответственно.

/ И т.д. / почта / dkim_signing_table

*   keyname

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

Адам Дж. Форстер
источник
для тех, кто получает «нет таблицы подписи в OpenDKIM» serverfault.com/q/569823/115907
kommradHomer
Если кто-то получит этот ответ (отличный ответ, кстати, научил меня тому, что мне нужно) и хочет отправить с двух разных доменов с разными ключами, это можно сделать следующим образом: KeyTable file: "tagone._domainkey.firstdomain.com firstdomain com com tagone._domainkey.firstdomain.com *@seconddomain.com tagtwo._domainkey.seconddomain.com "Каждый файл состоит из 2 строк (комментарии не сохраняют разрывы строк здесь)
Шон Коломбо
или: SigningTable csl: * = имя ключа KeyTable csl: имя ключа = example.com: селектор: /etc/mail/selector.key
danblack
3

Старый поток, но, может быть, кто-то еще, кто найдет это, будет полезным знать, что версия 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 )

user203421
источник
Пожалуйста, подытожите статью, которую вы связали, цитируя любые соответствующие сегменты кода или блоки конфигурации. Сайты могут измениться в будущем или не загрузиться по ряду причин.
89c3b1b8-b1ae-11e6-b842-48d705
2

Я не очень понимаю, почему имя установлено в «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-записях разных доменов.

hynekcer
источник