带有 -m 和 -p 参数的 iptables

Sam*_*mul 8 firewall iptables centos

我的 iptables 中有这个规则:

iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP
Run Code Online (Sandbox Code Playgroud)

我真的需要“-m tcp”吗?我已经在使用“-p tcp”,那么我应该使用“-m tcp”来更安全吗?

Dia*_*ond 9

使用该-p tcp选项,tcp 模块已经加载,因此它有点多余,不是必须使用该-m tcp选项,我看不出有任何理由使用此选项会使规则更安全。

请参阅iptables 手册页以获得更好的理解和比较:

-p, --protocol [!] 协议

要检查的规则或数据包的协议。指定的协议可以是 tcp、udp、icmp 或 all 之一,也可以是数值,表示这些协议之一或不同的协议。还允许来自 /etc/protocols 的协议名称。一种 ”!” 协议反转测试之前的参数。数字零等价于所有。Protocol all 将匹配所有协议,省略此选项时将作为默认值。

...

匹配扩展

iptables 可以使用扩展包匹配模块。它们以两种方式加载:隐式加载,当指定 -p 或 --protocol 时,或使用 -m 或 --match 选项,后跟匹配的模块名称;在这些之后,各种额外的命令行选项变得可用,具体取决于特定的模块。您可以在一行中指定多个扩展匹配模块,并且可以在指定模块后使用 -h 或 --help 选项来接收特定于该模块的帮助。

有关可用选项列表,请-p tcp参见此处:

http://ipset.netfilter.org/iptables-extensions.man.html#lbCF

如上所述,使用-m选项可以添加扩展模块,然后可以使用更多匹配选项。例如CPU 模块

中央处理器

[!] --cpu 数量

匹配处理此数据包的 CPU。cpus 编号从 0 到 NR_CPUS-1 可与 RPS(远程数据包转向)或多队列 NIC 结合使用,以在不同队列上传播网络流量。

例子:

iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 0 -j REDIRECT --to-port 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -m cpu --cpu 1 -j REDIRECT --to-port 8081

自 Linux 2.6.36 起可用。

iptables 扩展的完整列表


来自 OP 的附加问题:我不明白 -m 匹配什么。什么字符串?-m tcp 匹配什么?它试图在何处找到“tcp”这个词?

答:-m用于匹配模块名称而不是字符串。通过使用特定模块,您可以获得匹配的某些选项。请参阅上面的 cpu 模块示例。随着-m tcp模块 tcp 被加载。tcp 模块允许某些选项:--dport, --sport, --tcp-flags, --syn, --tcp-option在 iptables 规则中使用。但是使用-p tcp已经启用了 tcp 模块,这就是为什么即使不使用-m tcp. 希望它能消除你所有的困惑。