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