ошибка аутентификации при проксировании smtp

Maxim Dounin mdounin на mdounin.ru
Пт Май 2 14:19:12 UTC 2025


Hello!

On Fri, May 02, 2025 at 03:50:10PM +0300, Юрий Ястребов via nginx-ru wrote:

> Добрый день, уважаемые коллеги!
> Я тестирую модуль mail и столкнулся с ситуацией некорректного проксирования команды AUTH в smtp сессии.
> Я хотел бы понять: это ожидаемое поведение или я что-то делаю неправильно?
> Сервер smtp: postfix 3.7.11, прокси: nginx 1.26.3
>  
> Вот мой конфиг контекста mail:
>  
>   mail {
>       auth_http localhost/auth;
>       proxy_pass_error_message on;
>       xclient off;
>       starttls off;
>  
>       server {
>           listen           465 ssl;
>           protocol         smtp;
>           smtp_auth        login plain cram-md5;
>           proxy_smtp_auth  on;
>           proxy_protocol   on;
>           ssl_certificate     /etc/ssl/certs/ssl-cert-snakeoil.pem;
>           ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
>       }
>   }
>  
> Для аутентификации используется статическая заглушка:
>  
>   location = /auth {
>       add_header Auth-Status OK;
>       add_header Auth-Server 192.168.0.104;
>       add_header Auth-Port   10025;
>       return 204;
>   }
>  
> При взаимодействии smtp клиента через прокси возникает ошибка аутентификации, вот кусок лога:
> ----
> 2025-05-02T15:33:20.716305+03:00 mail-smtp postfix/smtpd[7539]: match_list_match: 192.168.0.101: no match
> 2025-05-02T15:33:20.716396+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-mail.yyv83.dynv6.net
> 2025-05-02T15:33:20.716446+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-PIPELINING
> 2025-05-02T15:33:20.716496+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-SIZE 10240000
> 2025-05-02T15:33:20.716551+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-ETRN
> 2025-05-02T15:33:20.716622+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-STARTTLS
> 2025-05-02T15:33:20.716682+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-ENHANCEDSTATUSCODES
> 2025-05-02T15:33:20.716737+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-8BITMIME
> 2025-05-02T15:33:20.716785+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-DSN
> 2025-05-02T15:33:20.716837+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250-SMTPUTF8
> 2025-05-02T15:33:20.716927+03:00 mail-smtp postfix/smtpd[7539]: > mail-client.yyv83[192.168.0.101]: 250 CHUNKING
> 2025-05-02T15:33:20.716985+03:00 mail-smtp postfix/smtpd[7539]: smtp_stream_setup: maxtime=300 enable_deadline=0 min_data_rate=0

[...]

> Если клиент взаимодейтсвует с сервером напрямую, то все работает корректно, вот часть лога:
> ---
> 2025-05-02T14:58:39.796402+03:00 mail-smtp postfix/smtps/smtpd[6781]: match_list_match: 192.168.0.101: no match
> 2025-05-02T14:58:39.796459+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-mail.yyv83.dynv6.net
> 2025-05-02T14:58:39.796548+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-PIPELINING
> 2025-05-02T14:58:39.796659+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-SIZE 10240000
> 2025-05-02T14:58:39.796768+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-ETRN
> 2025-05-02T14:58:39.796847+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-AUTH PLAIN LOGIN
> 2025-05-02T14:58:39.796935+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-ENHANCEDSTATUSCODES
> 2025-05-02T14:58:39.797086+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-8BITMIME
> 2025-05-02T14:58:39.797165+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-DSN
> 2025-05-02T14:58:39.797227+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250-SMTPUTF8
> 2025-05-02T14:58:39.797331+03:00 mail-smtp postfix/smtps/smtpd[6781]: > mail-client.yyv83[192.168.0.101]: 250 CHUNKING
> 2025-05-02T14:58:39.797412+03:00 mail-smtp postfix/smtps/smtpd[6781]: smtp_stream_setup: maxtime=300 enable_deadline=0 min_data_rate=0

[...]

Судя по логам - у вас аутентификация в postfix'е разрешена только 
через SSL (smtpd_tls_auth_only = yes).  Клиент ходит через SSL и у 
него, соответственно, работает.  А поскольку nginx к почтовым 
бэкендам ходит без шифрования - ему аутентификацию не разрешают.

Лечить, соответственно, проще всего на стороне postfix'а, либо 
вообще убрав запрет на аутентификацию без SSL, либо 
сконфигурировав в master.cf отдельный smtpd-сервис для nginx без 
такого запрета.

Если сеть не доверенная и нужно таки шифровать соединения к 
почтовым бэкендам - то можно в nginx'е сделать дополнительное 
проксирование через модуль stream, и там включить шифрование 
соединений к бэкенду (proxy_ssl on).

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru