Postfix - настройка отправки email от пользователей сервера

Задача: настроить отправку электронной почты (e-mail) от пользователей сервера в интернет. Необходимо для мониторинга оборудования, извещения о событиях и т.п. Пример: получать оповещения от smartd в случае обнаружения проблем со SMART диска.

Чем меньше посредников на пути письма, тем меньше точек возможных отказов и тем больше шансов, что email будет доставлен получателю. Исходя из этих соображений, самый надежный вариант - это настроить собственный сервер отправки почты (почтовый агент; Mail Transfer Agent - MTA), а не использовать, например, SMTP своего почтового ящика в Gmail.com.

Но для того, чтобы отправленные из своего MTA письма были доставлены до адресата, а не удалены спам-фильтром получателя, необходимо располагать:

  • внешним арендованным или приобретенным белым IP-адресом (в примерах ниже будет использоваться случайный IP 5.6.7.8) и возможностью настроить PTR (Reverse DNS);
  • реальным доменным именем (example.com), поддомен которого будет настроен в качестве имени сервера с возможностью управления его настройками DNS;

Почтовый сервер - программа, которая отправляет e-mail получателю напрямую (на его почтовый сервер) или через посредника (relay).

Здесь будет рассматриваться установка и настройка Postfix для CentOS 7. Эта информация будет полезна и для выбора и установки MTA на другие системы.

Выбор почтового сервера

Из огромного множества рассмотрим 3 самых массовых почтовых сервера: Sendmail, Exim и Postfix.

Согласно cтатистики использования MTA на июнь 2020 г. самым популярным в мире является Exim (466853 - 57%), за ним следует Postfix (289401 - 35%), а вот некогда самый массово используемый Sendmail уже практически не используется (30640 - 4%).

Еще в 2007 году Sendmail был установлен на большинстве серверов, но утрата позиций связана, в первую очередь, с часто возникающими проблемами с безопасностью. Exim - мощный почтовый агент, большинство функционала которого не будет использоваться для поставленной задачи. Postfix - самый безопасный и простой в настройке полноценный MTA, он и был выбран для отправки писем с сервера.

Установка и настройка Postfix в CentOS 7

Установка и сохранения настроек по умолчанию в файле main.cf.origin:

# yum install postfix
# cp /etc/postfix/main.cf /etc/postfix/main.cf.origin

Для настройки конфигурации Postfix необходимо отредактировать или добавить следующие параметры в главном конфигурационном файле Postfix /etc/postfix/main.cf:

myhostname = server.example.com
mydomain = example.com
myorigin = $myhostname
mynetworks = 127.0.0.0/8
inet_protocols = ipv4
  • myhostname - полное доменное имя сервера;
  • mydomain - обычно это доменное имя, без первой части myhostname;
  • myorigin - домен для почтового ящика, указываемого как отправитель/from (например: root@server.example.com);
  • mynetworks - белый список сетей, из которых разрешено отправлять письма, отправка писем с IP не указанных в этом параметре - запрещена;
  • inet_protocols - all или ipv4 или ipv6 - протокол, по которому MTA будет пытаться подключиться к MTA получателя.

После первичной настройки запускаем Postfix и прописываем его в автозагрузку:

# systemctl start postfix
# systemctl enable postfix
# systemctl status postfix

Чтобы перечитать конфиг Postfix после его редактирования, пригодятся такие команды:

# systemctl reload postfix

или

# systemctl restart postfix

После этого Postfix готов к тестированию. Отправим почтовое сообщение самому себе на e-mail myemail@example.com и посмотрим логи Postfix:

# echo "Email body: test MTA Postfix" | mail -s "Test postfix" myemail@example.com
# tail -30 /var/log/maillog

Если в журнале присутствует такая строчка со статусом "status=bounced", значит e-mail отклонен сервером получателя. Причину ищите в этой же строке журнала чуть дальше:

postfix/smtp[10121]: 2884210020C3: to=<myemail@example.com>, relay=smtp-in.l.example.com:25, delay=0.36, delays=0.02/0.01/0.13/0.21, dsn=5.7.1, status=bounced ...

Если же в журнале "status=sent", значит e-mail принят сервером получателя и будет скорее всего доставлен по назначению:

postfix/smtp[11111]: 9A4D230021A1: to=<myemail@example.com>, relay=smtp-in.l.example.com:25, delay=0.32, delays=0.01/0.01/0.09/0.2, dsn=2.0.0, status=sent ...

Но даже если письмо принято получателем, оно может быть (точнее скорее всего) будет автоматически перемещено в папку "Спам". Как с этим бороться - читайте ниже.

Дополнительные настройки для работы почтового сервера

Настройка Hostname сервера

Посмотреть, как называется сервер можно такой командой:

# hostname

Если название отличается от необходимого или не установлено, тогда записать hostname для сервера:

# echo "server" > /etc/hostname
# hostname -F /etc/hostname

Обратите внимание, что hostname сервера не равно домену сервера! Если полный домен сервера: "server.example.com", то hostname сервера - это "server".

Настройка PTR (Reverse DNS)

В настройках домена прописываются A-записи, которые связывают домен с IP-адресом(ами) сервера. Reverse DNS - это обратное действие, которое связывает IP-адрес с доменом.

