Skip to content

Latest commit

 

History

History
282 lines (201 loc) · 11.7 KB

MailServerSettings.md

File metadata and controls

282 lines (201 loc) · 11.7 KB

Полезные сервисы

Проверка Reverse DNS lookup

Проверка Reverse DNS lookup

Проверка DNS записи DKIM

DomainKeys, DKIM, SPF, SpamAssassin Email валидатор

SUPERTOOL

Полезные ссылки

Настройка POSTFIX

Postfix — сервер MTA (англ. mail transfer agent)

Установка:

sudo apt-get install postfix

Выбираем «Internet Site» и затем вводим доменное имя, закреплённое за сервером. Далее Postfix автоматически установится. Останется небольшой штрих:

Если Postfix уже установлен, то перекофигурируем его:

sudo dpkg-reconfigure postfix
sudo nano /etc/postfix/main.cf

Пишем доменное имя:

myhostname = example.com

Правим строку с ключом mydestination, отвечающим за список доменов которые будет обслуживать Postfix. В нашем случае тут останется только домен, localhost.localdomain и localhost:

mydestination = example.com, localhost.localdomain, localhost

Ключ relayhost оставляем пустым. Убедитесь, что ключ mynetworks содержат эту запись.

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Ключ указывает на то, кто может отправлять почту с данного сервера. Этой записью мы разрешаем слать письма только с локальных адресов.

Перезагружаем MTA:

sudo service postfix reload

Mail-Forwarding

Внесём изменения в DNS-записи:

  • создадим A-запись:
    • название — mail
    • IP — IP сервера, тот, что указан в основной A-записи
  • создадим MX-запись:
    • имя хоста: mail.example.com. (с точкой на конце, меняем на свой домен)
    • приоритет: 5

На примере DigitalOcean.com

Откроем файл конфигурации Postfix:

sudo nano /etc/postfix/main.cf

заменим ключ alias_maps на:

virtual_alias_maps = hash:/etc/postfix/virtual

Добавим дополнительный e-mail, для этого заведём файл содержащий алиасы:

sudo nano /etc/postfix/virtual

Пример алиасов:

[email protected] username
# где username - имя пользователя в системе
# вся почта будет тут: /var/mail/username

# или перенаправим почту на другой домен
[email protected] [email protected]

# или на несколько доменов
[email protected] [email protected],[email protected]

Сохраним, создадим хэш:

postmap /etc/postfix/virtual

Перезагрузим MTA:

sudo service postfix reload

Reverse DNS

Reverse DNS lookup, или reverse DNS resolution (rDNS), нужен для определения доменного имени сервера по его IP. Нужна эта процедура для верификации отправителя:

  • берётся IP сервера, с которого письмо было отправлено
  • с помощью rDNS определяется домен
  • полученный домен сравнивается с доменом указанным в заголовках письма, в поле «From»
  • если доменные имена совпадают, то считаем что отправитель тот, за кого он себя выдает.

По умолчанию rDNS скорее всего не указывает на ваш сервер. Исправить это просто. Пишем своему хостинг-провайдеру письмо с просьбой настроить Reverse DNS lookup для вашего домена и сервера, IP указываем.

Как и всё, что связано с DNS, изменения для записей Reverse DNS lookup пройдут не сразу, потому ждём, и через некоторое время проверяем с помощью любого онлайн-сервиса Reverse DNS lookup.

Настройка rDNS на DigitalOcean:

  • Выбираем пункт «Droplets»
  • Выбираем нужный дроплет
  • Настройки (Settings)
  • Переименовать (Rename)
  • Вставляем новый hostname. Hostname равен домену закреплённому за этим дроплетом, типа «example.com».
  • Ждём обновления DNS.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install opendkim opendkim-tools
mkdir /etc/postfix/dkim/
opendkim-genkey -D /etc/postfix/dkim/ -d your-site.ru -s mail

Только что мы создали секретный (/etc/postfix/dkim/mail.private) и публичный (/etc/postfix/dkim/mail.txt) ключи. Получаем содержимое публичного ключа:

cat /etc/postfix/dkim/mail.txt

mail._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnv6Qp34EnmUQMGDFs3tA2f9kRlTQCit3ST3l3xt4Zj3JBeIHnoaMk0Vos/hR/JtNnS16MEMMnX5OgZ3pAJjrk3CCw4hr5THW5zuGfqjSjusEbNckL6+E57Q2DwOjk4d+AjL7cb/fR7MWMMTY6hVVXbRc5VxKUaPp+34mecVyHSQIDAQAB" ; ----- DKIM mail for your-site.ru

