Установка 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 - стойкость шифрования, по хорошему >=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 640 /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
Создать файл 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
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
Осталось настроить текстовую запись для нашего домена SELECTOR._domainkey.DOMAIN
В файле example.com.txt - почти готовая конфигурацию, содержащая публичный ключ
/etc/opendkim/keys/example.com.txt
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; s=mail; p=MIIBIjA ..." "PFiRю ..." "6G7y..." "54E..." )
- 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=...."
Обсуждение