防火牆的本質#
防火牆是透過有順序的規則,管制進出網域封包的機制。核心任務是:
- 切割信任(內網)與不信任(Internet)網段
- 劃分可公開的服務與需保護的服務
- 分析並過濾可接受與不可接受的封包狀態
防火牆最重要的功能是限制服務的存取來源,但它無法抵擋病毒/木馬、無法防禦內部攻擊、也無法取代軟體更新。防火牆只是安全體系的一環。
Linux 防火牆的三種機制#
- Netfilter(封包過濾):分析封包表頭,針對 MAC、IP、TCP/UDP、ICMP 等進行過濾。由核心內建,效率最高
- TCP Wrappers(程式控管):透過服務程式名稱與用戶端 IP 進行存取控制,與埠口無關
- 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 位址:鎖定網卡硬體位址
設定流程#
- 清除既有規則
- 設定預設政策
- 信任 lo 介面與內網
- 允許已建立和相關連線(狀態追蹤)
- 逐項開放必要服務埠口
- 儲存規則以供開機載入
NAT 伺服器觀念#
SNAT — IP 分享功能#
內部 LAN 主機對外連線時,NAT 伺服器修改封包的來源 IP 為自身的 Public IP:
- 內部主機發出封包(來源為 Private IP)
- NAT 記錄映射關係
- 修改來源 IP 為 Public IP 後轉出
- 回應封包進入時,根據記錄恢復為原始 Private IP
效果:所有內部主機在 Internet 上呈現同一個 Public IP,具有隱蔽性。
DNAT — DMZ 伺服器功能#
外部主機連到 NAT 的 Public IP 時,NAT 修改封包的目標 IP 為內部伺服器 IP:
- 外部主機連到 Public IP 的特定埠口
- NAT 修改目標為內部伺服器 IP 與埠口
- 內部伺服器回應時,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。即使伺服器被攻陷,內網仍受保護。