debian - iptables 不适用于允许一个特定端口

debian - iptables 不适用于允许一个特定端口

我有三个虚拟机:A、B 和 C,它们都运行在 debian 上。我已经设置 C 在 A 和 B 之间路由流量。另外 C 有两个接口:enp0s3enp0s8,不确定在这种情况下它是否重要。路由工作正常。

但现在我想在路由器上设置 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,因此您必须替换它们。

相关内容