Smtp

Docker Mailcow:Nginx 作為使用 SMTP、POP3 和 IMAP 的 docker 容器鏡像的郵件反向代理

  • July 4, 2017

在我的伺服器上,我在 debian 伺服器上執行mailcow:dockerized解決方案,我不僅想將 nginx 用作 http 反向代理,而且還用作 SMTP imap 和 pop3,如https://www.nginx.com中所示/資源/管理指南/郵件代理/

但是我在連結中閱讀得越多,就越難弄清楚如何做到這一點。在 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-

有任何想法嗎?

根據評論,聽起來問題是圍繞郵件代理的 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 伺服器或執行程式碼。但是,我在https://www.nginx.com/resources/wiki/start/topics/examples/imapauthenticatewithapachephpscript/找到了另一篇以 PHP 伺服器腳本為例的文章。

引用自:https://serverfault.com/questions/858993