Answers:
使用该-p tcp
选项,tcp模块已经加载,因此它有点多余,并且不是必须使用该-m tcp
选项,我看不出使用此选项会使规则更安全的任何原因。
请参阅iptables手册页以获得更好的理解和比较:
-p,-protocol [!]协议
规则或要检查的数据包的协议。指定的协议可以是tcp,udp,icmp或所有协议之一,也可以是代表这些协议之一或不同协议的数字值。还允许/ etc / protocols中的协议名称。一个 ”!” 协议反转测试之前的参数。数字零等于全部。协议全部将与所有协议匹配,并且在省略此选项时将其作为默认值。
...
比赛扩展
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起可用。
OP的另一个问题:我不明白-m匹配什么。什么弦 -m tcp匹配什么?它试图在哪里找到“ tcp”一词?
答:-m
是为了匹配模块名称而不是字符串。通过使用特定的模块,您可以获得某些匹配的选项。请参阅上面的cpu模块示例。随着-m tcp
模块tcp被加载。tcp模块允许某些选项:--dport, --sport, --tcp-flags, --syn, --tcp-option
在iptables规则中使用。但是使用-p tcp
已经启用的tcp模块,这就是为什么即使不使用也可以使用那些选项的原因-m tcp
。希望它能消除您的所有困惑。
-m
option实际上是用于加载的extension modules
,它提供了额外的选项。例如,请参阅我的更新答案和链接。
-m tcp
选择使用它。--dport
是tcp模块的一部分,-p tcp
仅可使用。请再次参考我的答案。