Установка
sudo apt install opendkim opendkim-tools
После установки конфиг лежит в /etc/opendkim.conf
Теперь надо настроить - создать несколько файликов и ключи
mkdir -p /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys
Теперь нам нужно в /etc/postfix/main.cf указать, где искать dkim файлы
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Также, там есть ещё ряд настроек
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
Mode sv
UserID opendkim:opendkim
Umask, Syslog уже есть в оригинальном конфиге, их можно не копировать.
Замечание на тему Socket: если нужно работать через tcp, формат такой: inet:12301@localhost, но по умолчанию открывается Unix socket в /var/run/opendkim/opendkim.sock (легко проверяется через netstat -plan | grep dkim). И если надо переопределить, то по ряду мануалов это делается в /etc/default/opendkim
Ключ генерируется так
sudo -u opendkim opendkim-genkey -s <some_name> -D /etc/opendkim/keys -d <yourdomain.com> -b 2048
!!! В некоторых мануалах перепутаны -b и -s. -b это СКОЛЬКО БИТ ключ, а -s это префикс для dns, так называемый селектор! Тот что <some_name>._domainkey, если планируется несколько мест для отправки - лучше использовать технический префикс сервера типа srv01, и избегать имён вида mail - может быть конфликт с рядом сервисов автогенерации, включая почту от яндекса - мне и такое довелось увидеть...
И второй момент -- после создания ключа файлы создаются только по селектору без учёта доменов, поэтому лучше в keys сразу создать папку с доменом и в -D поправить на keys/<yourdomain.com>. Ниже keyTable с учётом этой папки.
Теперь лучше записать публичную часть в dns
cat /etc/opendkim/keys/<yourdomain.com>/<some_name>.txt
Теперь надо заполнить файл, где описаны для каких доменов какие селекторы подключать.
В /etc/opendkim/KeyTable
<some_name>._domainkey.<yourdomain.com> <yourdomain.com>:<some_name>:/etc/opendkim/keys/<yourdomain.com>/<some_name>.private
В /etc/opendkim/TrustedHosts пишем хосты, которые будут подписаны нашей подписью, обычно это только сама машина
127.0.0.1
localhost
# можно указать подсети, вида 192.168.0.0/24
В /etc/opendkim/SigningTable пишем, каким ключом что подписываем
*@<yourdomain.com> <some_name>._domainkey.<yourdomain.com>
Не путаем KeyTable и TrustedHosts! В KeyTable - где искать ключи по домену и селектору, а TrustedHosts - каким ключом подписываем почту для каких адресов. Можно вообще сделать отдельные ключи для отдельных ящиков.
проверьте, что в /etc/postfix/main.cf
# Milter configuration
# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
milter_protocol = 6
milter_default_action = accept
smtpd_milters = unix:/var/spool/postfix/var/run/opendkim
non_smtpd_milters = unix:/var/spool/postfix/var/run/opendkim
И перезапустите opendkim, postfix
Проверка
после настройки opendkim можно обнаружить в mail.log:
postfix/cleanup[13428]: warning: connect to Milter service unix:/var/run/opendkim/opendkim.sock: No such file or directory
Хотя и файл такой есть, и с правами всё хорошо. Но, слава chroot, работать так не будет.
Фикс:
Then do the following
sudo adduser postfix opendkim
Postfix running in chroot
Modify /etc/default/opendkim
, change SOCKET option to postfix chroot location
SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"
You will have to create directory /var/spool/postfix/var/run/opendkim
and change its permission
sudo mkdir -p /var/spool/postfix/var/run/opendkim
sudo chown opendkim:opendkim /var/spool/postfix/var/run/opendkim
Restart opendkim
sudo service opendkim restart
https://unix.stackexchange.com/questions/74477/postfix-smtpd-warning-connect-to-milter-service-unix-var-run-opendkim-opendki
Links
Относительно свежая дока, но читать аккуратно
https://www.linode.com/docs/guides/configure-spf-and-dkim-in-postfix-on-debian-9/
Вроде и официальная, но очень старая
https://wiki.debian.org/opendkim