OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

Submission‑сервис Postfix: 587/465, SMTP AUTH и строгий TLS

В продакшн‑почте нельзя использовать порт 25 для клиентской отправки. Нужен отдельный submission на 587/465 с обязательным TLS и корректным SMTP AUTH. В статье — фрагменты main.cf/master.cf и Dovecot, шифры, тесты openssl и swaks, логирование.
Submission‑сервис Postfix: 587/465, SMTP AUTH и строгий TLS

Зачем нужен отдельный submission

Порт 25 предназначен для межсерверной доставки (MTA‑to‑MTA). Клиентская отправка писем должна идти через отдельный сервис с авторизацией — submission. Это разграничение повышает безопасность и управляемость: на 25 порт не включается SMTP AUTH, а на 587/465 — включается и дополняется строгим TLS. Так проще применять отдельные политики фильтрации, квоты и логирования исходящего трафика пользователей.

Правило: на 25 — принимаем почту от внешних MTA, без AUTH и без обязательного TLS. На 587/465 — только аутентифицированные клиенты, с обязательным шифрованием.

587 vs 465: STARTTLS и SMTPS

Сервис на 587 использует STARTTLS: соединение начинается в открытом виде, затем клиент инициирует апгрейд до TLS. Сервис на 465 — это исторический SMTPS (обёртка TLS сразу при подключении). Оба варианта признаны стандартом, однако 587 с STARTTLS обычно проще для диагностики на клиентах и часто рекомендуется как основной. 465 пригодится для старых клиентов или корпоративных политик, требующих «TLS с первого байта».

Предварительные условия

Перед началом убедитесь в базовой гигиене почтового хоста:

  • Корректные A/AAAA записи и обратная зона (PTR) на ваш почтовый хостнейм.
  • Рабочий сертификат и ключ для SMTP‑сервера (цепочка доверия обязателена). Если нет — оформите и установите SSL-сертификаты на FQDN почтового сервера.
  • Свободные порты 25, 587 и/или 465 на файрволе.
  • Установлен и настроен Dovecot (или Cyrus SASL), если планируете AUTH через Dovecot.

Про DNS‑гигиену, PTR и SPF для доставляемости читайте в материале «SPF, PTR и практики доставляемости».

FastFox SSL
Надежные SSL-сертификаты
Мы предлагаем широкий спектр SSL-сертификатов от GlobalSign по самым низким ценам. Поможем с покупкой и установкой SSL бесплатно!

Базовая настройка Postfix (main.cf)

Начнём с минимально необходимого в /etc/postfix/main.cf. Приведённые параметры не строго универсальны, но отражают хорошую практику 2024–2025:

myhostname = mail.example.com
smtpd_banner = $myhostname ESMTP

# TLS: общий минимум и кэш
smtpd_tls_cert_file = /etc/ssl/private/mail.pem
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_security_level = may
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = TLSv1.2, TLSv1.3
smtpd_tls_ciphers = high
smtpd_tls_mandatory_ciphers = high
tls_high_cipherlist = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
tls_preempt_cipherlist = yes
smtpd_tls_eecdh_grade = strong
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# AUTH глобально не включаем, только на submission
smtpd_sasl_auth_enable = no
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_tls_auth_only = yes

# Разграничение приёма на 25 (пример минимумов)
smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination

# Отправка наружу (вне темы статьи, но полезно)
smtp_tls_security_level = may

Комментарии:

  • smtpd_tls_security_level = may глобально: не ломаем приём на 25, но поддерживаем TLS с внешними серверами.
  • Жёсткие протоколы и шифры ограничивают клиентов до TLSv1.2+ и AEAD‑наборов. Для старого софта можно ослабить, но лучше сначала обновить клиентов.
  • smtpd_sasl_auth_enable = no глобально — включим AUTH только для 587/465 в master.cf.

Фрагмент master.cf с сервисом submission на 587

Настраиваем Dovecot для SASL

Если вы используете Dovecot для IMAP/POP3, проще всего отдать ему и SMTP‑аутентификацию. Минимум в Dovecot:

# /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login

# /etc/dovecot/conf.d/10-master.conf (фрагмент)
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
}

Проверьте, что путь /var/spool/postfix/private/auth совпадает с smtpd_sasl_path в Postfix.

Включаем submission на 587 (master.cf)

В файле /etc/postfix/master.cf объявим сервис с локальными переопределениями. Важные моменты: обязательный TLS, включённый AUTH, пометка исходящих писем от пользователей и минимальные ограничения.

submission inet n - n - - smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_helo_required=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Здесь encrypt делает TLS обязательным. AUTH включён только на этом сервисе. Ограничения сводятся к требованию аутентификации и базовой валидации адресатов. Если у вас свои фильтры/лимиты для исходящей почты — добавьте их в этот блок.

Добавляем SMTPS на 465 (опционально)

Если требуется 465, включаем «TLS‑обёртку» wrappermode:

smtps inet n - n - - smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_helo_required=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Нельзя одновременно включать wrappermode и STARTTLS — для 465 TLS обязателен с первого байта.

Firewall и сервисы

Откройте входящие порты 25, 587 и (если включали) 465. Если на узле работает Dovecot — также 143/993 для IMAP и 110/995 для POP3 по необходимости. После изменений перезапустите службы:

postfix check
systemctl reload postfix
systemctl restart dovecot

Строгий TLS: детали для Postfix 3.6+

