【问题标题】:How to filter TCP packets based on flags using Packet Filter in OpenBSD如何使用 OpenBSD 中的数据包过滤器根据标志过滤 TCP 数据包
【发布时间】: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


【解决方案1】:

我不明白的是为什么带有标志 S 和 A 的数据包不能通过规则 S/SA,如果标志 S 在数据包头中为“on”。也许文档不明确?

来自 pf.conf(5) 中的标志部分

标志 (A)/(B) |任何

此规则仅适用于设置了标志 (A) 的 TCP 数据包 不合集 (B)。

如果 (B) := SA 和 (A) := S -> 此规则仅适用于在设置的 SA 之外设置了标志 S 的 TCP 数据包。

这意味着它没有 A 集。 稍微解释一下:

此规则仅适用于标志 (A) 与集合 (B) 完全不同的 TCP 数据包

或者正如手册页稍后说明的那样:

标志 S/SA

这是有状态连接的默认设置。

在SYN和ACK之外,正好可以设置SYN

【讨论】:

  • 这就是我在查看示例@ramrunner 后的想法。你不同意文档模棱两可吗?它说检查部分中的标志必须在标题中“打开”。因此,当您有 S 和 A 时,您指出的情况也将匹配。它并不是说只有检查部分中的标志必须匹配
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2019-04-26
  • 2012-04-10
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多