Жизнь была прекрасна и все было в этом мире хорошо, пока почта с моего сайта не стала активно посылаться в спам практически всеми крупными почтовыми серверами. Особенно усердствовал в этом Gmail. Частенько меня принимали за спамера в Yandex, реже в mail.ru и rambler.

Исходя из совокупности представленных факторов стало понятно, что надо что-то делать с настройками своего почтового сервера Exim. Посмотреть, как это было сделано, приглашаю под хабракат.
Порывшись немного в интернете на эту тему, обнаружил несколько интересных статей на Хабре (Почтовая кухня #1: DNS, Что такое SPF, Как не стать спамером со своей уютной рассылочкой), но они, к сожалению, охватывают только часть настроек почтового сервера. Постараюсь восполнить этот пробел.
Итак имеется debian lenny сервер и установленный на нем дефолтный Exim 4.72. Описывать установку Exim не имеет смысла (хотя тут ничего сложного нет — sudo apt-get install exim4). Лишь напомню, что первоначальную настройку exim можно провести следующей командой:
Все! Сайт готов рассылать почту. Но здесь есть 3 «но». Почтовики очень любят SPF, PTR и DKIM и очень не любят их отсутствие. Далее описывается как настроить это буквально за несколько минут.
Сначала настроим PTR. PTR это так называемая «обратная запись». В ней в обратном порядке записывается IP адрес хоста, с которого в нашем случае рассылается почта. По этой записи почтовики распознают имя х��ста по его IP. Немного теории здесь.
Предположим, что IP вашего почтового сервера 78.56.158.23. Открываем наш NS сервер (или, что чаще настройки провайдера сервера или хостера) и добавляем следующую DNS запись (IP при этом «разворачиваем»):
Проверяем изменения — http://centralops.net/co/DomainDossier.aspx
Здесь остается добавить, что такая запись у моего хостера FastVPS задается через панель веб-ребута.
В SPF записи мы указываем какие сервера имеют право отправлять почту с вашего домена. В самом простом случае эта запись выглядит следующим образом:
или/и (если NS позволяет создавать SPF записи)
Т.е. отправлять почту имеют право сервер с DNS записью в секции «a» и почтовый сервер в секции «mx».
Более подробно о SPF написано в статье "Что такое SPF".
Составить свой вариант записи SPF поможет этот сервис — openspf.org
Опять проверяем результат через сервис centralops.net.
Для создания успешной рассылки осталось создать подписи к письмам.
Устанавливаем dkim-filter:
Затем генерируем пару ключей для подписи писем (открытый и закрытый ключ):
-r значит, что ключ будет использоваться только для почты
-s задает имя dkim-selector (можно указать любое имя, например имя вашего домена)
Смотрим, что получилось при генерации открытого ключа:
И видим:
Сам ключ обрезал, потому что он довольно длинный.
Копируем содержимое этого файла и вставляем в DNS записи нашего сервера. Все, с открытым ключом мы закончили.
У нас остался закрытый ключ mail.private, который нам надо привязать к Exim.
Переименовываем mail.private и копируем его в директорию exim:
или же лучше сделать хозяином файла пользователя exim командой chown и сделать права на доступ к нему, к примеру, 600 или еще строже 400:
И теперь осталось настроить сам Exim:
Находим секцию remote_smtp и перед ней добавляем:
И немного правим саму секцию:
где dkim_selector это первое слово перед ._domainkey в открытом ключе
После перезапускаем exim:
Теперь проверим подписи. Для этого можно просто отправить письмо на любой адрес Gmail. Затем надо посмотреть подробные сведения о письме и в поле «Подписан» должен быть ваш домен. Или можно посмотреть код письма и в заголовке письма должно присутствовать поле DKIM-Signature. Если оно есть, то мои поздравления! Подписи работают!
Вот таких трех простых шагов достаточно, чтобы ваша почта больше не попадала в спам (если вы конечно не спамер). У меня, например, до этих переделок почта с сайта практически всегда отправлялась Gmail в спам. Теперь же надо что-то невообразимое написать в письме, чтобы оно было помечено как спам. К счастью, все мои рассылки теперь доходят до адресатов.
Напоследок можно сказать, что еще одним способом эффективной доставки почты является грейлистинг. В этом случае почтовый сервер, который получает вашу почту на первое сообщение отвечает временной ошибкой, вносит ваш сервер в "серый список", и только когда с вашего сервера придет повтор этого сообщения, то оно пропускается. Как правило спамерские программы не посылают повторов.
В Exim по умолчанию включена система автоповторов для всех хостов. Вы можете усовершенствовать дефолтное правило, найдя в конфигурационном файле секцию RETRY CONFIGURATION и отредактировать согласно этой инструкции.
В рамках данного топика не рассматривалось применение описанных технологий для приема писем на свой почтовый сервер. Это тема для другой статьи.
Ссылки:
Рекомендации по осуществлению массовых рассылок
Почтовая кухня #1: DNS
HOWTO: Exim & DKIM

Исходя из совокупности представленных факторов стало понятно, что надо что-то делать с настройками своего почтового сервера Exim. Посмотреть, как это было сделано, приглашаю под хабракат.
Порывшись немного в интернете на эту тему, обнаружил несколько интересных статей на Хабре (Почтовая кухня #1: DNS, Что такое SPF, Как не стать спамером со своей уютной рассылочкой), но они, к сожалению, охватывают только часть настроек почтового сервера. Постараюсь восполнить этот пробел.
Итак имеется debian lenny сервер и установленный на нем дефолтный Exim 4.72. Описывать установку Exim не имеет смысла (хотя тут ничего сложного нет — sudo apt-get install exim4). Лишь напомню, что первоначальную настройку exim можно провести следующей командой:
dpkg-reconfigure exim4-configВсе! Сайт готов рассылать почту. Но здесь есть 3 «но». Почтовики очень любят SPF, PTR и DKIM и очень не любят их отсутствие. Далее описывается как настроить это буквально за несколько минут.
PTR
Сначала настроим PTR. PTR это так называемая «обратная запись». В ней в обратном порядке записывается IP адрес хоста, с которого в нашем случае рассылается почта. По этой записи почтовики распознают имя х��ста по его IP. Немного теории здесь.
Предположим, что IP вашего почтового сервера 78.56.158.23. Открываем наш NS сервер (или, что чаще настройки провайдера сервера или хостера) и добавляем следующую DNS запись (IP при этом «разворачиваем»):
23.158.56.78.in-addr.arpa IN PTR mail.mydomain.ru.Проверяем изменения — http://centralops.net/co/DomainDossier.aspx
Здесь остается добавить, что такая запись у моего хостера FastVPS задается через панель веб-ребута.
SPF
В SPF записи мы указываем какие сервера имеют право отправлять почту с вашего домена. В самом простом случае эта запись выглядит следующим образом:
mydomain.ru. IN TXT "v=spf1 a mx ~all"или/и (если NS позволяет создавать SPF записи)
mydomain.ru. IN SPF "v=spf1 a mx ~all"Т.е. отправлять почту имеют право сервер с DNS записью в секции «a» и почтовый сервер в секции «mx».
Более подробно о SPF написано в статье "Что такое SPF".
Составить свой вариант записи SPF поможет этот сервис — openspf.org
Опять проверяем результат через сервис centralops.net.
DKIM
Для создания успешной рассылки осталось создать подписи к письмам.
Устанавливаем dkim-filter:
apt-get install dkim-filterЗатем генерируем пару ключей для подписи писем (открытый и закрытый ключ):
dkim-genkey -d mydomain.ru -s mail -r-r значит, что ключ будет использоваться только для почты
-s задает имя dkim-selector (можно указать любое имя, например имя вашего домена)
Смотрим, что получилось при генерации открытого ключа:
tail mail.txtИ видим:
mail._domainkey IN TXT "v=DKIM1; g=*; k=rsa; p=MIGfMA0GCS..." ; ----- DKIM mail for mydomain.ruСам ключ обрезал, потому что он довольно длинный.
Копируем содержимое этого файла и вставляем в DNS записи нашего сервера. Все, с открытым ключом мы закончили.
У нас остался закрытый ключ mail.private, который нам надо привязать к Exim.
Переименовываем mail.private и копируем его в директорию exim:
mv mail.private mydomain.ru.key
cp mydomain.ru.key /etc/exim4
chmod 755 /etc/exim4/mydomain.ru.keyили же лучше сделать хозяином файла пользователя exim командой chown и сделать права на доступ к нему, к примеру, 600 или еще строже 400:
chown exim:exim /etc/exim4/mydomain.ru.key
chmod 600 /etc/exim4/mydomain.ru.keyИ теперь осталось настроить сам Exim:
nano /etc/exim4/exim4.conf.templateНаходим секцию remote_smtp и перед ней добавляем:
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/${lc:${domain:$h_from:}}.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}И немного правим саму секцию:
remote_smtp:
driver = smtp
dkim_domain = DKIM_DOMAIN
dkim_selector = mail
dkim_private_key = DKIM_PRIVATE_KEYгде dkim_selector это первое слово перед ._domainkey в открытом ключе
После перезапускаем exim:
/etc/init.d/exim4 restartТеперь проверим подписи. Для этого можно просто отправить письмо на любой адрес Gmail. Затем надо посмотреть подробные сведения о письме и в поле «Подписан» должен быть ваш домен. Или можно посмотреть код письма и в заголовке письма должно присутствовать поле DKIM-Signature. Если оно есть, то мои поздравления! Подписи работают!
Итоги
Вот таких трех простых шагов достаточно, чтобы ваша почта больше не попадала в спам (если вы конечно не спамер). У меня, например, до этих переделок почта с сайта практически всегда отправлялась Gmail в спам. Теперь же надо что-то невообразимое написать в письме, чтобы оно было помечено как спам. К счастью, все мои рассылки теперь доходят до адресатов.
Напоследок можно сказать, что еще одним способом эффективной доставки почты является грейлистинг. В этом случае почтовый сервер, который получает вашу почту на первое сообщение отвечает временной ошибкой, вносит ваш сервер в "серый список", и только когда с вашего сервера придет повтор этого сообщения, то оно пропускается. Как правило спамерские программы не посылают повторов.
В Exim по умолчанию включена система автоповторов для всех хостов. Вы можете усовершенствовать дефолтное правило, найдя в конфигурационном файле секцию RETRY CONFIGURATION и отредактировать согласно этой инструкции.
В рамках данного топика не рассматривалось применение описанных технологий для приема писем на свой почтовый сервер. Это тема для другой статьи.
Ссылки:
Рекомендации по осуществлению массовых рассылок
Почтовая кухня #1: DNS
HOWTO: Exim & DKIM
