我拥有一些邮件用户,我想将他们从当前的邮件服务器转移到我的邮件服务器。我已将 perdition 设置为代理,这样我就可以代理 IMAP 和 POP 连接 - 并且我可以控制用于将他们引导到相应邮件服务器的 DNS。我无法访问旧邮件服务器。
邮件代理服务器运行的是Linux
不幸的是,我怀疑很多人都使用同一个 POP3 和 SMTP 服务器。
我想设置一个 SMTP 代理,这样我就可以在过渡期间无缝地向客户提供 SMTP 服务 - 无需开放邮件中继。Perdition 似乎不提供此解决方案。
是否有人知道一种解决方案,可以代理 SMTP 请求(包括 AUTH 请求)——理想情况下,能够映射哪些请求发送到哪个后端?[我没有尝试过 IPTables DNAT 规则——我怀疑这可能会起作用,但我失去了根据每个域/客户端对不同服务器进行身份验证的能力,这使得迁移变得更加困难]。
编辑
我尝试将 Dovecot 配置为导演/代理来代替 Perdition。这对于 IMAP 和 POP 来说很有效,但对于 SMTP 则不行 - 具体来说,它将根据用户名或域名进行身份验证 - 它不会根据 SMTP 服务器检查实际凭据。
答案1
对于 Postfix,请参阅 Andy Beverley 的文章SMTP 身份验证和 Postfix。
START=yes
MECHANISMS="rimap"
MECH_OPTIONS="imap.example.com"
我还将配置 postfix 以将其作为中继直接路由到您的新 SMTP 服务器。将新服务器的 IP 添加到“我的网络”并将中继主机设置为新的 smtp 服务器。
将其指向 imap 服务器所在的 dovecot 的 perdition 代理,它是 saslauthd 系统和 imap 之间的简单身份验证,因此您需要将 perdition 代理用作对 localhost 的非安全代理(或者只是阻止对 143 的外部访问,等待您的设置详细信息)
答案2
有没有人知道一个解决方案,它可以代理 SMTP 请求(包括 AUTH 请求)——理想情况下,能够映射哪些请求发送到哪个后端
从 Nginx 1.19.4 开始,Nginxmail
模块可以满足所有这些要求。
指示
关注官方“将 NGINX 配置为邮件代理服务器“。但只能
server { … }
为 SMTP 代理创建一个条目。proxy_smtp_auth on;
通过向您的服务器块添加指令来启用代理身份验证(手动的,相关答案)。这是在 Nginx 版本 1.19.4 中首次出现的功能。(请查看nginx -v
。例如,Ubuntu 20.04 仍具有 1.18.0。)运行Nginx HTTP 身份验证服务器。这是一个使用 Nginx 定义的特殊 HTTP 协议的小型服务器,它既可以用于身份验证,也可以将请求映射到不同的 SMTP 后端服务器。
HTTP 身份验证服务器选项
自定义服务器脚本。有示例在 Python 中,PHP, 或者Perl. 最适合简单情况,特别是当您只需要身份验证服务器来选择后端,同时通过 将身份验证外包给该后端时
proxy_smtp_auth on
。服务器和 SQL 数据库。对于更高级的用例,有Nginx 邮件认证 HTTP 服务器,用 Go 编写。它可以根据 SQL 数据库中的数据进行身份验证和后端选择。
Nginx 配置用于单一后端引用。最简单的情况是,您希望将每个客户端引向同一个后端服务器。这可以通过 Nginx 本身来实现(看)。(虽然这可能有效,但我发现很难调试。)
Nginx 配置用于身份验证和单一后端引用。如果您只需要身份验证和转介到单个后端服务器,您仍然可以使用 Nginx 本身来执行此操作。这使用 HTTP Basic Auth,将用户名和散列密码存储在文件中。(虽然这可能有效,但我发现很难调试。)
例子
完整的 Nginx 配置示例如下所示(未经测试,可能尚未完全发挥作用):
mail {
server_name smtp.example.com;
# Configure host and port of your Nginx HTTP Authentication server.
auth_http localhost:8278;
proxy_pass_error_message on;
starttls on;
ssl_certificate /data/cert/fullchain.pem;
ssl_certificate_key /data/cert/privkey.pem;
server {
listen 25;
listen 587;
listen 465 ssl;
protocol smtp;
smtp_auth login plain cram-md5;
proxy_smtp_auth on;
}
}
答案3
Stackoverflow 用户有同样的问题,并针对此场景创建了自己的解决方案:go-smtpproxy. 来自 README:
其目的是提供充当服务器的功能,以接收来自下游客户端的 SMTP 消息。这些 SMTP 消息被中继到上游服务器。
命令/响应交换以透明方式传递。