Postfix отправляем письма с разных ip и подписываем их DKIM

Не попасть в спам при рассылке почты, очень важный аспект для различных интернет магазинов или сайтов.
Допустим у нас на сервере есть некое множество сайтов, и мы хотим что бы каждый сайт мог отправлять письма с определенного Ip адреса, и это к счастью возможно, и очень лего реализуемо средствами postfix 2.7+.

Найдя решение поставленой задачи в гугле, у меня возникла следующая проблема, в centos 6.5, последняя версия postfix 2.6.6, а нужна версия не ниже 2.7. Оставалось лишь, компилировать самому, или использовать сторонний репозиторий, я конечно выбрал второе.
Будем устанавливать версию 2.11, создадим файл
/etc/yum.repos.d/postfix.repo:
[postfixrepo]
name=EL-$releasever Postfix repo
baseurl=http://repos.oostergo.net/$releasever/postfix-2.11
enabled=1
gpgcheck=1
Добавим ключ командой su -c 'rpm --import http://repos.oostergo.net/RPM-GPG-KEY'И обновим postfix командой, yum upgrade postfix должно все получится.

Теперь приступим к настройке.
в конфиге /etc/postfix/master.cf добавляем следующее:
group1 unix - - n - 10 smtp -o smtp_bind_address=10.0.0.2
group2 unix - - n - 10 smtp -o smtp_bind_address=10.0.0.3
в конфиге /etc/postfix/main.cf добавляем строку
sender_dependent_default_transport_maps = hash:/etc/postfix/sender_transport
В файле sender_transport должно быть указано какой домен к какой группе принадлежит
@domain1.local group1
@domain2.local group1
@domain3.local group2
@domain4.local group2
После любого изменения файла необходимо выполнить команду postmap /etc/postfix/sender_transport, появится файл sender_transport.db, без него ничего работать не будет, он содержит в себе таблицы поиска(хэш).

Ну и в итоге перечитываеми конфиг/перезапускаем postfix /etc/init.d/postfix reload или /etc/init.d/postfix restart

Помните, что при отправке письма, домен отправителя должен быть такой же как в sender_transport, в конфиге apache это решается строкой в директиве VirtlualHost
php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@domain1.local"
Ну а теперь, что б еще круче сделать наш почтовик, давайте настроим DKIM, в интернете куча статей про это.
Установим opendkim, yum install opendkim.
Подредактируем конфиг /etc/opendkim.conf:
PidFile	/var/run/opendkim/opendkim.pid
#режим работы, только подпись
Mode	s
#логгирование
Syslog	yes
SyslogSuccess	yes
LogWhy	yes
#Пользователь
UserID	opendkim:opendkim
#Указываем порт на котором слушать
Socket	inet:8891@localhost
Umask	002
SendReports	yes
SoftwareHeader	yes
Canonicalization	relaxed/relaxed
Selector	default
MinimumKeyBits	1024
#Таблица ключей
KeyTable	refile:/etc/opendkim/KeyTable
#Таблица подписей
SigningTable	refile:/etc/opendkim/SigningTable
#Игнор лист
ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
#Таблица внутренних хостов
InternalHosts	refile:/etc/opendkim/TrustedHosts
OversignHeaders	From
Далее добавим в конфиг постфикса /etc/postfix/main.cf следующее:
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Так теперь осталось создать ключ для домена и прописать открытый ключ в DNS.
Для этого есть специальная команда opendkim-genkey -D /etc/opendkim/keys/ -d domain1.local -s mail после выполнения данной команды в каталоге /etc/opendkim/keys/domain1.local/ появятся два файла mail.private(закрытый ключ) и mail.txt(открытый ключ).
Откроем mail.txt его содержимое примерное такое
mail._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIGfAA0GGAqGSIb3DQEBAQUAA4GNADCBiQKBgQCx4VRXEHfL+XJ8PB3c+TIn9s/RAc+8FLxBt3zp4+z1q2Cgl0bzncZNr9JI1CbM4dblUy/ovS8iHUg+QDMMUMoyBUTsscGqV9VRCODcxjDc5hGyEx6av3hT3RXkbm4PTww3Kapn5rtg2cFZQi4hL5kx7m72jWYmU0B18ErwwIXYtQIDAQAB" )  ; ----- DKIM key mail for domain1.local
Теперь откроем управление DNS нашего домена, и добавим TXT запись с именем mail._domainkey и значением:
v=DKIM1; k=rsa; p=MIGfAA0GGAqGSIb3DQEBAQUAA4GNADCBiQKBgQCx4VRXEHfL+XJ8PB3c+TIn9s/RAc+8FLxBt3zp4+z1q2Cgl0bzncZNr9JI1CbM4dblUy/ovS8iHUg+QDMMUMoyBUTsscGqV9VRCODcxjDc5hGyEx6av3hT3RXkbm4PTww3Kapn5rtg2cFZQi4hL5kx7m72jWYmU0B18ErwwIXYtQIDAQAB


С DNS покончено, осталось прописать в таблицы opendkim наш домен, для этого открываем /etc/opendkim/KeyTable и добавляем строчку:
mail._domainkey.domain1.local  domain1.local:mail:/etc/opendkim/keys/domain1.local/mail.private


В файле подписей /etc/opendkim/SigningTable, укажем для писем домена или адресата, ключ
*@domain1.local mail._domainkey.domain1.local
После этих манипуляций можно запустить opendkim и перечитать конфиг postfix'a /etc/init.d/opendkim start && /etc/init.d/postfix reloadОтправляем письмо на почтовый ящик яндекса, и если все хорошо мы должны увидеть зеленую галочку напротив адреса, после этого почтовые службы будут более благосклонны к вашим письмам, но так же не забывайте про SPF и DMARC.
В логах /var/log/maillog должна быть следующая строка, уведомляющая о успешной подписи письма
opendkim[23742]: 30335EE03F2: DKIM-Signature field added (s=mail, d=domain1.local)
Держитесь подальше от спама.

P.S. Сорь что статейка про centos, но в arch'e все примерно так же, единственное запуск и перезапуск служб через systemd, хотя и в centos 7, systemd имеет место быть.

Комментарии ()

    Есть вопрос или предложение пиши в Telegram @cloudsv

    Прямой эфир

    cloudsv 24 октября 2018, 00:27
    О жизни Обновление Scala Rider G4 0
    cloudsv 21 октября 2018, 23:16
    Arch Linux Памятка по основным утилитам Linux 0
    cloudsv 01 июня 2018, 01:39
    Telegram Настройка прокси mtproto для Telegram 28
    cloudsv 22 января 2018, 21:59
    Web Локальное зеркало обновлений Dr.web 0
    cloudsv 03 октября 2017, 10:55
    Web Пароль от резервной копии Bitrix 1
    cloudsv 09 июля 2017, 23:02
    Arch Linux Let's Encrypt это легко и просто 0