好吧,我不确切知道如何提出这个问题,但我知道您可以使用关键字 flags 来指定要过滤的标记。
根据数据包过滤器的文档:
要让PF在评估规则期间检查TCP标志, flags关键字使用以下语法:
标志检查/掩码
标记任何面具部分告诉PF只检查 指定的标志和检查部分指定必须是哪个标志 标题中的“on”表示匹配发生。使用any关键字允许 要在标题中设置的任何标志组合。
将fxp0 proto tcp从任意端口传入任何端口ssh标志S / SA
从任何端口ssh传递fxp0 proto tcp由于标志S / SA设置为 默认情况下,上述规则是等效的,每个规则都通过 设置SYN标志的TCP流量,只查看SYN和 ACK标志。具有SYN和ECE标志的数据包将与上述匹配 规则,而具有SYN和ACK或仅ACK的数据包不会。
所以,我理解了这个例子以及为什么带有标志S和E的数据包可以通过(因为掩码SA不考虑E标志)以及为什么只带有Ack标志的数据包无法通过防火墙。
我不明白的是,如果标头S在数据包标题中“打开”,带有标志S和A的数据包无法通过规则S / SA。也许文档含糊不清?对不起,如果这是一个愚蠢的问题或英语被误解。
我想它只有在必须仅标志S时才能通过。 在集算术中会是这样的:
标题必须在标题中“打开” - > 标志与蒙面子集相关 [pf doc]
只有标题必须在标题中“打开” - > 标志是屏蔽子集的唯一 [我从给出的示例中理解]
提前致谢!
答案 0 :(得分:2)
我不明白的是,如果标头S在数据包标题中“打开”,带有标志S和A的数据包无法通过规则S / SA。也许文档含糊不清?
从pf.conf(5)的标志部分
标志(A)/(B)|任何此规则仅适用于已设置标志(A)的TCP数据包 超出集合(B)。
如果(B):= SA和(A):= S - >此规则仅适用于具有设置SA的标志S的TCP数据包。
这意味着它没有A套。 解释一下:
此规则仅适用于具有设置(B)
之外的标志(A)的TCP数据包
或者手册页稍后澄清:
标志S / SA
这是有状态连接的默认设置。
在SYN和ACK之外,可以设置完全SYN