Настраиваем исходящую почту c exim4

Цель статьи — настройка сервера исходящей почты используя exim4.

  • Базовая настройка
  • Spamhouse
  • SPF
  • DKIM

Базовая настройка #

sudo apt-get install exim4
sudo dpkg-reconfigure exim4-config

Устроим проверку:

echo "test mail" | mail -s "Test Mail" you@yandex.ru

Яндекс здесь не случаен, на gmail или другой сервис письмо может просто не прийти, об этом ниже.

Spamhouse #

Отправьте письмо на gmail:

echo "test mail" | mail -s "Test Mail" you@gmail.com

Если письмо не пришло смотрите лог:

sudo cat /var/log/exim4/mainlog

Если вы увидите в нём The IP you're using to send mail is not authorized to send email directly to our servers, то дело скорее всего в том, что ваш IP находится в спам базах.

В моём случае IP сервера получен покупкой статического адреса у домашнего провайдера и находился в диапазоне динамических адресов, который был добавлен в PBL.

Проверьте так ли это:

http://www.spamhaus.org/lookup/

И в этом случае удалите себя из списка:

http://www.spamhaus.org/pbl/removal/

В форме вас попросят указать почтовый ящик на домене связанном с IP, который вы собрались удалять из spamhaus.

Я был не в восторге от перспективы поднимать сервер на приём почты ради одного письма, поэтому привязал почту Гугла к домену, это бесплатно:

http://www.google.com/enterprise/apps/business/pricing.html

А сама процедура подробно разжёвана в интернете.

Через несколько часов после удаления IP из spamhaus я начал получать письма и на Gmail. Но они попадали в спам.

Не спам: SPF #

Добавляйте в DNS такую строчку:

dobroserver.ru. IN TXT "v=spf1 +a +mx ~all"

Она подразумевает что нужно считать валидными письма пришедшие с IP из A и MX записей.

Проверить наличие записи можно так:

dig dobroserver.ru TXT | grep spf

Вы должны увидеть что-то такое:

dobroserver.ru.     86400   IN  TXT "v=spf1 +a +mx ~all"

Скорее всего через пару часов ваши письма прекратят попадать в спам. Но не наверняка.

Не спам: DKIM #

Но чтобы гарантировать (в разумных пределах, спамеру ничто не поможет) попадание писем в папку «входящие» минуя папку «спам» нужно настроить подпись писем. Эта процедура требует минимум усилий при максимальном результате, поэтому обязательна.

Устанавливаем генератор ключей:

aptitude install dkim-filter

Создаём директорию где будем их хранить:

mkdir -p /etc/exim4/dkim
cd /etc/exim4/dkim

Создаём пару приватный/публичный ключи для домена:

dkim-genkey -d dobroserver.ru -t -r -s mail

Переименовываем их:

mv mail.private dobroserver.ru.private
mv mail.txt dobroserver.ru.public

Приватный ключ #

Лежит в хранилище и доступен только серверу почты:

cd /etc/exim4/dkim
chmod 440 *.private
chgrp Debian-exim *.private

Пользователь от которого запускается exim:

cat /etc/passwd | grep exim

Для Debian это указанный выше Debian-exim.

Настраиваем exim на использование ключа:

vim /etc/exim4/exim4.conf.template +/remote_smtp:

Эти переменные нужно вставить перед remote_smtp:

DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_FILE = /etc/exim4/dkim/${lc:${domain:$h_from:}}.private
DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}}
DKIM_SELECTOR = mail

remote_smtp:
...

И не забудьте перезапустить сервер.

service exim4 restart

Публичный ключ #

cat dobroserver.ru.public
mail._domainkey IN TXT "v=DKIM1; g=*; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBvmuZUemtB0rA2UZkdHZr/njSkRcKJY1/dKLVQIjusLtDMCv8OXetYCw/cpp/5HP3ANlBghug7GYCG7FU3SpRE/9E1UfOrMVmsxyj76+af6C9l607fGdjtZqTzGu33uNDfgl3sE/xv028VtJEUPZD3i3INM9B7K9V9VOrfkOCSQIDAQAB" ; ----- DKIM mail for dobroserver.ru

Ещё одна запись в dns зону:

Флаг t=y; показывает что dkim в тестовом режиме, замените его на t=s;.

Проверка:

dig mail._domainkey.dobroserver.ru TXT | grep DKIM
mail._domainkey.dobroserver.ru. 86396 IN TXT    "v=DKIM1\; g=*\; k=rsa\; t=s\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBvmuZUemtB0rA2UZkdHZr/njSkRcKJY1/dKLVQIjusLtDMCv8OXetYCw/cpp/5HP3ANlBghug7GYCG7FU3SpRE/9E1UfOrMVmsxyj76+af6C9l607fGdjtZqTzGu33uNDfgl3sE/xv028VtJEUPZD3i3INM9B7K9V9VOrfkOCSQIDAQAB"

Снова отправляйте письмо на Яндекс:

echo 'Ah, ah,
We come from the land of the ice and snow,
From the midnight sun where the hot springs flow.
The hammer of the gods will drive our ships to new lands,
To fight the horde, singing and crying: Valhalla, I am coming!' \
| mail -s "Test Mail" you@yandex.ru

Не спам: формат письма #

Все усилия пропадут даром, если шаблон сообщений плох.

Такой шаблон у Gmail улетает в спам в 100%:

doctype
html
  head
    meta charset="utf-8"
    title= @message.subject
  body
    p= @message.content

Крамола в теге title, если его убрать, то письмо попадает во входящие:

doctype
html
  head
    meta charset="utf-8"
  body
    p= @message.content

Добавить комментарий