Зачем нужен отдельный 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 и практики доставляемости».
Базовая настройка 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.

Настраиваем 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

Маршрут для пользователей vs межсерверной почты
Отделение submission даёт гибкость:
- Отдельные лимиты скорости и объёма исходящих писем для пользователей.
- Разные фильтры и пометки для антиспама на исходящем потоке.
- Упрощённая диагностика: лог
postfix/submissionиpostfix/smtpsотделены отpostfix/smtpdна 25 порту.
Типичные ошибки и как их избежать
- AUTH включён на 25 порту. Исправление:
smtpd_sasl_auth_enable = noвmain.cf, включать только в блокахsubmission/smtpsmaster.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. Такой подход из коробки разделяет клиентскую отправку и межсерверную почту, что повышает безопасность, улучшает управляемость лимитов и облегчает диагностику. Уделите внимание сертификатам, протоколам, шифрам и логированию — и пользователи смогут безопасно отправлять почту из любой точки мира.


