#Симптомы и область применимости
Почтовый сервер доступен для соединений на TCP 25, но почтовая программа не может подключиться к порту 587. Порт 25 для межсерверного обмена не гарантирует включённую службу submission: это отдельный слушатель и отдельные сетевые правила.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Служба submission не включенаВ master.cf отключена строка submission или служба не запущена. | В ss есть порт 25, а 587 отсутствует | Проверьте master.cf и валидность конфигурации. |
| Доступ блокирует сетевое правилоБрандмауэр ОС, хостинга или облачная группа безопасности отсекает TCP. | Локально 587 отвечает, снаружи timeout | Сопоставьте локальный и внешний тест. |
| Клиент использует неправильный тип TLSНа 587 обычно требуется STARTTLS, а не немедленный TLS как на 465. | TCP есть, но TLS рукопожатие не проходит | Уточните настройки клиента и защитные параметры сервера. |
#Пошаговая диагностика и исправление
- 1. Уточните, что именно не работаетВ почтовой программе откройте настройки исходящего SMTP, запишите hostname, порт 587, метод защиты STARTTLS и время ошибки. «Connection timed out» отличается от «535 Authentication failed»: во втором случае доступ к порту обычно есть, искать нужно авторизацию.
- 2. Установите состояние слушающего процессаНа Linux-сервере выполните ss с правами чтения информации о процессах. Если есть 0.0.0.0:587 или [::]:587, служба слушает сеть; 127.0.0.1:587 доступна лишь локально. Не снимайте ограничения брандмауэра до установления источника отказа.
- Linux, чтениеLinux · Терминал (Bash)КомандаНужен sudoLinux, чтение. Наличие процесса на 25 не означает доступности 587.
sudo ss -ltnp | grep -E ":(25|587)\b"
- 3. Проверьте, включён ли submission у PostfixОткройте /etc/postfix/master.cf и найдите строку службы submission. Если она закомментирована или отсутствует в активной конфигурации, настройки main.cf сами по себе порт не откроют. Перед изменением сделайте резервную копию и проверьте назначение сервера.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаНужен sudoPostfix, просмотр master.cf средствами postconf; пустой ответ требует ручной проверки файла.
sudo postconf -M | grep '^submission/'
- 4. Проверьте TLS-режим сервераНа submission обычно включают обязательный STARTTLS и SMTP AUTH для почтовых клиентов. Не переносите настройку smtpd_tls_security_level=encrypt на публичный сервер на порту 25: это может нарушить входящую почту от обычных серверов.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаНужен sudoPostfix, только чтение переопределений; конкретные параметры зависят от вашей конфигурации.
sudo postconf -P | grep '^submission/'
- 5. Сравните локальную и внешнюю проверкиС почтового сервера выполните проверку соединения с localhost:587, затем с другого компьютера проверьте публичное DNS-имя. Если локально есть ответ, а снаружи timeout, ищите блокировку маршрута. На Windows для внешней проверки используйте PowerShell Test-NetConnection.
- OpenSSL на клиентском компьютере; замените доменLinux · Терминал (Bash)КомандаOpenSSL на клиентском компьютере; замените домен. Успех означает ответ TLS, не успешный SMTP AUTH.
openssl s_client -starttls smtp -connect mail.example.com:587 -servername mail.example.com </dev/null
- 6. Проверьте доступ только к нужному портуОткройте панель брандмауэра хостера и локальные правила Linux. Если сервер должен обслуживать внешних пользователей, разрешите входящий TCP 587 только там, где он действительно нужен, с сохранением остальных защит. Не открывайте все порты и не изменяйте SSH-правила ради SMTP.
- 7. Проверьте конфигурацию перед запуском слушателяПосле резервного копирования настройте строку submission для вашей реализации SASL, выполните postfix check. Примените штатную перезагрузку в окно обслуживания и посмотрите журнал на ошибки bind/address in use. Если порт уже занят другим сервисом, устраните конфликт, не выключая случайный процесс.Linux · Терминал (Bash)КомандаНужен sudoPostfix, проверка. Команда не открывает порт и не включает его сама.
sudo postfix check
- 8. Проверьте отправку и защиту от открытого ретранслятораПосле появления 587 установите защищённое подключение из внешнего клиента и отправьте одно письмо на собственный адрес с авторизацией. Затем убедитесь, что без SMTP AUTH почта на посторонний домен не ретранслируется. Не отключайте TLS или пароль ради успешного теста.
#Как убедиться, что проблема устранена
Порт 587 слушается на ожидаемом интерфейсе, снаружи проходит STARTTLS и авторизованная отправка, а неавторизованная пересылка третьим лицам закрыта. Порт 25 продолжает штатно принимать межсерверные сообщения.
#Если проблема осталась
Если ss показывает слушатель, а внешний тест всё равно не проходит, исследуйте брандмауэр облака, NAT и журнал сетевых блокировок. Если TLS проходит, но пароль отвергается, перейдите к отдельной диагностике SMTP AUTH.