Сервер-отправитель письма указывает в параметре HELO (EHLO) свой домен, например server.example.com, а сервер получателя делает специальный whois-запрос, чтобы проверить, какой домен записан для IP сервера отправителя. Если домен, указанный для IP и в заголовке HELO (EHLO) не совпадают, то с большой долей вероятности письмо будет или отклонено, или перемещено в папку Спам.

Прописать Reverse DNS может только владелец IP-адреса, который назначен серверу - это скорее всего хостинг, где размещен сервер или VPS. Если сервис расположен в квартире/офисе, то по вопросу указания PTR стоит обратиться к интернет-провайдеру.

Не нужно путать владельца IP-адреса и регистратора для доменов - это, обычно, разные компании. Но если вы разместили свой сервер и зарегистрировали домен у одного и того же провайдера, то тогда по вопросу изменения Reverse DNS следует обращаться к одной и той же компании.

Проверить домен, присвоенный PTR, можно утилитой командной строки dig: $ dig -x 5.6.7.8 или используя различные онлайн-сервисы.

Настройка DNS доменного имени почтового сервера

В панели управления регистратора домена example.com поддомен для сервера (server) конфигирируется, обычно, в разделе "Настройка DNS":

server.example.com A 5.6.7.8
server.example.com MX 10 server.example.com
server.example.com TXT v=spf1 +a +mx -all

В третьей строке указывается SPF-запись для поддомена. SPF используется почтовым сервером-получателем для проверки: разрешено ли владельцем домена отправка писем с IP, с которого пришло в действительности письмо? Параметры SPF "+a +mx -all" указывают, что письма могут отправлять только те IP, которые прописаны в A и MX записях домена, а со всех остальных IP принимать почту запрещено.

Проверка влияния настроек PTR и DNS на отправляемые e-mail

После изменения настроек DNS необходимо подождать какое-то время, для того, чтобы они обновились на всех DNS серверах. Иногда это может затянуться до одних суток.

Отправляем тестовое письмо на свой e-mail и смотрим журнал:

# echo "Email body: test MTA Postfix" | mail -s "Test postfix" myemail@example.com
# tail -30 /var/log/maillog

Если "status" отправки e-mail Postfix равен "sent", значит письмо было получено сервером принимающей стороны. Следует проверить, не попало ли оно в спам, и если нет - значит большая часть работы по настройке Postfix выполнена успешно. Но остается еще один важный момент, требующий настройки: шифрование письма.

По умолчанию, Postfix, да и, наверное, все другие MTA, отправляет письма в открытом не зашифрованном виде. Это сравнимо с просмотром web-страниц по небезопасному протоколу HTTP, вместо HTTPS. В этом случае, например, в интерфейсе Gmail, напротив получателя будет отображаться красный перечеркнутый замок, означающий, что сообщение не зашифровано. Но самое печальное, что если в письме будут какие-либо конфиденциальные данные, их смогут без проблем прочитать все, через кого проходит трафик, что очень и очень не безопасно.

Добавить шифрование в Postfix для отправляемых писем - весьма просто, инструкция расположена ниже.

TLS-шифрование отправляемых писем в Postfix

Первым делом необходимо получить сертификат, при помощи которого будут шифроваться все отправляемые из Postfix e-mail. Самый простой и быстрый способ - создать сертификат самостоятельно.

openssl req -new -nodes -x509 -out /etc/postfix/smtpd.pem -keyout /etc/postfix/smtpd.pem -days 18400

На все вопросы, кроме указания Common Name, можно отвечать на свое усмотрение, Common Name сертификата должно совпадать с именем сервера (в этой конфигурации - server.example.com). Этой командой будет создан сертификат со сроком действия 50 лет.

Далее нужно внести изменения в главный файл конфигурации Postfix (/etc/postfix/main.cf), а точнее, просто добавить строки, опубликованные ниже в конец файла:

tls_random_source = dev:/dev/urandom
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_cafile = /etc/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_loglevel = 1
smtpd_use_tls = yes

Краткое описание настроек для шифрования исходящих писем:

  • tls_random_source - ссылка на генератор случайных чисел;
  • smtp_use_tls - оповещение клиентов о наличии TLS-шифрования;
  • smtp_tls_note_starttls_offer - записывать в журнал имена серверов, у которых поддержка TLS не включена (ответ STARTTLS);
  • smtpd_tls_auth_only - применять SMTP-аутентификацию только для соединений с использованием TLS;
  • smtpd_tls_key_file - закрытый ключ сервера;
  • smtpd_tls_cafile - сертификат;
  • smtpd_tls_cert_file - сертификат;
  • smtpd_tls_received_header - запрос на получение данных про алгоритм шифрования и версию протокола;
  • smtpd_tls_session_cache_timeout - данные в кэше TLS-сессии считаются актуальными в указанном периоде (сек);
  • smtpd_tls_loglevel - на сколько подробно записывать сообщения в журнал;
  • smtpd_use_tls - оповестить об использовании TLS;
Опубликовано: 2020/07/28
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/linux.php?txt=728" target="_blank">Postfix - настройка отправки email от пользователей сервера</a>
26
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.