如何使用包filter根据标志过滤TCP数据包

那么,我不知道如何问这个问题,但我知道你可以使用关键字标志来指定你想过滤的标志。

根据Packetfilter的文档:

要在评估规则期间让PF检查TCP标志,使用以下语法的flags关键字:

标志检查/屏蔽标志任何

掩码部分告诉PF只检查指定的标志,检查部分指定标题中的哪个(哪些)标志必须在“开”以便匹配发生。 使用any关键字可以在标题中设置标志的任意组合。

通过fxp0 proto tcp从任何端口ssh标志S / SA通过fxp0 proto tcp从任何端口ssh

由于S / SA标志是默认设置的,所以上述规则是等同的。这些规则中的每一个都传递了带有SYN标志的TCPstream量,而只查看SYN和ACK标志。 具有SYN和ECE标记的数据包将与上述规则相匹配,而具有SYN和ACK或恰好ACK的数据包则不会。

所以我理解了这个例子,为什么带有标志S和E的数据包可以通过(因为E标志没有被掩码SA考虑),为什么只有Ack标志的数据包不能通过防火墙

我不明白的是,为什么标志S和A的数据包不能通过规则S / SA,如果标志S在数据包标题中是“开”的。 也许文档是不明确的? 对不起,如果这是一个愚蠢的问题或英文误解。

我想象它只能通过,如果它必须只有标志S.在集算术会是这样的:

标志在标题中必须是'on' – >标志(s)与被屏蔽的子集[pf doc]有关,只有标志必须在标题'on'上 – >标志(s)被掩盖的子集[我从给出的例子中理解的]

提前致谢!

这意味着你正在看两个标志SA但是当且仅当S是“开”且A是“关”。

 flags S/SA --------------- | S | A | Match | ---|---|------- | 0 | 0 | No | | 0 | 1 | No | | 1 | 0 | Yes | | 1 | 1 | No | --------------- 

如果要在两个SA标志都“打开”时匹配,则使用flags SA/SA

 flags SA/SA --------------- | S | A | Match | ---|---|------- | 0 | 0 | No | | 0 | 1 | No | | 1 | 0 | No | | 1 | 1 | Yes | ---------------