Firewall

pf:“調製狀態”和“保持狀態”之間的區別

  • June 21, 2020

pf包過濾( )防火牆中的“調製狀態”和“保持狀態”有什麼區別?

我正在使用 MacOS X Catalina 10.15.5。我不知道如何檢查pf這台機器上安裝了什麼版本:\

包過濾器源自OpenBSD:

PF 的初始版本由 Daniel Hartmeier 編寫。它出現在 2001 年 12 月 1 日發布的 OpenBSD 3.0 中。

OpenBSD 3.0

一種新的數據包過濾器 PF,具有 NAT 功能,語法大多與 ipf 兼容。

關於此版本的送出modulate state(2001-08-25)。任何使用 PF 的 MacOS 版本(自2008 年的 OS X 10.6 以來)都modulate state可用。


關於modulate statevs keep state,這一切都在OpenBSD 的 PF FAQ中進行了解釋。

狀態

$$ … $$

  • keep state- 適用於 TCP、UDP 和 ICMP。此選項是所有過濾規則的預設選項。
  • modulate state- 僅適用於TCP。PF 將為匹配此規則的數據包生成強初始序列號(ISN)。

modulate state選項的作用與 類似keep state,只是它僅適用於 TCP 數據包。在調製狀態下,傳出連接的初始序列號 (ISN) 是隨機的。這對於 保護某些作業系統發起的連接很有用,這些作業系統在選擇 ISN 方面做得很差。為了允許更簡單的規則集,可以在指定 TCP 以外的協議的規則中使用調製狀態選項。在這些情況下,它被視為保持狀態。

這樣modulate state做也是如此keep state此外還更改了一些 TCP 數據包以提高安全性。

例子:

pass out on egress proto { tcp, udp, icmp } from any to any modulate state

它將“調製” TCP,並為其他人保持狀態。


如果您想了解更多關於 TCP 內部和 TCP ISN 的資訊,請參閱 RFC,例如:

序列號:32 位

此段中第一個數據八位字節的序列號(SYN 存在時除外)。如果 SYN 存在,則序列號是初始序列號 (ISN),第一個數據八位字節是 ISN+1。

不幸的是,ISN 生成器在

$$ RFC0793 $$使得路徑外攻擊者可以輕鬆預測 TCP 將用於新連接的 ISN,從而允許對 TCP 連接進行各種攻擊$$ CPNI-TCP $$.

引用自:https://unix.stackexchange.com/questions/594154