防火牆的本質#

防火牆是透過有順序的規則,管制進出網域封包的機制。核心任務是:

  • 切割信任(內網)與不信任(Internet)網段
  • 劃分可公開的服務與需保護的服務
  • 分析並過濾可接受與不可接受的封包狀態

防火牆最重要的功能是限制服務的存取來源,但它無法抵擋病毒/木馬、無法防禦內部攻擊、也無法取代軟體更新。防火牆只是安全體系的一環。

Linux 防火牆的三種機制#

  1. Netfilter(封包過濾):分析封包表頭,針對 MAC、IP、TCP/UDP、ICMP 等進行過濾。由核心內建,效率最高
  2. TCP Wrappers(程式控管):透過服務程式名稱與用戶端 IP 進行存取控制,與埠口無關
  3. Proxy(代理伺服器):代理用戶端需求,運作在應用層,可進行更細緻的控制

iptables 的 Table 與 Chain 架構#

Filter Table(本機防火牆)#

  • INPUT:進入本機的封包
  • OUTPUT:離開本機的封包
  • FORWARD:經由本機轉遞但不進入本機的封包

NAT Table(位址轉換)#

  • PREROUTING:路由前的處理,用於 DNAT
  • POSTROUTING:路由後的處理,用於 SNAT
  • OUTPUT:本機發出的封包

規則比對原理#

封包逐條比對規則,符合即執行動作並停止比對。若全不符合,依預設政策(Policy)處理。

規則順序至關重要。順序錯誤會導致防火牆完全失效——例如先允許所有再拒絕特定來源,拒絕規則永遠不會被執行到。

防火牆規則設計原則#

預設政策#

  • INPUT:設為 DROP(關閉所有),再逐步開放必要服務
  • OUTPUT / FORWARD:通常設為 ACCEPT

常見規則類型#

  • IP / 網域:限制來源或目標 IP 網段
  • 網路介面:針對特定網卡(lo、eth0、eth1)
  • 埠口:TCP/UDP 的來源與目標埠口
  • 狀態追蹤ESTABLISHED(已建立)、RELATED(相關)、NEW(新連線)、INVALID(無效)
  • ICMP 類型:控制 ping 回應與其他診斷封包
  • MAC 位址:鎖定網卡硬體位址

設定流程#

  1. 清除既有規則
  2. 設定預設政策
  3. 信任 lo 介面與內網
  4. 允許已建立和相關連線(狀態追蹤)
  5. 逐項開放必要服務埠口
  6. 儲存規則以供開機載入

NAT 伺服器觀念#

SNAT — IP 分享功能#

內部 LAN 主機對外連線時,NAT 伺服器修改封包的來源 IP 為自身的 Public IP:

  1. 內部主機發出封包(來源為 Private IP)
  2. NAT 記錄映射關係
  3. 修改來源 IP 為 Public IP 後轉出
  4. 回應封包進入時,根據記錄恢復為原始 Private IP

效果:所有內部主機在 Internet 上呈現同一個 Public IP,具有隱蔽性。

DNAT — DMZ 伺服器功能#

外部主機連到 NAT 的 Public IP 時,NAT 修改封包的目標 IP 為內部伺服器 IP:

  1. 外部主機連到 Public IP 的特定埠口
  2. NAT 修改目標為內部伺服器 IP 與埠口
  3. 內部伺服器回應時,NAT 恢復為 Public IP

效果:內部伺服器對外隱蔽,僅透過 NAT 暴露特定服務。

SNAT 處理的是出站流量(POSTROUTING),DNAT 處理的是入站流量(PREROUTING)。理解封包方向是設定 NAT 的關鍵。

核心安全參數#

Linux 核心提供多項網路安全參數(位於 /proc/sys/net/ipv4/):

  • tcp_syncookies:防禦 SYN Flooding 攻擊
  • icmp_echo_ignore_broadcasts:忽略廣播 ping,防止被用於放大攻擊
  • rp_filter:逆向路徑過濾,驗證封包來源的合理性
  • accept_redirects:關閉 ICMP 重導向,防止路由被惡意修改

防火牆架構模式#

單一路由器#

防火牆在路由器上管控 LAN 出入,架構簡單,適合小型環境。

內部含安全子網#

在 LAN 內再加防火牆保護敏感部門,實現分層安全等級。

DMZ 架構#

伺服器置於兩道防火牆之間,隔離 Internet 和 LAN。即使伺服器被攻陷,內網仍受保護。