[[ Установка OpenDKIM + Postfix на CentOS 7 ]]

CentOSPostfix

Установка OpenDKIM + Postfix на CentOS 7

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

opendkim.x86_64 2.11.0-0.1.el7 @epel
postfix.x86_64 2:2.10.1-6.el7 @base

Установка OpenDKIM

yum install opendkim

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

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

opendkim-genkey --restrict --nosubdomains --selector=mail --domain=example.com --bits=2048 --directory=/etc/opendkim/keys

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

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

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 600 /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
::1
10.0.17.0/24

Указан не только localhost - но и адреса клиентов использующих Postfix в качестве relay'я, иначе OpenDKIM не подпишет
opendkim[2144]: 57C75410F0: [10.0.17.36] [10.0.17.36] not internal
opendkim[2144]: 57C75410F0: not authenticated

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

Некоторые отличительные особенности CentOS (сравнивая с Ubuntu):

  • По умолчанию Postfix запускается без chroot'a
  • Настройка
    UserID opendkim:postfix
    не применяет группу к правам на opendkim.sock
  • По умолчанию systemd-tmpfiles установит права 700 для /var/run/opendkim (при установке пакета 775, до перезагрузки)

/etc/opendkim.conf

PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:postfix
Socket local:/var/run/opendkim/opendkim.sock
UMask 000
SendReports no
SoftwareHeader  yes
Canonicalization relaxed/simple
MinimumKeyBits 2048
OversignHeaders From
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
InternalHosts refile:/etc/opendkim/TrustedHosts

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

systemctl restart opendkim

Проверка

systemctl status 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 должен использовать

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

systemctl restart postfix

Настройка 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.example.com - имя домена, содержащее TXT запись DKIM для домена example.com (для selector'a = mail)

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






Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
141 +5 = 
 
howto/centos/centos_7_opendkim_install.txt · Последние изменения: 2018/07/26 16:52 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki