понедельник, 23 июля 2012 г.

Настройки postfix и sendmail при внешней MX записи. Debiad, Ubuntu

Проблема

У меня, на моем сервере example.com (допустим), MX запись почты указывает на почтовые сервера google. С недавнего времени возни кла проблема, MTA sendmail, который стоял на сервер по умолчанию, перестал отправлять почту на адреса вида username@example.com. Дело в том, что MTA при отправке почты на example.com видит, что это же он сам!, т.к. домен с которого почта отсылается и вправду example.com. В результате он и не думает смотреть DNS на предмет MX записей, а пытается отправить локальному пользователю. В результате или ошибка, если пользователя нет, или складывается в локальную директорию пользователя.


Куча решений в интернете, о том что при этом нужно использовать для отправки писем smtp сервер google не подходили, так как в день сервер шлет от 15К писем, и google этого не приветствует. Пробуя же заставить sendmail использовать удаленную доставку вместо локальной для email адресов с локальным домено привели к тому что вообще все поломал. Перенастраивал sendmail с нуля (удалив все его конфиги), но результат был таким же как и изначально. В результате плюнул и пришло решение настроить все через postfix, так как то, что сайт не может отправлять письма на свой домен - ну совсем не камельфо!

Решение с postfix

Сносим sendmail
aptitude purge sendmail

Ставим postfix
apt-get install postfix

В файле /etc/postfix/main.cf:
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
Тут важно, чтобы домен example.com небыл перечислен в mydestination, иначе будет ходить на локальную почту.

Возможно понадобиться чтобы что то отправленное на example.com, а не просто на имя пользователя, попадало в локальную почту, тогда в файле /etc/aliases добавляем алиас, например:
root: root@example.com

Решение с sendmail

Я это решение сам не проверял, так как уже нашел его в комментариях к какому то посту на хабре уже после того, как снес sendmail и настроил через postfix.

nano /etc/mail/sendmail.mc

В конце дописываем (example.com меняем на свой домен, на котором висит сайт):

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Сохраняем и запускаем команды:
sendmailconfig
service sendmail restart

Проблема должна исчезнуть.

Прикидываемся добренькими

Нам необходимо настроить почтовую систему для формирования "нормальных" email заголовков при отсылке через php mail(). Нужно это для того, чтобы письма из (например) нашей массовой рассылки не попадала в спам.

Для начала отредактируем php.ini
в директориях /etc/php5/apache2 и /etc/php5/cli в обоих php.ini файлах редактируем параметр sendmail_path.
sendmail_path = /usr/sbin/sendmail -t -i -fnoreply@example.com
это установит заголовок Return-Path в noreply@example.com.

Далее, для того чтобы почтовые сервисы нам доверяли, необходимо в DNS прописать SPF запись, которая указывает на то, какие сервера имеют право отправлять почту с нашего домена:
example.com. IN TXT "v=spf1 +mx +a:example.com +include:gmail.com -all"
или/и (если NS позволяет создавать SPF записи)
example.com. IN SPF "v=spf1 +mx +a:example.com +include:gmail.com -all"
v=spf1 - указывает на версию spf
+mx - то что доверяем серверам из mx
+a:example.com - можно доверять серверу, обслуживающему домен example.com
+include:gmail.com - Импортируем все правила gmail.com (у меня, как я уже писал выше, почта вынесена на gmail)
-all - всем остальным не доверяем

Также желательно настроить PTR, это, так называемая, "обратная запись". Различные mail.ru могут ее проверять. В ней в обратном порядке записывается IP адрес хоста, с которого в нашем случае рассылается почта. По этой записи почтовики распознают имя хоста по его IP. Если IP адрес нашего example.com будет 192.0.43.10, то нужно в DNS добавить следующую запись:
10.43.0.192.in-addr.arpa IN PTR mail.mydomain.ru.
Проверить результат можно через сервис centralops.net.

Еще можно настроить DKIM, это подпись к письмам. Для этого нужно установить пакет dkim-filter, при его помощи создать ключи для подписи писем (открытый и закрытый). Открытый ключ вставляем в DNS запись сервера, а закрытый прописываем в настройках MTA.

1 комментарий:

  1. Спасибо за метериал. Все собрано удобно, а то надоело каждый пункт по полчаса искать в инете. Если есть у вас время, стукните в скайп tiho.russia (с луной на аве) или аську 253236610 а то сам ваших контактов не нашел, а вопросы есть, и я тоже могу быть чем-то полезен)

    Спасибо.

    ОтветитьУдалить