【发布时间】:2013-04-11 21:34:44
【问题描述】:
好吧,我不知道如何问这个问题,但我知道您可以使用关键字 flags 来指定要过滤的标志。
根据包过滤器的文档:
要让 PF 在评估规则期间检查 TCP 标志, flags 关键字与以下语法一起使用:
标志检查/掩码
标记任何面具部分告诉PF只检查 指定的标志和检查部分指定哪些标志必须是 标题中的“on”以进行匹配。使用 any 关键字允许 要在标头中设置的任何标志组合。
将 fxp0 proto tcp 从任何端口传递到任何端口 ssh 标志 S/SA
将 fxp0 proto tcp 从 any 传递到任何端口 ssh作为标志 S/SA 由 默认情况下,上述规则是等价的,这些规则中的每一个都通过 设置了 SYN 标志的 TCP 流量,同时只查看 SYN 和 确认标志。带有 SYN 和 ECE 标志的数据包将与上述匹配 规则,而带有 SYN 和 ACK 或仅 ACK 的数据包则不会。
所以,我理解了这个例子以及为什么带有标志 S 和 E 的数据包可以通过(因为 E 标志由于掩码 SA 不考虑)以及为什么只有 Ack 标志的数据包不能通过防火墙.
我不明白的是为什么带有标志 S 和 A 的数据包不能通过规则 S/SA,如果标志 S 在数据包头中为“on”。也许文档是模棱两可的?对不起,如果这是一个愚蠢的问题或英语误解。
我想它只有在必须ONLY标志 S 的情况下才能通过。 在集合算术将是这样的:
标头中的标志必须为“on” -> 标志属于被屏蔽的子集 [pf doc]
只有标志必须在标头中“打开” -> 标志与被屏蔽的子集相同 [我从给出的示例中了解到]
提前致谢!
【问题讨论】:
-
顺便说一句,这可能应该迁移到 serverfault。
标签: networking filtering firewall flags openbsd