Не попасть в спам при рассылке почты, очень важный аспект для различных интернет магазинов или сайтов.
Допустим у нас на сервере есть некое множество сайтов, и мы хотим что бы каждый сайт мог отправлять письма с определенного 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 имеет место быть.
Комментарии ()