[[Установка OpenDKIM + Postfix на Ubuntu 14.04]]

UbuntuPostfix

Установка OpenDKIM + Postfix на Ubuntu 14.04

DomainKeys Identified Mail (DKIM) - цифровая подпись письма.

opendkim 2.9.1-1
postfix 2.11.0-1ubuntu1

Установка OpenDKIM

apt-get install opendkim opendkim-tools

Папка для ключей и конфига OpenDKIM

mkdir /etc/opendkim
mkdir /etc/opendkim/keys
chmod 750 /etc/opendkim
chown opendkim:opendkim /etc/opendkim
ls -lah /etc/opendkim

Генерация ключей

Необходимо создать публичный и закрытый (приватный) RSA ключ

opendkim-genkey --restrict --nosubdomains --selector=mail --domain=example.com --bits=2048 --directory=/etc/opendkim/keys
  • selector - это произвольное имя, дается ключу которым будет подписываться почта. Ключей на одном домене может быть больше одного, поэтому их именуют.
  • domain - имя домена @example.com
  • bits - стойкость шифрования, по хорошему >=1024

Переименую файлы для удобства

mv /etc/opendkim/keys/mail.private /etc/opendkim/keys/example.com.private
mv /etc/opendkim/keys/mail.txt /etc/opendkim/keys/example.com.txt

Установить права

chown root:opendkim /etc/opendkim/keys/*
chmod 660  /etc/opendkim/keys/*
За правами так же следит OpenDKIM, если ключ будет доступен другим пользователям, получим:
opendkim[51171]: mail._domainkey.example.com: key data is not secure: /etc/opendkim/keys/example.com.private is in group 123 which has multiple users (e.g., "postfix")

Информация о ключе

openssl rsa -noout -text -in /etc/opendkim/keys/example.com.private

Настройка OpenDKIM

Создать файл KeyTable - список ключей
Формат файла:"KEYNAME DOMAIN:SELECTOR:KEYPATH"

/etc/opendkim/KeyTable

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com.private

  • mail._domainkey.example.com - имя ключа для OpenDKIM, может быть произвольным

Создать файл SigningTable - укажем кукую почту какими ключами подписывать
Формат файла:"FROM@DOMAIN KEYNAME"

/etc/opendkim/SigningTable

*@example.com mail._domainkey.example.com

  • Допускается использование '*'

Создать файл TrustedHosts - список адресов, с которых разрешается принимать почту на подпись

/etc/opendkim/TrustedHosts

127.0.0.1
localhost

Указан только localhost - т.о. если почтовик используется в качестве relay'я, OpenDKIM не будет подписывать другие письма, кроме как от локального Postfix'a
opendkim[2424]: 7619B3C0946: not authenticated

Настроим для работы через socket

mkdir -p /var/spool/postfix/var/run/opendkim
chown opendkim:postfix /var/spool/postfix/var/run/opendkim
chmod 750 /var/spool/postfix/var/run/opendkim
ls -lah /var/spool/postfix/var/run/

/etc/default/opendkim

SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"

В Ubuntu 14.04 Postfix запускается в chroot'e

/etc/opendkim.conf

Syslog                  yes
UMask                   000
OversignHeaders         From
##### CUSTOM #####
Canonicalization        relaxed/simple
SyslogSuccess           Yes
LogWhy                  Yes
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
MinimumKeyBits          1024

Перезагрузка

service opendkim restart

Проверка

cat /var/log/mail.log | grep opendkim
opendkim[72337]: OpenDKIM Filter v2.9.1 starting (args: -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/spool/postfix/var/run/opendkim/opendkim.sock)
ps aux | grep opendkim

Настройка Postfix

Добавим конфиг для работы с OpenDKIM

/etc/postfix/main.cf

...

# OpenDKIM
milter_default_action = accept
milter_protocol = 2
smtpd_milters = unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

  • milter_default_action = accept - продолжить отправку письма, если OpenDKIM не ответит / не запущен / ошибка и т.п.
  • milter_protocol - указывает версию протокола Milter (libmilter), которую Postfix должен использовать.

Перезагрузка

service postfix restart

Настройка DNS

BIND

Осталось настроить текстовую запись для нашего домена
В файле example.com.txt - почти готовая конфигурацию, содержащая публичный ключ

/etc/opendkim/keys/example.com.txt

mail._domainkey                 IN      TXT     ( "v=DKIM1; k=rsa; s=mail; p=MIIBIjA ..."
                                                "PFiRю ..."
                                                 "6G7y..."
                                                 "54E..." )
The DKIM-Signature Header Field rfc4871

  • v - версия
  • k - тип ключа
  • s - selector
  • p - публичный ключ в base64
Т.к. я делал ключ 2048bit, то текстовое поле с ключом пришлось разбить на большее кол-во частей, что бы не получить ошибку
named[1325]: dns_rdata_fromtext: /etc/bind/example.com:17: syntax error
named[1325]: zone example.com/IN: loading from master file /etc/bind/example.com failed: syntax error

Прочее

Если ваш DNS обслуживает хостер или т.п. просто отправьте им файл example.com.txt, там уже они все пропишут.

Проверка

mail._domainkey - это имя поддомена, содержащее текстовую запись DKIM, его нельзя поменять

dig -t txt mail._domainkey.example.com  
;; ANSWER SECTION:
mail._domainkey.example.com. 10800 IN    TXT     "v=DKIM1\; k=rsa\; s=mail\; " "p=...."






Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
23​ -13 = ?
 
howto/ubuntu/ubuntu14.04_opendkim_install.txt · Последние изменения: 2017/07/04 11:14 — lexa
Gentoo Linux Driven by DokuWiki