![debian - iptables 不适用于允许一个特定端口](https://linux22.com/image/128916/debian%20-%20iptables%20%E4%B8%8D%E9%80%82%E7%94%A8%E4%BA%8E%E5%85%81%E8%AE%B8%E4%B8%80%E4%B8%AA%E7%89%B9%E5%AE%9A%E7%AB%AF%E5%8F%A3.png)
我有三个虚拟机:A、B 和 C,它们都运行在 debian 上。我已经设置 C 在 A 和 B 之间路由流量。另外 C 有两个接口:enp0s3
和enp0s8
,不确定在这种情况下它是否重要。路由工作正常。
但现在我想在路由器上设置 iptables 以阻止除发送到 8080 端口的请求之外的所有传入请求。
这是我所做的:
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT
但是,如果我尝试使用 A 从 A 连接到 B 上的任何端口(包括 8080)nc {host} {port}
,我的输入不会从 A 转换到 B。
我也尝试过,反之亦然:
iptables -P FORWARD ACCEPT
iptables -A FORWARD -p tcp ! --dport 8080 -j DROP
但它也不起作用。
当我检查输出时,链iptables -L -v
中接受了一些数据包FORWARD
。
答案1
iptables -A FORWARD -p tcp --dport 8080 -j ACCEPT
此规则将允许转发前往端口 8080 的所有数据包。但是,不会转发来自端口 8080 的数据包(对 SYN 数据包的响应),除非发出请求的端口也是端口 8080。正如一条评论中提到的,情况很可能并非如此!你需要第二条规则:
iptables -A FORWARD -p tcp --sport 8080 -j ACCEPT
该规则允许转发来自端口 8080 的所有数据包
作为建议,如果您的设置需要更多安全性,我会将计算机的 IP 地址添加到规则中,就像使用这 2 条规则一样,只要源端口是 8080,某人就可以与不同的端口通信。
所以我的最终规则是:
iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEA -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEA -j ACCEPT
iptables -A FORWARD -p tcp --sport 8080 -s IPOFMACHINEB -j ACCEPT
iptables -A FORWARD -p tcp --dport 8080 -d IPOFMACHINEB -j ACCEPT
由于您没有提供 ips,因此您必须替换它们。