openDKIM та Postfix на Ubuntu Server 12.04LTS
Я спробую повернутися і відформатувати це краще. Але оскільки був запит на публікацію моєї відповіді, я хотів опублікувати її зараз, а не чекати, поки я встигну її правильно відформатувати. Через брак часу я всю свою відповідь загорнув у блок-котирування. Я сподіваюся, що це рішення буде корисним.
Це мої довідки:
і у Вікіпедії є хороший запис з цього питання
Як мінімум вам знадобляться:
- Кореневий доступ до вашого поштового сервера
- Доступ до оновлення записів dns для вашого домену
Встановіть opendkim із сховищ:
# sudo apt-get install opendkim opendkim-tools
Ви повинні вирішити, який саме "селектор" ви бажаєте використовувати. Селектор - це по суті слово, яке описує ключ, який ви хочете використовувати. Тут я збираюся використовувати селектор 201205, оскільки ключ став дійсним у травні 2012 року (хитрий так?). Я наводжу два приклади для різноманітності, що, сподіваюся, додасть ясності. Вам потрібно створити ОДИН ключ. Однак я наводжу обидва приклади, щоб ви могли їх порівняти.
- 201205 (1-й ключ)
- my_selector (2-а клавіша)
Мій домен буде example.com
, але я використовую субдомен для свого другого прикладу:
- example.com (перший ключ)
- 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. Але якщо команда вище не показала, що опендкім користувача був налаштований належним чином, зробіть це аналогічно цьому:
# 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 приходить, але він ще не готовий до прайм-тайму, згідно з моїм читанням.
Приклад з 2 клавішею:
# 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
Якщо ви використовуєте мій другий ключовий приклад із цільовим доменом "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
та додайте домен до KeyTable
Додати рядок:
#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private
Далі Створіть файл із текстовим редактором /etc/opendkim/SigningTable
та додайте домен до SigningTable
Я показую обидва приклади. Зауважте, що для мого 2-го ключа я тепер повинен використовувати повне доменне ім’я "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
.
Перезавантажте постфікс та 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 - це використання однієї з безкоштовних служб тестування. Я використав ці:
- Брендон Чекетт Валідатор електронної пошти - http://www.brandonchecketts.com/emailtest.php (мій улюблений)
- Надішліть підписаний електронний лист на адресу: check-auth@verifier.port25.com (також мій улюблений)
Надішліть підписаний електронний лист на адресу: sa-test@sendmail.net (ви можете помістити всі тестові адреси електронної пошти у поле Кому: одне вихідне повідомлення для тестування)
Надішліть підписаний електронний лист на адресу: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! Не використовуйте цей.
Кожен із них підкаже вам, чи все працює належним чином, і дасть вам деякі вказівки щодо усунення несправностей, якщо це необхідно.
Якщо у вас є обліковий запис Gmail, ви також можете відправити туди підписане повідомлення для швидкого та простого тестування.
Після того, як ви раді, що все добре, ви можете зняти тестовий прапор у записі DNS TXT та збільшити TTL.
Готово!