![iptables将端口转发到另一个IP并添加访问限制](https://linux22.com/image/226525/iptables%E5%B0%86%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AAIP%E5%B9%B6%E6%B7%BB%E5%8A%A0%E8%AE%BF%E9%97%AE%E9%99%90%E5%88%B6.png)
我已将以下规则添加到 iptables 中。
-A PREROUTING -p tcp -m tcp --dport 3307 -j DNAT --to-destination 192.168.80.45:330
如果我想在3307端口添加一条规则,例如拒绝123.5.0.2IP地址访问3307端口,我该如何配置iptables规则
答案1
人们可能会试图阻止 NAT 的发生,因此最终数据包不会被转发,而是保留在主机上,如果没有侦听服务,连接尝试将被重置。这违背了防火墙部分之间的角色分离(筛选表:默认)和 NAT 部分(纳特部分)。
只需添加(或插入-I
而不是插入-A
,具体取决于已存在的规则集)一个过滤规则,以防止转发的从 123.5.0.2 到达 192.168.80.45:330 的流量 [原文如此]:
iptables -A FORWARD -s 123.5.0.2 -d 192.168.80.45 -p tcp --dport 330 -j DROP
请注意,DNAT 发生在路由之前,因此过滤器/FORWARD 链看到的部分已经是目标 192.168.80.45 和 TCP 端口 330 [原文如此],而不是 3307。当然,规则可以变得更宽,并通过不声明来拒绝每个目标端口协议和目标端口或任何目标(不说明目标地址)。
还有很多其他方法可以做到这一点。例如,如果在过滤规则中显示原始端口 3307 而不是新的目标端口 330 很重要(例如:因为想要单独重写 NAT 规则,因此不必在两个位置编辑目标),可以通过查询连线像这样:
iptables -A FORWARD -s 123.5.0.2 -m conntrack --ctproto tcp --ctorigdstport 3307 -j DROP
这意味着:使用 TCP 协议和原始目标端口(在可能的 DNAT 转换之前)3307 丢弃来自 123.5.0.2 的转发流量。