使用-m和-p参数的iptables

我在我的iptables中有这个规则:

iptables -A INPUT -p tcp -m tcp --dport 9191 -j DROP 

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

使用-p tcp选项,tcp模块已经被加载了,因此它有点多余,不需要使用-m tcp选项,我也没有看到为什么使用这个选项会使规则更安全。

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

-p, – 协议[!]协议

规则的协议或要检查的数据包的协议。 指定的协议可以是tcp,udp,icmp或all之一,也可以是数字值,表示这些协议之一或不同的协议。 / etc / protocols中的协议名称也是允许的。 一个 ”!” 协议反转testing之前的参数。 数字零相当于全部。 协议全部将与所有协议匹配,并且在省略此选项时被视为默认协议。

匹配扩展

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结合使用,以将networkingstream量分散到不同的队列中。

例:

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-extensions的完整列表。


OP的另外一个问题: 我不明白-m匹配什么。 什么string? -m tcp匹配什么? 它试图find“tcp”这个词在哪里?

答: -m是匹配模块名称而不是string。 通过使用特定的模块,您可以获得某些匹配的选项。 看看上面的cpu模块示例。 用-m tcp加载模块tcp。 tcp模块允许使用某些选项:– --dport, --sport, --tcp-flags, --syn, --tcp-option用于iptables规则。 但是使用-p tcp已经启用了tcp模块,这就是为什么即使不使用-m tcp也可以使用这些选项。 希望它清除你所有的困惑。