Содержимое помещаем в DNS запись типа TXT для вашего домена

Узел: mail._domainkey

Содержимое записи: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnv6Qp34EnmUQMGDFs3tA2f9kRlTQCit3ST3l3xt4Zj3JBeIHnoaMk0Vos/hR/JtNnS16MEMMnX5OgZ3pAJjrk3CCw4hr5THW5zuGfqjSjusEbNckL6+E57Q2DwOjk4d+AjL7cb/fR7MWMMTY6hVVXbRc5VxKUaPp+34mecVyHSQIDAQAB" 

Чиним доступ для OpenDKIM:

chgrp opendkim /etc/postfix/dkim/*
chmod g+r /etc/postfix/dkim/*

В файл конфигурации /etc/opendkim.conf записываем:

Syslog yes
SyslogSuccess yes
# на время отладки включим расширенное логгирование
LogWhy yes
X-Header yes

Canonicalization relaxed/relaxed
# подпись и проверка подписей
Mode sv
# если только подписываем
#Mode s

# список ключей -
KeyTable file:/etc/postfix/dkim/keytable
# соответствие адресов/доменов и ключей -
SigningTable file:/etc/postfix/dkim/signingtable
# если вы подписываете и на других серверах - 
#ExternalIgnoreList file:/etc/postfix/dkim/trusted
# список внутренних хостов, почта которых требует подписи -
#InternalHosts file:/etc/postfix/dkim/internal

Список имеющихся ключей укажем в файле /etc/postfix/dkim/keytable:

# формат: "название домен:селектор:/путь/до/ключа"
# в качестве названия удобно использовать имя DNS записи с ключем
mail._domainkey.your-site.ru your-site.ru:mail:/etc/postfix/dkim/mail.private
# ключей может быть сколько угодно
mx._domainkey.example.net example.net:mx:/etc/postfix/dkim/mx.private
# (список ключей может быть и в БД - продробней в манах)

В файле /etc/postfix/dkim/signingtable указываем соответсвие домен-ключ:

# формат: "домен-или-адрес название-ключа"
your-site.ru mail._domainkey.your-site.ru

# все остальные адреса тоже подписываем
# в таком случае вся исходящая почта будет подписана 
# этим ключом
* mail._domainkey.your-site.ru
# (подробное описание формат есть в man)

В файле /etc/default/opendkim объясним DKIM-демону где ему ждать подключений:

SOCKET="inet:8891@localhost"

Наконец, добавим в конец /etc/postfix/main.cf следующие строки:

# Все письма будут отправлены на подпись
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Не забываем добавить TXT запись и проверить, что она на месте:

dig txt mail._domainkey.your-site.ru

Или прогнать через валидатор валидатор.

Перезапускаем postfix и opendkim

sudo service postfix reload
sudo service opendkim reload

Проверяем работу. Самый простой способ — отправка письма на ящик Яндекс.Почты. Если всё верно настроено, появится зеленый бейджик «Подпись верна». Если неудачно, то в письме (Яндекс) жмём «Подробно -> Свойства письма», ищем слово dkim. Должно быть «dkim=pass». Верху есть ссылки на другие сервисы.

Помним про то, что DNS обновляется не сразу.

Запретим всем серверам принимать письма без подписи с вашего домена, добавим ADSP запись:

_adsp._domainkey IN TXT "dkim=all"

Требуется для указания IP с которых мы разрешаем отправку. Настройка идёт через DNS-записи.

Мне обычно хватает простой записи говорящей что почту можно отправлять только с адресов, указанных в записях A и MX:

your-site.ru. TXT v=spf1 a mx ~all

Почитать про синтаксис SPF

Проверить работу можно с помощью DomainKeys, DKIM, SPF, SpamAssassin Email валидатор. Также можно посмотреть исходники письма в Яндекс.Почте или Gmail.

Проверка на примере Gmail Отправьте почту через ваш сервис на любой GMail-аккаунт. Откройте полученное письмо и выберите в меню действий пункт Show Original.

Если вы найдете следующие строчки, то всё в порядке:

Received-SPF: pass
Authentication-Results: ... spf=pass

Помним про то, что DNS обновляется не сразу.