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.
Выполнено!