带有 -m 和 -p 参数的 Iptables

带有 -m 和 -p 参数的 Iptables

我的 iptables 中有这样的规则:

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

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

答案1

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

请参阅iptables 手册页为了更好地理解和比较:

-p, --protocol [!] 协议

要检查的规则或数据包的协议。指定的协议可以是 tcp、udp、icmp 或 all,或者它可以是一个数值,代表这些协议之一或其他协议。也可以使用 /etc/protocols 中的协议名称。协议前的“!”参数会反转测试。数字零相当于全部。协议全部将与所有协议匹配,并在省略此选项时作为默认值。

...

匹配扩展

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

可用选项的列表请-p tcp参见此处:

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

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

中央处理器

[!] --cpu编号

匹配处理此数据包的 CPU。CPU 编号从 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 tcptcp 已加载。tcp 模块允许--dport, --sport, --tcp-flags, --syn, --tcp-option在 iptables 规则中使用某些选项:。但使用-p tcp已经启用了 tcp 模块,这就是为什么即使不使用 仍然可以使用这些选项的原因-m tcp。希望它能消除您的所有困惑。

相关内容