Несколько полезных штрихов для ужесточения TLS:

  • tls_preempt_cipherlist = yes — сервер навязывает свой порядок шифров.
  • smtpd_tls_eecdh_grade = strong — выбор надёжных кривых для ECDHE.
  • tls_high_cipherlist управляет наборами шифров до TLS 1.3. Для TLS 1.3 применяется список, встроенный в OpenSSL; в Postfix можно контролировать его через tls_server_sni_maps в мультидоменных кейсах, но обычно хватает системных настроек.
  • smtpd_tls_auth_only = yes — запрет AUTH без TLS. На submission с encrypt это избыточно, но не мешает.

Не включайте обязательный TLS на 25 порту. Для межсерверной доставки используйте механизмы уровня политики (MTA‑STS, DANE), а не жёсткое «encrypt» на приёме.

Если хотите гарантировать шифрование при межсерверной доставке, посмотрите «DANE/TLSA для SMTP и DNSSEC».

Тестирование: openssl и swaks

Проверьте TLS и доступность AUTH на 587 с помощью openssl:

openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com

Вы должны увидеть валидную цепочку сертификатов и рекламу механизмов AUTH в ответе на EHLO:

EHLO test

В ответе среди расширений будет строка вроде 250-AUTH PLAIN LOGIN. Для 465 тест похож, но без -starttls smtp:

openssl s_client -connect mail.example.com:465 -servername mail.example.com

Утилита swaks удобна для полной проверки AUTH/отправки:

swaks --server mail.example.com --port 587 --tls --auth LOGIN --auth-user user@example.com --auth-password 'Secret123' --to you@example.net --from user@example.com

Проверка TLS и SMTP AUTH через openssl и swaks в терминале

Маршрут для пользователей vs межсерверной почты

Отделение submission даёт гибкость:

  • Отдельные лимиты скорости и объёма исходящих писем для пользователей.
  • Разные фильтры и пометки для антиспама на исходящем потоке.
  • Упрощённая диагностика: лог postfix/submission и postfix/smtps отделены от postfix/smtpd на 25 порту.

Типичные ошибки и как их избежать

  • AUTH включён на 25 порту. Исправление: smtpd_sasl_auth_enable = no в main.cf, включать только в блоках submission/smtps master.cf.
  • Обязательный TLS на 25. Это ломает доставку от чужих MTA. Оставьте may на 25.
  • Самоподписанный сертификат. Почтовые клиенты будут ругаться. Используйте валидную цепочку через SSL-сертификаты.
  • Несовпадение CN/SAN с хостнеймом. Клиент подключается к mail.example.com, а сертификат выдан на другой FQDN.
  • Закрыт 587/465 на файрволе. Проверьте правила и перезапустите сервисы.
  • Нет сокета Dovecot для SASL. Убедитесь, что /var/spool/postfix/private/auth существует и имеет корректные права.
  • Слишком жёсткие шифры. Если часть пользователей на старых клиентах — продумайте план обновления; временно можно ослабить политику до medium, но лучше обновить клиентов.

Диагностика и логирование

Полезные команды:

postconf -n
postfix check
journalctl -u postfix -e
journalctl -u dovecot -e

Чтобы увидеть, с каких портов идёт трафик и какая политика применена, используйте разные syslog_name в master.cf, как в примерах выше. Это сильно облегчает поиск проблем конкретного пользователя.

Чеклист перед вводом в эксплуатацию

  • Сертификат валиден, цепочка полная, имя совпадает.
  • 587 и/или 465 открыт извне, 25 — открыт для межсерверной доставки.
  • AUTH включён только на 587/465, запрещён на 25.
  • На 587/465 TLS обязателен (encrypt или wrappermode).
  • Шифры ограничены до безопасных, протоколы — TLSv1.2+.
  • Dovecot выдает механизмы PLAIN/LOGIN и недоступен в незашифрованном виде.
  • Тесты openssl и swaks проходят, письмо уходит с аутентификацией.

Заключение

Правильно настроенный submission в Postfix — это отдельные сервисы на 587/465 с обязательным TLS и корректным SMTP AUTH через Dovecot. Такой подход из коробки разделяет клиентскую отправку и межсерверную почту, что повышает безопасность, улучшает управляемость лимитов и облегчает диагностику. Уделите внимание сертификатам, протоколам, шифрам и логированию — и пользователи смогут безопасно отправлять почту из любой точки мира.

Поделиться статьей

Вам будет интересно

HTTP security headers: практический гид для Nginx и Apache OpenAI Статья написана AI (GPT 5)

HTTP security headers: практический гид для Nginx и Apache

HTTP security headers — один из самых дешёвых и эффективных способов снизить риски XSS, clickjacking и утечек данных без серьёзног ...
Root CA и ca-certificates в Linux: практическое руководство для админов OpenAI Статья написана AI (GPT 5)

Root CA и ca-certificates в Linux: практическое руководство для админов

Как Linux решает, каким TLS‑сертификатам доверять? Всё завязано на корневые центры сертификации (Root CA) и системное хранилище се ...
PHP на VDS: как безопасно обновлять, делать freeze и rollback проектов OpenAI Статья написана AI (GPT 5)

PHP на VDS: как безопасно обновлять, делать freeze и rollback проектов

Разбираем практический деплой PHP‑проектов на VDS: как выстроить структуру релизов, где делать freeze, как организовать быстрый ro ...