如何将端口 25 上的所有本地 SMTP 请求转发到端口 587 上的远程 SMTP 服务器

如何将端口 25 上的所有本地 SMTP 请求转发到端口 587 上的远程 SMTP 服务器

我正在尝试解决一个庞大程序的问题,由于某种原因,即使指定了端口 587,该程序也只能通过端口 25 发送电子邮件。

这个答案,有人建议使用 windows 命令netsh

netsh interface portproxy add v4tov4 listenport=25 listenaddress=127.0.0.1 connectport=587 connectaddress=%uFEFF%uFEFF<ipaddress of the real email server>

基本上,它只是改变 Windows IP 规则,以便任何时候通过端口 25 连接到 127.0.0.1,它都会将其转发到远程电子邮件服务器的端口 587。

我已经看到了一些iptables接近的例子,但我无法找到一个完美的转发到偏僻的电子邮件服务器。大多数 iptable 示例仅用于本地机器内的转发。如果可能的话,我也想使用带有域名的 iptables。Postfix 有点烦人,因为它是一个庞大的程序,而实际上,在很多服务器上,这个 ip 规则对我来说会更好用

TL;DR 如果有人可以帮忙,我想设置一个 IP 规则来转发如下:

Input domain: 127.0.0.1
Input port: 25
Output domain: smtp.gmail.com 
Output port: 587

这对于我的其他一些项目也很有用。

编辑:这是我尝试过的命令:

 sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to-destination 169.47.148.173:587 # The 169 ip is for smtp.sendgrid.net
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -F

我知道这些规则是有效的,因为我可以用 iptables nat 命令列出它们。iptables -t nat -nvL

但是当我尝试通过这个愚蠢的程序发送电子邮件时,指定主机127.0.0.1和端口 25,仍然会失败。我也指定了 UDP 转发规则,但仍然失败。

相关内容