Fortinet FortiGate 實戰課程

Level 3: Architect & Troubleshooting - Section 15

1. 封包流向生命週期 (Life of a Packet)

核心概念 (Concept)

了解一個封包進入 FortiGate 後,究竟經歷了哪些處理步驟,是除錯的基礎。

生活化比喻:國際機場的通關流程

想像 FortiGate 就是一座國際機場,封包是旅客:

  • Ingress (介面進入):旅客抵達機場大門。
  • Stateful Inspection (狀態檢測):查驗護照,確認是否為已知旅客 (Session Table)。
  • DNAT (目的轉址):如果要去特定目的地 (如 VIP 貴賓室),在此更換登機證。
  • Routing (路由查詢):查看航班資訊看板,確認要從哪個登機門 (Egress Interface) 出去。
  • Security Policy (防火牆策略):安檢人員 (海關),檢查是否有違禁品,決定是否放行。
  • UTM Scanning (防毒/IPS):X 光機深度掃描行李。
  • SNAT (來源轉址):出發前換上當地旅行團的制服 (公網 IP)。
運作原理 (Mechanism)

FortiGate 的處理流程大致可分為兩個主要路徑:

  1. Slow Path (First Packet):首個封包建立連線時,需經過 CPU 完整的檢查 (路由、Policy、NAT),並建立 Session。
  2. Fast Path (Subsequent Packets):後續封包直接比對 Session Table,若由 NPU (SPU) 硬體加速處理,則會直接轉發 (Offload),不再經過 CPU。
大師觀點:

當您使用 Sniffer 抓不到封包時,很有可能是因為流量已經被 NPU Offload 了!這時需要暫時關閉硬體加速才能進行完整的除錯。

架構視覺化 (Visuals)
flowchart TD subgraph Ingress_Process [進入處理] A[封包進入 Ingress Interface] --> B{是否已存在 Session?} B -- Yes (Fast Path) --> C[NPU/SPU 加速轉發] B -- No (First Packet) --> D[DOS Policy 檢查] end subgraph Core_Process [核心決策] D --> E[IP Integrity 完整性檢查] E --> F{DNAT / VIP?} F -- Yes --> G[修改 Destination IP] F -- No --> H[路由表查詢 Routing Lookup] G --> H H --> I{是否有匹配的防火牆策略?} I -- No (Deny) --> Drop((丟棄封包 Drop)) I -- Yes (Accept) --> J[建立 Session] end subgraph Security_UTM [安全檢測] J --> K{啟用 UTM?} K -- Yes --> L[Flow-based / Proxy-based 檢測
AV, IPS, Web Filter] L -- 威脅偵測 --> Drop L -- 安全 --> M[SNAT 處理] K -- No --> M end subgraph Egress_Process [輸出處理] M --> N[傳送至 Egress Interface] C --> N end style A fill:#fca5a5,stroke:#b91c1c,stroke-width:2px style Drop fill:#ef4444,stroke:#7f1d1d,color:white style N fill:#86efac,stroke:#15803d,stroke-width:2px style C fill:#fde047,stroke:#ca8a04,stroke-dasharray: 5 5

2. 基礎網路資訊確認 (Ping, ARP, Route, IP)

核心概念 (Concept)

在進行複雜的 Debug Flow 之前,必須先確認基本的網路連通性與轉發路徑是否正常。

生活化比喻:行前車況檢查

在拆解引擎 (Debug Flow) 修車之前,先檢查基本指標:

  • IP (Interface):車子輪胎還在嗎?(介面是否有 IP 且 Up)
  • ARP:知道鄰居家怎麼走嗎?(MAC 位址解析是否正確)
  • Route:導航地圖上有這條路嗎?(路由表是否有路徑)
  • Ping:按喇叭對方聽得到嗎?(端對端連通測試)
常用指令集 (Commands)

1. Ping (連通性測試)

除了單純 Ping,指定來源 IP (Source IP) 是防火牆除錯最關鍵的技巧。

// 設定 Ping 的來源介面 IP (模擬內網 Server 出網)
# execute ping-options source 192.168.1.254
# execute ping 8.8.8.8

// 恢復預設值
# execute ping-options reset

2. ARP (鄰居位址解析)

// 顯示 ARP 表 (確認 Next Hop 的 MAC 是否正確)
# get system arp

// 清除特定 IP 的 ARP 紀錄 (解決更換設備後的 MAC 衝突)
# execute clear system arp table

3. Route (路由表查詢)

// 顯示所有路由 (包含 Static, OSPF, BGP, Connected)
# get router info routing-table all

// 查詢特定目的地的路由 (除錯神器:系統會告訴你它會走哪條路)
# get router info routing-table details 1.1.1.1

4. IP & Interface (介面狀態)

// 顯示實體介面狀態 (IP, Link Status, Speed)
# get system interface physical

// 顯示所有 IP (包含 Loopback, Tunnel, VLAN)
# diagnose ip address list

3. CLI 進階指令 (Sniffer & Debug Flow)

核心概念 (Concept)

GUI 介面的 Log 只能告訴你「結果」,而 CLI 指令能告訴你「過程」與「原因」。

生活化比喻:聽診器 vs. 手術紀錄

  • Diagnose Sniffer Packet (聽診器)
    不干涉身體運作,只是單純「聽」血管裡的血流聲。確認封包有沒有到達有沒有離開
  • Diagnose Debug Flow (手術紀錄/日記)
    記錄醫生的每一個判斷。「因為血壓太高,所以我阻斷了...」。解釋封包為什麼被丟棄 (例如:Policy Deny, Route Fail)。
運作原理與指令 (Mechanism)

1. Sniffer Packet (抓包)

# diagnose sniffer packet <interface> '<filter>' <verbose> <count>

// 範例:抓取與 8.8.8.8 有關的 ICMP 封包,顯示詳細標頭 (4),抓 10 個
# diagnose sniffer packet any 'host 8.8.8.8 and icmp' 4 10

Verbose Level 關鍵參數:
- 1: 僅顯示 Header (IP, Port, Protocol)。
- 4: 顯示 Header + Interface 名稱 (最常用,因為能看出封包進出的介面)。
- 6: 顯示 Hex 與 ASCII 內容 (類似 Wireshark Payload)。

2. Debug Flow (追蹤流程)

// 步驟 1: 清除舊的過濾器
# diagnose debug disable
# diagnose debug flow filter clear

// 步驟 2: 設定過濾條件 (誰出了問題?)
# diagnose debug flow filter addr 192.168.1.100
# diagnose debug flow filter port 80

// 步驟 3: 啟用追蹤顯示 (Function Name 與 Trace)
# diagnose debug flow show function-name enable
# diagnose debug flow trace start 10

// 步驟 4: 開啟全域 Debug 開關
# diagnose debug enable
實務應用場景 (Use Case)

案例:財務部無法連線到 ERP 伺服器

情境: 財務部 User (10.0.1.50) 抱怨連不到 ERP (172.16.20.5)。Ping 有通,但網頁打不開。

除錯步驟:

  1. 使用 sniffer 確認封包有到達 FortiGate 且有送出。
  2. 使用 debug flow 發現錯誤訊息:denied by forward policy check (policy 0)
  3. 解析: Policy 0 代表「隱含拒絕 (Implicit Deny)」。這表示沒有任何一條 Policy 允許這個流量。檢查 Policy 設定,發現只開了 Ping (ICMP) 沒開 Web (TCP 80/443)。

4. 隨堂測驗 (Quiz)