NGINX пересылает аутентификационные данные SMTP на следующий сервер? - PullRequest
0 голосов
/ 08 мая 2019

Использование возможностей ретрансляции SMTP NGINX, как описано здесь , для прокси на коммерческом SMTP-сервере, эффективно «белой меткой» адреса ретрансляции (включая сертификат) при сохранении аутентификации.

Настроил NGINX следующим образом:

mail {
    server_name smtp.proxy.mydomain.net;
    auth_http   127.0.0.1:9000/auth;
    proxy_pass_error_message on;
    xclient off;
    smtp_capabilities "8BITMIME" "STARTTLS" "PIPELINING" "ENHANCEDSTATUSCODES";
    starttls on;
    ssl_certificate     /etc/letsencrypt/live/smtp.proxy.mydomain.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/smtp.proxy.mydomain.net/privkey.pem;
    ssl_protocols       TLSv1.2;
    ssl_session_cache   shared:SSL:10m;

    server {
        listen    587;
        protocol  smtp;
        smtp_auth login plain;
    }
}

Сертификат используется NGINX, когда клиент запрашивает STARTTLS, а клиент (в моем случае swaks) отправляет учетные данные AUTH LOGIN в NGINX.

NGINX затем вызывает mail_auth_http_module OK. У меня есть простое приложение Python Flask, которое возвращает заголовки, указывающие, что аутентификация всегда принимается, и адрес сервера. Вы можете увидеть ответ сервера аутентификации на запрос curl здесь:

$ curl -v localhost:9000/auth
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9000 (#0)
> GET /auth HTTP/1.1
> Host: localhost:9000
> User-Agent: curl/7.61.1
> Accept: */*
> 
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/html; charset=utf-8
< Content-Length: 2
< Auth-Status: OK
< Auth-Server: 52.214.232.65
< Auth-Port: 587
< Server: Werkzeug/0.15.2 Python/3.6.8
< Date: Tue, 07 May 2019 23:10:29 GMT
< 
* Closing connection 0

Затем NGINX пытается выполнить дальнейшую доставку на сервер, как и ожидалось. Я вижу, что он соответствует правильной конечной точке сервера.

К сожалению, в моем случае сервер требует (и всегда будет требовать) те же учетные данные для входа, которые были предоставлены клиентом. В этот момент доставка завершается с ошибкой «5.7.1 Требуется авторизация», поскольку NGINX не предоставляет их дальше.

Я подозреваю, что NGINX предполагает, что, поскольку он вызвал модуль аутентификации, серверу не потребуются дополнительные учетные данные, и поэтому он их не предоставляет.

Есть ли способ заставить NGINX "пропустить" аутентификационные данные на сервере?

...