Настройка DKIM (DomainKeys) для Ubuntu, Postfix и Mailman


22

Я использую Ubuntu 12.04 с Postfix и Mailman. Я хочу настроить DKIM . DomainKeys Identified Mail, или DKIM, является преемником Yahoo «DomainKeys». Это включает Идентифицированную Почту Cisco.

Какие шаги для настройки этого?

Рекомендуется ли опендким?

Единственная ссылка, которую я имею, - это HowToForge , но я предпочитаю получать помощь здесь (даже если это просто подтверждение шагов по этой ссылке). На самом деле, я думаю, что информация в HowToForge устарела, потому что в ней упоминается dkim-фильтр вместо opendkim.

Ответы:


39

openDKIM и Postfix на сервере Ubuntu 12.04LTS

Я постараюсь вернуться и отформатировать это лучше. Но так как была просьба опубликовать мой ответ, я хотел опубликовать его сейчас, а не ждать, пока у меня будет время отформатировать его должным образом. Из-за нехватки времени я завернул весь ответ в цитату. Я надеюсь, что это решение полезно.

Это мои ссылки:

и в Википедии есть хорошая запись на эту тему

Как минимум вам понадобится:

  • Корневой доступ к вашему почтовому серверу
  • Доступ к обновлению DNS-записей для вашего домена

Устанавливаем опендким из репозиториев:

# sudo apt-get install opendkim opendkim-tools

Вы должны решить, какой «селектор» вы хотите использовать. Селектор - это, по сути, слово для описания ключа, который вы хотите использовать. Здесь я собираюсь использовать селектор 201205, так как ключ вступил в силу в мае 2012 года (хитро, а?). Я приведу два примера для разнообразия, которые, надеюсь, добавят ясности. Вам нужно только сгенерировать ОДИН ключ. Тем не менее, я даю оба примера, чтобы вы могли сравнить их.

  • 201205 (1-й ключ)
  • my_selector (2-й ключ)

Мой домен будет example.com, но я буду использовать поддомен для моего второго примера:

  • example.com (1-й ключ)
  • mail.example.com (2-й ключ)

Я решил работать в следующем каталоге:

# mkdir /etc/opendkim/
# cd /etc/opendkim

Сгенерируйте ключи в текущем каталоге, используя выбранный вами селектор и домен.

# opendkim-genkey -s 201205 -d example.com

Вам может или не нужно менять владельца. См. Подробности в моем примере для 2-го ключа ниже о том, какими должны быть права доступа и права доступа.

Сначала вы должны проверить, есть ли opendkimпользователь (ваши идентификаторы пользователей / групп могут отличаться):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

И вам, вероятно, нужно сделать это:

# chmod 700 /var/run/opendkim

ПРИМЕЧАНИЕ. Эти две следующие команды НЕ нужны в Ubuntu 12.04. Но если приведенная выше команда не показала, что пользователь opendkim был настроен правильно, сделайте это так:

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

Теперь проверьте открытый ключ и обратите внимание на наличие ошибки (в openDKIM 2.5.2 в Ubuntu 12.04)! Где содержится ;=rsa;, он должен содержать ;k=rsa;. kОтсутствует. Пожалуйста, вставьте это.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

После исправления это будет выглядеть так:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Кроме того, вам, вероятно, нужно избегать таких точек с запятой. Если вам не нужен заключительный комментарий, просто удалите его. Также обратите внимание, что вы должны добавить флаг t = y, чтобы указать получающим серверам, что вы тестируете DKIM, но пока не используете его активно. Вы остались с жизнеспособной записью ресурса:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Вы должны опубликовать содержимое вышеуказанного открытого ключа на своем официальном DNS-сервере. Я рекомендую использовать запись TXT. Похоже, возникли споры о том, использовать ли запись SPF или оба типа. После небольшого прочтения я решил придерживаться исключительно типа записи TXT, хотя я не верю, что это последнее слово в этой теме.

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

Второй пример генерации пары ключей был немного сложнее для меня. Я опишу, что я сделал. Первый элемент заключается в том, что я использовал значение домена "example.com", хотя ключ будет использоваться для "mail.example.com". Я пришел к этому методом проб и ошибок. Работает, а при использовании «mail.example.com» не работает. К сожалению, я не знаю причин этого. Это единственное различие, с которым я столкнулся, но меня это беспокоило, и я решил, что должен документировать свой опыт использования поддоменов. Ни один из других уроков начального уровня, которые я нашел, не делал этого. Создайте второй ключ:

opendkim-genkey -s my_selector -d example.com

проверьте владение и разрешения закрытого ключа, как указано выше. Вот как они должны выглядеть:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

После публикации записи DNS проверьте это с помощью dig. Он должен возвращать именно то, что вы ввели в записи ресурса (RR).

$ dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Теперь проверьте ключ. Приведенные ниже команды предполагают, что вы находитесь в каталоге, где находится ключ (для меня / etc / opendkim).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Эти результаты ожидаемые. «Ключ не защищен» не указывает на ошибку. Это ожидаемое последствие отказа от использования DNSSSEC. DNSSEC идет, но пока не готов к прайм-тайму, по моим сведениям.

Пример со вторым ключом:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Обратите внимание, что opendkim сообщает, что ключ не является безопасным. Это связано с тем, что DNSSEC не реализован на моем DNS-сервере, и теоретически кто-то может перехватить поиск DNS и заменить его своим собственным ключом.

Отредактируйте файл конфигурации OpenDKIM:

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

Если вы используете мой 2-й ключевой пример, для целевого домена «mail.example.com» запись все равно будет ссылаться только на основной домен:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

Примечание из одного из моих источников: если вы запускаете несколько экземпляров Postfix, вам нужно добавить это в opendkim.conf для каждого экземпляра (или тех, которые вы хотите использовать opendkim)

Создайте файл с вашим текстовым редактором /etc/opendkim/TrustedHosts:

Добавьте домены, имена хостов и / или ip, которые должны обрабатываться OpenDKIM. Не забывайте localhost.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(последняя строка выше, вероятно, не понадобится. Если у вас есть IP-адрес для добавления, убедитесь, что вы используете свой собственный, а не пример выше.)

Редактировать /etc/default/opendkim:

Раскомментируйте эту строку и используйте порт 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

Убедитесь, что ваш брандмауэр (iptables) разрешает петлю на localhost:

sudo iptables -A INPUT -i lo -j ACCEPT

Затем создайте файл в текстовом редакторе /etc/opendkim/KeyTableи добавьте домен в таблицу ключей.

Добавить строку:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

Далее Создайте файл в текстовом редакторе /etc/opendkim/SigningTableи добавьте домен в SigningTable.

Я показываю оба примера. Обратите внимание, что для моего второго ключа я теперь должен использовать полное доменное имя «mail.example.com»:

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

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

Настройте постфикс. Отредактируйте /etc/postfix/main.cf и добавьте строки в конец

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

Также измените имя хоста:

#myhostname = localhost         #original
myhostname = mail.example.com

Вам также следует изменить соответствующую запись в / etc / hosts. Эти изменения вступают в силу после перезагрузки (хотя вы можете установить это немедленно с помощью команды:) hostname NEW_NAME.

Перезапустите postfix и opendkim, если вы не перезагрузились:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

тестирование

Лучший способ проверить, что ваша подписанная почта проходит проверку подлинности и что ваши записи DNS правильно настроены, - это воспользоваться одной из бесплатных служб тестирования. Я использовал это:

  • Брандон Чекеттс Email Validator - http://www.brandonchecketts.com/emailtest.php (мой любимый)
  • Отправьте подписанное электронное письмо по адресу: check-auth@verifier.port25.com (мой любимый также)
  • Отправьте подписанное электронное письмо по адресу: sa-test@sendmail.net (вы можете поместить все тестовые адреса электронной почты в поле To: одного исходящего сообщения для тестирования)

  • Отправьте подписанное электронное письмо по адресу: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! Не используйте это.

Каждый из них скажет вам, если все работает правильно, и даст вам несколько советов по устранению неполадок, если это необходимо.

Если у вас есть учетная запись Gmail, вы также можете отправить подписанное сообщение для быстрого и удобного тестирования.

Если вы довольны тем, что все в порядке, вы можете удалить флаг тестирования в записи TXT DNS и увеличить TTL.

Выполнено!


Работает отлично на точных. Хорошее прохождение спасибо.
Аки

Используйте -b 1024 для генерации ключей из 1024 бит. Это необходимо для подписания моего Gmail!
Прашант Сингх

1
Обратите внимание, что в opendkim.conf три параметра «Домен», «KeyFile» и «Селектор» игнорируются при использовании «SigningTable» и «KeyTable». Не уверен, что это изменилось в какой-то момент, но стоит упомянуть ( opendkim.org/opendkim.conf.5.html )
billynoah

0

Это хорошее руководство.

Он объясняет , что opendkim это действительно рекомендуется , и что шаги по реализации вашего DKIM подписи совпадают с DKIM-фильтром.

dkim-milter больше не разрабатывается. Первоначально автор разветвил источник и сейчас разрабатывает opendkim. Для Lucid и более поздних выпусков opendkim предпочтительнее, чем dkim-filter. Инструкции на этой странице должны быть такими же (только с измененными именами пакетов по мере необходимости).

Кстати, Domainkeys является устаревшим предшественником DKIM. Добавьте записи TXT в свою DNS-зону для SPF и DKIM, но больше не нужно беспокоиться о Domainkeys.


Эта статья, на которую вы ссылаетесь, устарела. opendkim - это пакет для использования сейчас. Я работаю над настройкой ...
MountainX для Моники Челлио

Я буду признателен за обновление вашего опыта, так как я собираюсь переключить сервер с Exim4 на Postfix-Dovecot и буду искать актуальное руководство.
2012 года

Я опубликовал свое решение, но у меня не было времени отформатировать его. Вы (или кто-либо еще) можете отформатировать его. Но мои записи очень обширны, поэтому я хотел, чтобы вы имели к ним доступ без промедления. Я надеюсь, что они полезны.
MountainX для Моники Челлио

-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

Я всегда проверяю ссылки на несколько руководств по чему-либо. Этот пункт о настройке работает, я только что проверил, и это подтверждает. Но, возможно, вы захотите показать пример TXT для записи домена, чтобы быть подробным. Люди могут запутаться и явно поместить все ключи непосредственно в значение p, что, я не совсем уверен, является правильным. то есть ... включая ----- НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ ----- и ----- КОНЕЦ ПУБЛИЧНОГО КЛЮЧА -----. Это может привести некоторых в замешательство. Просто убедитесь, что поставили только часть шифрования, а не маркеры.


3
Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Брайам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.