使用 Iptables 在特定 tcp 端口上的网络接口(桥接端口)上过滤流量时出现问题

使用 Iptables 在特定 tcp 端口上的网络接口(桥接端口)上过滤流量时出现问题

我使用 iptables 作为防火墙来过滤流量。我想阻止某个 tcp 端口上网络接口上的流量(我正在端口 22 上进行测试)。网络接口是桥接端口,所以我使用 physdev 模块(我尝试过 -i 选项,但它不起作用)。当我编写规则而不指定任何端口时,所有流量都会成功过滤:

iptables -t mangle -A PREROUTING -m physdev --physdev-in IF_NAME -j DROP

但是当我指定端口时,它不起作用:

iptables -t mangle -A PREROUTING -m physdev --physdev-in IF_NAME -p tcp -m tcp --dport 22 -j DROP

我尝试过 mark 和 connmark 模块将规则一分为二,因此桥接口和 tcp 端口位于单独的规则中。没有运气。

一些说明:我在 Debian 10 上使用 iptables v1.8.2。我正在尝试过滤虚拟机的流量。我正在主机上编写规则。为虚拟机设置网络接口。如果我使用虚拟机的IP而不是网络接口,它就可以正常工作。

难道是因为网桥位于数据链路层而 tcp 端口位于传输层而无法工作吗?我个人认为这不是该规则不起作用的好借口。毕竟 iptables 工作在不同的网络层。

我的问题:

  1. (第一优先)是否可以使用 iptables 使该规则起作用?如果是的话怎么办,如果不是的话为什么?
  2. 使用 nftables 可以做到这一点吗?
  3. 您还想提及其他解决方案吗?

相关内容