我正在使用 AWS,所有流量都通过 ASG 中的鱿鱼场路由到弹性 NAT 网关。我需要通过此路由将 smtp 端口 25/110 路由出去。然而对这个东西很陌生。我相信鱿鱼是http/s而不是电子邮件。如果每个私有节点都经过代理配置(例如不透明)以将流量路由到 Squid Farm。根据我的理解,Squid 不知道如何处理这个端口,是否需要更新鱿鱼盒上的 IPtables 以允许流量通过,实际上鱿鱼节点不参与其中,它只是通过 IPtables 完成,流量是路由到 NAT 网关?这个假设正确吗?
答案1
正如人们已经指出的,squid 处理 http/https 连接。但这不一定意味着您不能以这种方式代理邮件流量。我也遇到过类似的 SMTP 流量被阻止的问题,因此我设法构建一个解决方案来为我处理鱿鱼代理,然后让 postfix 继续进行 SMTP 中继本身。我不确定该解决方案是否适用于 pop,因为我仅在 SMTP 部分中成功使用了该解决方案。如果 pop 和 postfix 一样谦逊,那是无从得知的。
我已在以下位置添加了相同的说明https://www.tornevalls.se/2022/06/03/how-to-proxy-relay-smtp-over-squid-services-with-postfix-and-netcat/但由于网址往往会随着时间的推移而改变,我也会在这里添加详细信息:)
您需要的是 netcat 和一个可以启动代理连接第一部分的脚本。我还确保我的 smtp 中继在端口 443 上应答。通过这样做,我设法绕过了常规端口 25 阻塞。由于 squid 通常允许 http/https 流量,因此我确保 SMTP 中继通过使用这些端口像一个一样运行。像这样:
#!/bin/bash
cat <(echo "CONNECT SMTP.SERVER.IP:443 HTTP/1.0"; echo "") -|nc squid.server.host 3128
该脚本通过使用 netcat 发送 CONNECT 命令来确保与远程服务器建立代理连接。并发送额外的行以使鱿鱼代理继续连接。完成此操作后,我可以将其余工作留给 postfix,后者在此之后以交互方式接管。
现在我需要一个类似 inetd 的服务,但由于我不再使用 inetd,所以这是通过 systemd 完成的。首先,我设置了套接字。
/etc/systemd/system/proxysmtp.socket
[Unit]
Description=ProxySMTP Socket
[Socket]
ListenStream=1588
Accept=yes
[Install]
WantedBy=sockets.target
然后,我确保脚本可以作为服务执行:
/etc/systemd/系统/[电子邮件受保护]
[Unit]
Description=SMTP
Requires=proxysmtp.socket
[Service]
ExecStart=-/usr/local/sbin/smtp.sh
StandardInput=socket
DynamicUser=yes
ProtectHome=true
PrivateUsers=true
[Install]
WantedBy=multi-user.target
然后是时候激活该服务了:
systemctl daemon-reload
systemctl enable proxysmtp
systemctl start proxysmtp.socket
systemctl enable proxysmtp.socket
完成所有这些后,我成功配置 postfix 作为中继服务器连接到本地端口 1588:
/etc/postfix/main.cf
relayhost = 127.0.0.1:1588
重新加载 postfix 后,它将开始通过鱿鱼代理进行连接,而不是继续发送电子邮件。