了解你的规则

了解你的规则

我制定了这个规则:

-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j internet
-A internet -j MARK --set-xmark 0x63/0xffffffff

捕获端口 80 上的传入流量并将其发送以进行标记。它可以工作,但现在我想编辑它以捕获除 53(DNS)、DHCP 服务端口和其他一些端口之外的所有端口。在我的 iptables 下,我有

-A PREROUTING -i vboxnet0 -p tcp -m mark --mark 0x63 -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1

它捕获所有带有标记且发往端口 80 的 tcp 流量,并将其 DNAT 到本地 IP。我想编辑它以包括除 3(DNS)、DHCP 服务端口和其他一些端口之外的所有端口。

一些好的指示代替对两个规则集中第一个 -m 和第二个 -m 之间差异的小解释也可以让我走上正确的轨道。

答案1

了解你的规则

像大多数事情一样,了解防火墙规则如何工作的第一步是检查页面man( man iptables)。在man页面中您会发现:

-m, --match 匹配

指定要使用的匹配项,即测试特定属性的扩展模块。这组匹配构成了调用目标的条件。匹配按照命令行上指定的方式从头到尾进行评估,并以短路方式工作,即如果一个扩展产生错误,评估将停止。

在页面底部附近,man您还会发现:

匹配和目标扩展

iptables 可以使用扩展数据包匹配和目标模块。 iptables-extensions(8) 联机帮助页中提供了这些内容的列表。

然后,该页面将为您提供有关您的选项实际用途的iptables-extensions man具体信息。-m那里的一些小片段:

标记

[!] --标记值[/掩码]

...

TCP协议

[!] --destination-port,--dport 端口[:端口]

...

DNAT

该目标仅在 nat 表、PREROUTING 和 OUTPUT 链以及仅从这些链调用的用户定义链中有效。它指定应修改数据包的目标地址(并且此连接中的所有未来数据包也将被破坏),并且应停止检查规则。它需要以下选项:

--to-destination [ipaddr[-ipaddr]][:端口[-port]]

...

标记

该目标用于设置与数据包关联的 Netfilter 标记值。例如,它可以与基于 fwmark 的路由结合使用(需要 iproute2)。如果您打算这样做,请注意需要在 mangle 表的 PREROUTING 链中设置该标记以影响路由。标记字段的宽度为 32 位。

--set-xmark 值[/掩码]

简单来说,-moptions 就是将匹配的选项添加到iptables.但该man页面还列出了一些非标准目标(包括DNAT您正在使用的目标)。


该怎么办

现在,将所有这些放在一起,我假设您正在使用的表是nat唯一适用于DNAT目标的表。

标记交通似乎也没有必要。它只是被标记,以便您可以nat处理数据包,但您可以只nat处理数据包,而不是一开始就对其进行标记。

例如:

-A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.56.1

您可以指定多个规则来覆盖多个端口,还可以使用 指定端口范围[port]:[port],或使用 指定负匹配!

例如,要将规则应用于除53(domain) 和22(ssh) 之外的所有端口,您可以执行以下操作:

-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 53 -j DNAT --to-destination 192.168.56.1
-A PREROUTING -i vboxnet0 -p tcp -m tcp ! --dport 22 -j DNAT --to-destination 192.168.56.1

如果您想过滤掉很多端口,这可能会很麻烦,但这就是生活iptables。我建议检查/etc/services以获取端口映射列表,以便避免影响某些服务/协议。

相关内容