#Что означает ошибка
Relay access denied
Ошибки Postfix «554 5.7.1 Relay access denied» и «SMTP authentication failed» говорят, что сервер не разрешает пересылку почты клиенту: нет аутентификации, неверные smtpd_recipient_restrictions или mynetworks.
Нужно настроить SASL-аутентификацию.
Не открывайте open relay — это приведёт к блокировке сервера за спам.
Настройте mynetworks и включите SMTP-аутентификацию.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет аутентификацииSMTP. | Проявляется как «Relay access denied» или близкий по смыслу сбой. | Включите. |
| mynetworksНастройка. | Проявляется как «Relay access denied» или близкий по смыслу сбой. | Исправьте. |
| ДоменНе принимаем. | Проявляется как «Relay access denied» или близкий по смыслу сбой. | Добавьте. |
| ПортЗакрыт. | Проявляется как «Relay access denied» или близкий по смыслу сбой. | Откройте. |
#Пошаговое решение
- Проверьте конфигурациюАдминистратор Postfix открывает SSH-терминал на сервере и выполняет
postconf -n | grep -E "mynetworks|smtpd_(relay|recipient|sasl)_restrictions|smtpd_sasl_auth_enable". Сопоставьте время отказа 554 с журналом почты (journalctl -u postfixили/var/log/mail.log). Уточните, поступает письмо от внешнего получателя на ваш домен или пользователь пытается отправить сообщение наружу: это разные сценарии. - Включите SASLЕсли внешний пользователь отправляет через ваш SMTP на другой домен, проверьте, предусмотрена ли аутентификация на порту submission (обычно 587). В почтовом клиенте откройте настройки учётной записи → исходящий сервер SMTP, укажите адрес и учётные данные провайдера, порт 587 и STARTTLS по его инструкции. Не включайте анонимную пересылку и не добавляйте весь Интернет в
mynetworks. - Задайте ограничения получателейДля администратора: в конфигурации используйте штатные ограничения relay (
smtpd_relay_restrictions) с допуском аутентифицированных пользователей и разрешённых сетей, сохраняяreject_unauth_destination. Прежде чем менять Postfix, выполнитеpostconf -nи создайте копиюmain.cf; синтаксис зависит от версии и схемы SASL, поэтому не копируйте одиночные директивы из примера вслепую. - Включите порт 587 с TLSЕсли клиенты должны пользоваться портом 587, проверьте, включена ли служба
submissionв/etc/postfix/master.cf, выбран ли корректный сертификат TLS и доступен ли порт извне по разрешённым адресам. Черезsudo ss -ltnp | grep :587выясните, слушает ли порт сервер; включайте доступ через межсетевой экран только в соответствии с политикой организации. - Протестируйте отправкуПосле проверки синтаксиса
sudo postfix checkпримените корректную конфигурацию черезsudo postfix reload, а затем отправьте тестовое письмо с авторизованного клиента. В журнале проверьте успешную постановку в очередь и доставку; отдельно проверьте, что неавторизованный посторонний клиент всё ещё не может пересылать письма через сервер. Для проверки сswaksне помещайте пароль в историю команд или публичный отчёт.
#Диагностика
Проверьте конфигурацию: postconf -n | grep -E "smtpd_(recipient|sasl|relay)|mynetworks|myhostname". Журнал: /var/log/mail.log или journalctl -u postfix. «Relay access denied» значит, что получатель не в ваших доменах, а отправитель не аутентифицирован.
#Настройка аутентификации
В main.cf: smtpd_sasl_auth_enable = yes, smtpd_sasl_type = dovecot, smtpd_sasl_path = private/auth, smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination. В Dovecot включите сокет auth для Postfix. Включите TLS и порты 587/465 в master.cf (submission). Перезапустите: sudo systemctl restart postfix dovecot.
#Проверка
Тест: swaks --to user@example.com --from me@mydomain.ru --server mail.mydomain.ru:587 --auth LOGIN --auth-user me --tls (). Проверьте PTR, SPF, DKIM, DMARC на . Не добавляйте 0.0.0.0/0 в mynetworks.
postconf -n | grep -E "smtpd_(relay|recipient|sasl)|mynetworks"sudo postfix check# Только после изменения конфигурации: sudo postfix reloadsudo journalctl -u postfix -n 50 --no-pager