使用 Linux 命令行通过端口 80 发送电子邮件

使用 Linux 命令行通过端口 80 发送电子邮件

我有一台服务器,它不允许发送外发电子邮件或访问任何名称服务器。

它有一个 http 代理,允许它访问其他服务器,并且我可以通过在 hosts 文件中添加的 ip 或主机名执行 wget 请求。

我尝试制定一条 NAT 规则,将所有发往端口 25 的流量重定向到端口 80,但没有成功。

在我这样的情形下,有没有办法通过命令行发送电子邮件?我需要它让服务器根据我的一些 cron 作业自动发送电子邮件。

答案1

是也不是。

当然可以让 MTA 通过非标准端口进行 SMTP 通信,但前提是另一端的服务器期待你会发现没有人会在端口 80 上监听 SMTP– 因此您的服务器将花费大部分时间尝试与某人的 Apache 通信。对于服务器到服务器的邮件交换 (MX),它是端口 25,故事结束。

所以你不能只是更改端口。相反,不是直接连接到收件人的邮件服务器(从 MX 记录),你的 MTA 需要中继所有邮件都通过配置为在端口 80 上接受 SMTP 的特定服务器。


但做相对容易,只要你有第二台服务器允许发送邮件。在那里安装 MTA(例如 OpenSMTPD 或 Postfix),将其配置为监听端口 80 并信任您的“源”服务器的 IP 地址以进行中继。(或者,与 IP 白名单相比,使用 SMTP 用户名/密码身份验证会更好。)

这是一个(未经测试的)OpenSMTPD 示例:

table relay-in-ip { "12.34.56.78" }
listen on 0.0.0.0 port 80 tls-require
listen on :: port 80 tls-require
accept from source <relay-in-ip> for any relay

同样,对于经过身份验证的 SMTP:

table relay-in-auth { "someuser"="somepassword" }
listen on 0.0.0.0 port 80 tls-require auth <relay-in-auth> tag AUTHED
listen on :: port 80 tls-require auth <relay-in-auth> tag AUTHED
accept tagged AUTHED from any for any relay

(确保确实测试中继服务器——如果它允许整个互联网在未经身份验证的情况下中继消息,那就太糟糕了™。

一旦完成设置,通常只需在“源”服务器上进行一次设置即可中继所有邮件 - 根据 MTA,该选项可能名为“中继主机”或“智能主机”,并且它几乎总是接受主机:端口规范:

accept for any relay via "tls://relay.example.com:80"

如果需要身份验证:

table relay-out-auth { "foo"="someuser:somepassword" }
accept for any relay via "tls+auth://[email protected]:587" auth <relay-out-auth>

相关内容