Для начала устанавим OpenDKIM.
Для различных OS команды / пакеты разные.
Ubuntu / Debian / Astra Linux
apt install opendkim opendkim-tools
FreeBSD
pkg install opendkim
или
cd /usr/ports/mail/opendkim
make config-recursive
make install clean
Rocky Linux / CentOS
yum install opendkim opendkim-tools
Настройка OpenDKIM
Для Linux:
mv /etc/opendkim.conf
/etc/backup.opendkim.conf
vi /etc/opendkim.conf
Для Freebsd:
mv /usr/local/etc/mail/opendkim.conf
/usr/local/etc/mail/backup.opendkim.conf
ee
/usr/local/etc/mail/opendkim.conf
Внесем изменения в конфигурационных файл:
AutoRestart Yes
AutoRestartRate 10/1h
Umask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost
Проверим, если ли каталог командой:
ls - la /etc/opendkim
Если каталога нет, создадим его:
mkdir /etc/opendkim
Далее нам необходимо добавить доверенные хосты в файл. По умолчаю вносим локальные хосты и все хосты, которые будет использовать сервер как релей.
vim /etc/opendkim/TrustedHosts
127.0.0.1
localhost
Создадим конфигурационные файлы (они уже могут быть):
touch /etc/opendkim/{KeyTable,SigningTable}
Теперь нам нужно создать, если файла нет. Либо открыть его и внести изменения.
vi /etc/default/opendkim
И добавим следующие строки:
SOCKET=inet:12301@localhost
Теперь можно приступить к запуску opendkim. Команда для Linux:
systemctl enable opendkim
systemctl restart opendkim
FREEBSD, добавим демона в rc.conf
echo 'milteropendkim_enable="YES"' >> /etc/rc.conf
echo 'milteropendkim_uid="opendkim"' >> /etc/rc.conf
service milter-opendkim start
Настроим Postfix для работы с DKIM.
Linux:
vi /etc/postfix/main.cf
ee /usr/local/etc/postfix/main.cf
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301
Перезапустим POSTFIX
systemctl restart postfix
Генерация сертификата и настройка записей в DNS
Вы можете воспользоваться бесплатной утилитой для генерации DKIM записей, которую мы сделали специально для вас. Или выполнить следующие комманды вручную:
Создадим каталог для ключей. Для каждого домена - свой каталог. Зададим переменную. Так удобнее.
DKIM_DOMAIN=ваш_домен
mkdir -p /etc/opendkim/$DKIM_DOMAIN
Теперь сгенерируем ключи:
opendkim-genkey -D /etc/opendkim/$DKIM_DOMAIN/ --domain $DKIM_DOMAIN --selector relay
После того, как ключи будут созданы, в директории появятся два файла: .private и .txt
Файл с расширением .private - Это закрытый ключ.
Командой:
cat /etc/opendkim/$DKIM_DOMAIN/relay.txt
Посмотрите содержимое и добавьте эту запись к вашему домену в DNS.
_domainkey IN TXT "o=~; r=postmaster@вашдомен.ru"
* где o=~ означает, что не все сообщения подписываются для домена (o=- — говорит, что все письма используют DKIM).
_adsp._domainkey IN TXT "dkim=all"
* all запрещает принимать письма от домена без цифровой подписи.
Другие варианты: discardable — блокировать сообщения на стороне получателя,
unknown — по умолчанию (такую запись создавать не обязательно).
Теперь добавим пользователя в систему. Пользователь уже может быть в системе, еси мы получим ошибку, что такой пользователь уже есть - продолжаем дальше. Команда для Linux:
useradd opendkim -m -s /sbin/nologin
Для FREEBSD
pw useradd opendkim -m -s /usr/sbin/nologin -w no
Далее вводим следующие команды по-порядку:
chown :opendkim /etc/opendkim/${DKIM_DOMAIN}/*
chmod g+rw /etc/opendkim/${DKIM_DOMAIN}/*
echo "*.${DKIM_DOMAIN}" >> /etc/opendkim/TrustedHosts
echo "relay._domainkey.${DKIM_DOMAIN} ${DKIM_DOMAIN}:relay:/etc/opendkim/${DKIM_DOMAIN}/relay.private" >> /etc/opendkim/KeyTable
echo "*${DKIM_DOMAIN} relay._domainkey.${DKIM_DOMAIN}" >> /etc/opendkim/SigningTable
systemctl restart opendkim
Для поиска проблем, читаем логи. Red Hat / CentOS / FreeBSD:
tail -f /var/log/maillog
Debian / Ubuntu
tail -f /var/log/mail.log
Если в логах присутствуют ошибки:
... no signing table match for ...
... no signature data ...
Причины могут быть следующими:
- неправильно настроили файлы SigningTable и/или KeyTable;
- файлы сохранены не в UTF8 BOOM с форматом конца строк UNIX (LF).
Если формат конца строк DOS (CRLF), то это вызывает ошибку в работе openDKIM.
Может помочь следующая команда:
dos2unix < /etc/opendkim.conf
Если софта нет в системе, установите (CentOS):
yum install dos2unix
Как проверить SigningTable и KeyTable
#opendkim -Q
> refile:/etc/opendkim/SigningTable
opendkim: enter 'query/n' where 'n' is number of fields to request
> moysayt.ru/1
default._domainkey.вашсайт.ru/1
> Ctrl + D
#opendkim -Q
> /etc/opendkim/KeyTable
opendkim: enter 'query/n' where 'n' is number of fields to request
> default._domainkey.вашсайт.ru/3
'moysayt.ru'
'default'
'/etc/opendkim/keys/default.private'
opendkim: enter 'query/n' where 'n' is number of fields to request
Если в файле /etc/opendkim.conf используется синтаксис SigningTable refile:/etc/opendkim/SigningTable, то в файле SigningTable нужно писать:
*@вашсайт.ru default._domainkey.вашсайт.ru
Если SigningTable file:/etc/opendkim/SigningTable или SigningTable /etc/opendkim/SigningTable то:
вашсайт.ru default._domainkey.вашсайт.ru