我的公共服务器接受流量,并使用 iptables PREROUTING 规则将其中继到网络上的其他机器。我最近在 192.168.1.10 添加了一台邮件服务器,并制定了其 iptables 规则以接受端口 25 流量。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
在netstat -nat
邮件服务器上,我看到它监听:25
在我的公共机器上,我添加了一个
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A PREROUTING -i eth1 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.1.10:25
规则,但它不听从 :25。我的大学不允许通过 :25 进入其网络,因此当我本地远程登录时,我收到拒绝连接错误。大学的中继邮件服务器应该将电子邮件转发到[电子邮件保护]到我的邮件服务器(在:25),但连接失败
----- Transcript of session follows -----
<[email protected]>... Deferred: Connection refused by site.uni.tld.
Warning: message still undelivered after 4 hours
Will keep trying until message is 2 weeks old
Final-Recipient: RFC822; [email protected]
Action: delayed
Status: 4.4.1
Remote-MTA: DNS; site.uni.tld
知道为什么吗?DNS 记录很好,并且已转移到 uni 中继服务器。
答案1
iptables PREROUTING 规则不会显示在标准 netstat 列表中,因为在 NAT 模式下,它在内核级别运行,因此不会注册为正在监听的进程。诊断此问题的最佳方法是监控该机器上端口 25 上的所有流量,以查看它如何根据您制定的规则运行;
tcpdump -nn -i eth0 port 25
(替换eth0
为相关接口名称)。这将向您显示所有进入本地端口 25 或出站到远程主机端口 25 的流量(因此您可以从两个方向查看)。如果流量没有顺利发送,则您的 iptables 规则已损坏,需要仔细检查。如果是,则问题出在远程主机上。
编辑:忘记添加您需要在 POSTROUTING 中设置 MASQUERADE 链:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
这将允许您的内部设备与外界进行通信并回复其客户端。