Docker Mailcow:使用 SMTP、POP3 和 IMAP 将 Nginx 作为 docker 容器镜像的邮件反向代理

Docker Mailcow:使用 SMTP、POP3 和 IMAP 将 Nginx 作为 docker 容器镜像的邮件反向代理

在我的服务器上,我正在运行mailcow:dockerized在 Debian 服务器上的解决方案,我想使用 nginx 不仅作为 http 反向代理,还想将其用作 SMTP imap 和 pop3,如https://www.nginx.com/resources/admin-guide/mail-proxy/

但是我越读这个链接,就越难弄清楚如何做到这一点。在 http 中,如何做到这一点很明显:

 server {
   listen 80;
   server_name mail.example.tk;

   location /.well-known {
        proxy_pass http://127.0.0.1:8080/.well-known ;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 100m;

   }

   location / {
        rewrite ^(.*) https://$server_name$1 permanent;
   }

}

server {
 listen 443 ssl;
 server_name mail.example.tk;

 ssl_certificate     /opt/docker-mailcow/data/assets/ssl/cert.pem;
 ssl_certificate_key /opt/docker-mailcow/data/assets/ssl/key.pem;
 ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
 ssl_ciphers         HIGH:!aNULL:!MD5;


 location / {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 100m;
 }

}

但是使用 smtp、pop3 和 imap 该怎么做呢?请记住,docker 镜像与 nginx 在同一台服务器上运行,它们是:

827c20cee898        mailcow/dovecot:1.0     "/docker-entrypoin..."   50 minutes ago      Up 50 minutes             24/tcp, 10001/tcp, 0.0.0.0:2110->110/tcp, 0.
76a977a8064e        mailcow/postfix:1.0     "/bin/sh -c 'exec ..."   50 minutes ago      Up 50 minutes             588/tcp, 0.0.0.0:2525->25/tcp, 0.0.0.0:2465-

有任何想法吗?

答案1

根据评论,问题似乎与邮件代理的 HTTP 身份验证服务器有关。指南的部分内容谈到了这一点:

客户端发出的每个 POP3/IMAP/SMTP 请求都将首先在外部 HTTP 身份验证服务器上或通过身份验证脚本进行身份验证。对于 NGINX 邮件服务器代理来说,拥有身份验证服务器是必需的。您可以根据基于 HTTP 协议的 NGINX 身份验证协议自行创建服务器。

它链接到http://nginx.org/en/docs/mail/ngx_mail_auth_http_module.html#protocol这进一步说明了请求和响应应该是什么样的。它给出了以下请求示例:

GET /auth HTTP/1.0
Host: localhost
Auth-Method: plain # plain/apop/cram-md5/external
Auth-User: user
Auth-Pass: password
Auth-Protocol: imap # imap/pop3/smtp
Auth-Login-Attempt: 1
Client-IP: 192.0.2.42
Client-Host: client.example.org

这是您的auth_http服务器将收到的内容。然后,您的auth_http服务器将需要响应以下内容:

HTTP/1.0 200 OK
Auth-Status: OK
Auth-Server: 198.51.100.1
Auth-Port: 143

来自服务器的响应包含请求将代理到的服务器 IP 和端口。

不幸的是,他们没有提供任何示例 HTTP 服务器或可运行的代码。不过,我在另一篇文章中找到了 PHP 服务器脚本作为示例,网址为https://www.nginx.com/resources/wiki/start/topics/examples/imapauthenticatewithapachephpscript/

相关内容