我遇到的问题是无法从家庭网络连接到 exim4 SMTP 服务器:
$ telnet -4 example.com 25
Trying 1.2.3.4...
telnet: connect to address 1.2.3.4: Connection refused
telnet: Unable to connect to remote host
netstat
服务器上的命令告诉我 exim4 正在监听端口 25,包括 IPv4 和 IPv6。我启动tcpdump
服务器检查请求是否到达服务器,结果什么都没显示。我感到很困惑,最后删除了所有iptables
规则,如下所述这里。不过,我还是明白了连接被拒绝错误。
Wireshark 告诉我,服务器用 RST/ACK 响应我的 telnet 请求,这意味着端口已关闭。但是,如果我从家庭网络以外的任何地方连接到服务器,它都可以正常工作。
我已检查该请求确实离开了我的本地网关。
所以现在我没主意了。什么可能导致这个请求被拒绝?由于tcpdump
没有显示任何内容并且我收到了 RST/ACK,因此它一定处于非常低的水平,但我无法想象除了 iptables 之外还有什么可以阻止传入请求 - 尤其是因为这似乎只发生在来自我的家庭 IP 的包中。
答案1
确保检查另一端的主机是否可以 ping 通。检查后尝试 ping 通它并设置
tcpdump -ni any icmp
在 Exim 服务器上。
您应该能够确认 ping 操作是否正确,并且服务器端 iptables 中的地址是否正确。
如果 Exim 服务器上有其他服务,那么也尝试 telnet 到这些服务,例如端口 80 上的 HTTP,或类似的东西。如果成功,您就会知道您已经接近目标,如果没有,请仔细检查防火墙规则,并检查它们是否已插入前这降低(实际上拒绝在这种情况下,正如 telnet 所说)规则,否则它们将永远没有机会工作。
要在 iptables 中的 0 位置添加规则,请使用
iptables -I INPUT -p tcp --dport 25 -s 5.6.7.8 -j ACCEPT
代替
iptables -A INPUT -p tcp --dport 25 -s 5.6.7.8 -j ACCEPT
其中5.6.7.8应该是您在 tcpdump 上使用 ICMP 数据包或任何类型的 whatsmyip 站点上看到的地址。
如果其他服务正常运行,而端口 25 仍然无法使用,则请注意某些ISP故意阻止 TCP 端口 25 以减少网络上的垃圾邮件,因此您可能被迫采取以下任一措施:
- 联系你的 ISP 并请求解除你 IP 上该端口的禁令
- 配置 Exim 在另一个端口上工作(我建议使用加密的端口 465,但未加密的端口 587 非常常用于绕过此类防火墙)
- 使用 VPN 建立到 Exim 服务器的隧道并通过它路由流量