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