web-dev-qa-db-ja.com

Docker Mailcow:SMTP、POP3、およびIMAPを使用したDockerコンテナイメージへのメールリバースプロキシとしてのNginx

私のサーバーでは、debianサーバーで mailcow:dockerized ソリューションを実行しており、nginxをhttpリバースプロキシとしてだけでなく、SMTPimapおよび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-

何か案は?

2

コメントによると、質問はメールプロキシの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)を与える別の記事を見つけました/

1
Andy Shinn