Цель статьи — настройка сервера исходящей почты используя 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