🧭 一、什麼是封包正規化 (Packet Normalization)?
在 OPNsense 中,Normalization(封包正規化) 是一項低層級的防火牆安全機制,
透過 pf(packet filter)防火牆內建的 scrub 功能,
在封包進入或離開防火牆時,強制進行格式檢查與結構修正,
確保所有 TCP/IP 封包都符合標準協定格式。
主要目的:
- 移除或修正異常封包;
- 防止封包分段攻擊 (Fragmentation Attack);
- 改善封包一致性與傳輸穩定性;
- 減少非標準 TCP flag 導致的潛在安全風險。
這個功能位於:
Firewall → Settings → Normalization
⚙️ 二、運作原理
封包通過防火牆時,pf 會先執行「scrub」動作,
對封包進行結構檢查、重組與正規化,確保後續規則匹配與流量分析的可靠性。
🔧 常見 scrub 動作:
| 動作 | 功能說明 |
|---|---|
| reassemble tcp | 將 TCP 分段封包重新組合,防止利用分段繞過偵測。 |
| random-id | 隨機化 IP 封包 ID,防止外部主機透過 IP ID 進行流量分析。 |
| min-ttl 64 | 強制封包 TTL 不低於指定值,避免因過低 TTL 被中途丟棄。 |
| max-mss 1460 | 限制 TCP 最大封包段長度,避免過大封包造成傳輸錯誤。 |
| no-df | 移除「Don’t Fragment」標記,允許防火牆重新分段。 |
🧩 三、Normalization 設定項目說明
| 設定選項 | 說明 |
|---|---|
| Disable packet reassembly | 關閉 IP 封包重組,僅在特定情況下(例如效能優先)才建議停用。 |
| Randomize ID | 啟用後,封包 ID 會被隨機化以提升隱私與防偵測能力。 |
| Min TTL | 設定封包最小 TTL 值(例如 64)。 |
| Max MSS | 限制 TCP 最大封包長度,常用值為 1460。 |
| No-df | 移除 DF 標記,使防火牆可在必要時重組封包。 |
| Adaptive timeouts | 根據系統負載自動調整連線 timeout,提高效能。 |
🧠 四、應用場景與範例
1️⃣ 防止封包分段攻擊
攻擊者可能利用碎片封包 (fragmented packets) 來繞過 IDS/IPS 偵測。
啟用封包重組 (reassemble tcp) 可在防火牆層統一重構封包,有效阻止此類攻擊。
2️⃣ 改善 MTU 不一致造成的中斷
當跨網段連線(如 VPN、PPPoE)時,過大的 MSS 可能導致連線異常。
設定 Max MSS = 1460 可避免此類問題。
3️⃣ 強化匿名性與安全性
啟用 Randomize ID 可隱藏內部主機活動模式,防止外部透過封包 ID 進行追蹤。
4️⃣ 增加跨區連線穩定度
設定 Min TTL = 64 可避免中繼路由器因 TTL 過低提前丟棄封包。
⚙️ 五、設定範例
假設你要保護 WAN 介面,確保對外封包乾淨且符合標準,可設定如下:
| 介面 | 選項 | 設定 |
|---|---|---|
| WAN | Enable reassembly | ✅ 啟用 |
| Randomize ID | ✅ 啟用 | |
| Min TTL | 64 | |
| Max MSS | 1460 | |
| No-df | ✅ 啟用 |
對應的 pf 規則:
scrub on em0 reassemble tcp random-id min-ttl 64 max-mss 1460 no-df
🧩 六、建議實務
| 使用情境 | 建議設定 |
|---|---|
| 一般企業網路 | reassemble tcp + random-id + min-ttl=64 |
| VPN 使用環境 | 加上 max-mss 1400~1420 |
| 高效能伺服器 | 可視需求關閉 reassembly |
| 高安全性網路 | 啟用 random-id + no-df |
✅ 七、結論
封包正規化(Normalization)是一項強而有力的防線,
在流量進入防火牆之前就先「清洗」封包,
能顯著降低異常封包、分段攻擊與協定不一致造成的風險。
對企業而言,建議保持此功能啟用,
並依實際連線需求微調 TTL 與 MSS,
以兼顧安全性與連線穩定性。