DKIM-filter — данный пакет служит для подписывания писем и работает в связке с postfix. Данный пост основан на статье с хабра, но дополнен информацией специально для centos.

Установка:

Прежде всего, хоть он и называется dkim-filter, в centos данный пакет назван dkim-milter и устанавливать надо именно его. Репозиторий epel вам в помощь, ну или любой другой где вы найдете данный пакет (:

yum install dkim-milter

 

Настройка:

Тут опять нас ждет сюрприз, потому как файла /etc/dkim-filter.conf после установки нет. Вся конфигурация находится в /etc/mail/dkim-milter/ ^_~

В файле /etc/mail/dkim-milter/dkim-filter.conf изменяем следующие параметры

BodyLengths    Yes
Canonicalization    relaxed/relaxed
Domain    mail.example.com
KeyList    /etc/mail/dkim-milter/keys/keylist
Selector        default
Socket    inet:8891@localhost
Syslog    Yes
SyslogSuccess    Yes
X-Header    Yes

Далее генерируем ключи для вашего домена

dkim-genkey -d example.com -s mail -r

Сейчас в mail.txt у нас лежит TXT запись, которую нужно добавить, а в mail.private лежит приватный ключ, который и будет использоваться для подписи писем. Запись, которую нужно добавить в DNS, будет вида:

mail._domainkey IN TXT «v=DKIM1; g=*; k=rsa; p=…»

Теперь обязательно нужно удалить расширение у файла с ключом, потому что в описываемой схеме dkim-filter берёт имя сервера из имени файла с ключом:

mv mail.private mail

В файл /etc/mail/dkim-milter/keys/keylist записываем какие домены каким ключом нужно подписывать:

*@example.com:example.com:/etc/mail/dkim-milter/keys/mail
*:example.com:/etc/mail/dkim-milter/keys/mail

Аналогично можно добавить свои отдельные ключи для других доменов или даже для отдельных адресов. Если не нужно, чтобы dkim-filter подписывал письма для всех других доменов, не указанных явно, последнюю строчку можно удалить.

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Не забываем добавить DNS TXT запись и проверить, что она на месте:

dig txt mail._domainkey.example.com

Если проверка прошла успешно то стоит формально запретить другим серверам принимать письма с вашим доменом, но без подписи, добавив ADSP запись:

_adsp._domainkey IN TXT «dkim=all»

На этом можно сказать практически всё, но на всякий случай стоит проверить что вы включили автозагрузку сервиса, иначе вас ждет «приятный» сюрприз после перезагрузки.

chkconfig —levels 345 dkim-milter on

Ня.

Настраивая что-нибудь в центоси вы обязательно огребете проблем если у вас включен SELinux.

Таким замечательным примером может служить настройка Postfix с SASL аутентификацией в Dovecot. Вы спокойно сделали конфиги, всё проверили, рестартанули сервисы, а в результате нижуя не работает! WTF? Это няши, SELinux.

Идем в лог /var/log/maillog и любуемся такой вот ошибкой:

localhost postfix/smtpd: warning: SASL: Connect to private/auth failed: Permission denied

Благодарим это чудо за чудесную ночь секаса или же берем клаву и ставив на место это безобразие (:

grep smtpd_t /var/log/audit/audit.log | audit2allow -M postfixsasl

коротко о команде — найти smtpd_t в логе аудита и создать на основе этого правило для selinux

semodule -i posfixsasl.pp

добавляем правило в проклятый selinux, перезапускаем сервис(ы) и всё няшно. Эх, если бы я нашла эту фичку год назад…

 

Дополнительно:

Иногда может случиться так, что вы вроде бы всё добавили (например, модули для munin), а что-то всё ещё не работает из-за SELinux’a. Причиной этому может быть то, что события блокировки попадают под donotaudit события. В этом случае можно временно включить donotaudit события командой:

semodule -DB

и потом вернуть обратно

semodule -B

 

Так же, помимо описанного выше способа поиска для создания правил. Можно воспользоваться командой:

ausearch -m avc -ts today | audit2allow -M myfix

Которая автоматически поищет все события и создаст правила для их разрешения.

 

p.s.

Вот тут: гайд как это работает + ещё примеры для тех кто любит и пожестче.