- 結構與流程:表格、鏈條以及流量如何流動
- 規則與政策:命令、比賽和關鍵目標
- NAT 與發布:實際場景中的 SNAT/MASQUERADE 和 DNAT
- 安全設計:功能性 DMZ 和良好操作實踐
如果你管理Linux 發行版來保護你的安全和隱私,那麼遲早你會遇到 iptables。這個封包過濾系統是 GNU/Linux 經典防火牆的核心,它能夠決定哪些流量可以進出網絡,以及哪些流量可以在網路之間轉送。配置得當的話,它就像在你網路入口處安排了一位訓練有素的門衛,能夠完美且精準地執行你的規則。
以下內容將為您提供一份完整且最新的指南,涵蓋防火牆基礎知識:防火牆概念、Netfilter、規則表和鏈、封包流、關鍵命令、規則擴展和高級目標,以及NAT、重定向、預設策略和功能性DMZ等實際應用場景。所有內容均以清晰嚴謹的語言進行解釋,方便您立即將其應用到您的基礎架構中。
防火牆背景:從夜總會保鑣到 DMZ
防火牆本質上是網路之間的過濾器,它應用規則來決定每個封包的命運。你可以把它想像成夜總會的保安,手裡拿著一張清單:如果數據包符合標準,就放行;否則,就被拒之門外。這個比喻有助於理解,關鍵在於規則的邏輯以及規則的執行順序。
在網路設計中,某些拓撲結構比其他拓撲結構更安全。 DMZ (非軍事區)是一個中間網絡,用於託管公共服務(例如網站或FTP伺服器),並將其與企業區域網路隔離。為什麼呢?因為即使攻擊者攻破了公共伺服器,這種隔離也能阻止他們直接存取內部網路的其餘部分。
Linux 作為防火牆:Netfilter 和 iptables
Linux 核心整合了Netfilter 框架,該框架提供了用於攔截和操控資料包的鉤子。在使用者空間,iptables 工具定義了核心將應用於網路流量的規則。這種核心/用戶分離的設計使得系統能夠在保證高性能的同時,實現高度的靈活性。
依協定區分這些實用程式很有用:iptables(IPv4)、ip6tables(IPv6)、arptables(ARP)和ebtables(乙太網路訊框)。在核心中,通用模組是x_tables,它共享用於匹配擴展和目標的邏輯。歷史背景:iptables取代了ipchains,而nftables在核心3.13中取代了iptables,儘管iptables在許多系統中仍然被廣泛使用。
要操作,您需要管理員權限。 以 root 身分執行 iptables (或使用 sudo),通常在 /usr/sbin/iptables (Debian/衍生產品)或 /sbin/iptables (Red Hat/衍生產品)。官方文件位於 man iptables 以及 netfilter.org。
iptables結構:表格、鍊與規則
iptables 將其邏輯組織成由規則鏈組成的表格。每條規則都指定了符合條件以及封包匹配時要套用的目標。
- 篩選表 (默認,純過濾)
- 輸入:指向機器本身的流量。
- 前鋒:通過設備(路由)的流量。
- 輸出:本地產生的流量。
- NAT表 (地址轉換;在新連接上評估)
- 預路由:在決定路線之前;非常適合 DNAT/連接埠轉送。
- 輸出:路由之前本地發起的資料包。
- 後路由:路由之後;SNAT/MASQUERADE 的典型特徵。
- 紅樹林桌 (精細的標題調整:TOS、TTL、標記等)
- 預路由、輸入、轉送、輸出、後路由:全程可用。
- 原始表 (連接追蹤控制/conntrack)
- 預路由 y 輸出:標記應被 conntrack 跳過的流量。
當封包到達鏈的末端時,它會依次與每條規則進行比較;如果匹配,則執行其目標操作,遍歷停止。如果到達末端時未符合任何規則,且該鍊是預先定義的,則套用該鏈的預設策略。
資料包流:它們在何時何地通過
了解流量路徑是正確應用規則的關鍵。封包從區域網路 (LAN) 流向網際網路通常會經歷以下處理過程:首先是路由前處理(可能包括 DNAT/mangle),然後是轉送(傳輸過濾),最後在離開裝置之前,也會進行路由後處理(如果適用,則包含 SNAT/MASQUERADE)。
反之,如果目標位址是防火牆本身,則路由為 PREROUTING → INPUT;如果目標位址來自本機計算機,則路由為OUTPUT → POSTROUTING。這種思路框架可以避免在遇到不合理之處時造成困擾。
基本指令:列出、清除、建立和預設策略
要審核目前狀態, 美國 iptables -L (可選 -v 詳細資訊和 -n (不解析名稱)。您也可以使用 -N y -X 並設定預設策略 -P.
當你需要從頭開始時, 清理規則 -F (沖洗) 以及(如果適用)計數器。請記住,您可以使用 -t 以及特定的連鎖店;例如, iptables -F -t nat 對於 NAT。
定義規則時,最常見的選項很簡單: -A 鴨子, -I 插入, -R 取代和 -D 抹去。然後新增選擇器,例如 -p (協定), -s/-d (出發地/目的地), -i/-o (介面)和目標 -j (例如。, 接受、丟棄或拒絕).
該 預設策略 定義當所有規則都不匹配時會發生什麼。主機上典型的強化方案是 INPUT DROP, FORWARD DROP, OUTPUT ACCEPT, 阻止除明確允許的傳入之外的所有傳入 並允許結果出來。
匹配擴展(-m):TCP、UDP、ICMP、MAC、狀態和多端口
Iptables 使用以下匹配模組擴展其過濾器 -m. TCP 允許透過連接埠和標誌進行調整: --dport/--sport y --syn 例如,用於新的連接開口。
對於 UDP 協議,您還可以限制來源連接埠和目標連接埠。一個經典的範例是:向 Web 伺服器開放 80/443 端口,或允許透過 53/UDP 連接埠發出 DNS 查詢。
使用 ICMP, --icmp-type 讓你區分類型 (例如。, 回顯請求 y 回顯回复 用於 ping)。這對於允許診斷而不向完整 ICMP 敞開大門非常有用。
還有模組 mac 按 MAC 位址過濾 同 --mac-source。如果您想要授權具有動態 IP 的託管電腦在不依賴 IP 的情況下 ping 防火牆,則很有用。
也許最重要的是在操作層面, 模組 state (或 conntrack) --state NEW, ESTABLISHED, RELATED這允許已建立的連接的回應,從而大大減少所需的規則數量。
若要將連接埠分組, multiport 增加 --sports y --dports 使用逗號分隔的列表. 可以方便地在單一規則中開啟HTTP,HTTPS和SSH。
ACCEPT/DROP 以外的目標:NAT 與公司
除了接受或拒絕流量之外,iptables 還可以重寫位址和端口,以將私人網路連接到互聯網或發佈內部服務。
假面舞會 (在 POSTROUTING 從表中 nat)將來源 IP 替換為防火牆的輸出 IP,理想情況是 公共IP是動態的 (DHCP)。這是典型的整個 LAN 的出站 NAT。
網絡地址轉換 (也在 POSTROUTING)明確設定來源 IP/連接埠 --to-source. 當你擁有靜態公用 IP 時使用它 並且您想精確控制翻譯。
脫氧核糖核酸 (在 PREROUTING o OUTPUT)使用以下方式變更目標 IP --to-destination. 這就是著名的“開放港口”:您在公用 IP 上接收流量並將其重新導向到 DMZ 中的伺服器,例如 192.168.1.2 的內部網站。
簡單範例:過濾兩個網路之間的流量
想像一台機器充當兩個子網路之間的路由器/防火牆。 如果您只希望主機 B 與 C 通訊並且僅透過 TCP,表格將是 filter 正確的字串是 FORWARD,因為流量會經過該設備。
首先,您需要對轉送 (FORWARD) 協定套用預設的丟棄 (DROP) 策略,然後明確授權 TCP 上的 B→C 流量(以及,如果適用,C→B 流量)。這種「預設拒絕,僅允許最低限度流量」的模式是建立強大安全態勢的基礎。
時裝秀上的日常案例:典型規則
例如,具有兩個介面的網關 eth1(LAN)和 eth0(WAN),通常需要將封包從 LAN 轉送到 Internet。為此,它添加了 FORWARD -i eth1 -o eth0 -j ACCEPT,而 僅允許反向 ESTABLISHED,RELATED 同 -m state.
在防火牆本身中,建議授權 回應傳出連線的傳入流量 同 INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT,並始終允許環回: INPUT -i lo -j ACCEPT.
若要允許 LAN 電腦瀏覽,請套用出站 NAT: -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source X.Y.Z.W (o MASQUERADE 如果 IP 是動態的)。這會將私人 IP 轉換為您的公用 IP。
基本的加固措施是阻止來源 IP 位址不正確的傳入 WAN 資料包(您自己的公網 IP 位址、私有網段 192.168.0.0/24、127.0.0.0/8 等),因為它們通常表示欺騙。
若要在防火牆上公開服務(例如 SMTP 25、HTTP 80、HTTPS 443 或 SSH 22),您可以 允許帶有 SYN 標誌的 TCP 封包到達這些目標端口。如果您想按目標 IP 縮小範圍,請新增 -d 到服務的IP。
典型的基礎架構服務包括區域網路介面上的DHCP (連接埠 68 至 67 的流量)以及來自權威解析器的DNS(UDP 連接埠 53,如果按來源位址過濾)。這些連接埠允許客戶端取得 IP 位址並解析網域名稱。
如果需要阻止訪問,DROP 傳入的 SSH/Telnet非常簡單;您還可以拒絕發送到本地網路上被封鎖的 IP 位址的傳出訊息,以便發送者收到拒絕通知。
在 Red Hat/CentOS 系統上安裝和管理服務
在 CentOS/RHEL 5/6 的傳統環境中, 安裝 yum -y install iptables儘管如今許多新的發行版都青睞 nftables,但 iptables 仍然存在於生產系統和設備中。
與整合 SysV 服務 允許管理和保留規則: service iptables start|stop|restart y service iptables save, 節省 /etc/sysconfig/iptables. 啟動時啟用: chkconfig iptables on 級別 2-5。
在現代系統中,儘管包裝器發生了變化,但其概念仍然存在:定義規則、測試規則並使其持久化,以便它們能夠在重新啟動後仍然存在,無論是使用系統工具還是腳本。
精確列出、刪除和編輯規則
若要查看規則編號的狀態, 美國 iptables -L --line-numbers -n -v。這樣你就可以透過索引刪除 -D INPUT 3 或替換為 -R 沒有蚤續。
如果需要選擇性刪除, 只清潔接觸的鏈條或板 (-F FORWARD o -F -t nat)。避免在沒有「安全網」的情況下進行遠端全球掃描,否則您可能會失去 SSH 存取權限。
一般做法是,首先制定允許 SSH 會話的規則,逐步應用更改,並設定回滾視窗(例如,如果 5 分鐘內沒有提交更改,則使用 cron 作業恢復規則)。
使用 iptables-save 和 iptables-restore 實現持久化
要儲存您的設置, iptables-save > /ruta/backup/iptables.rules 產生所有表格的機器可讀轉儲。非常適合變更控制和遷移。
要充電,請使用 iptables-restore < /ruta/backup/iptables.rules您可以使用 systemd、init 腳本或 cron 作業自動執行啟動復原。 @reboot,確保防火牆在重新啟動後仍保持活動狀態。
除此之外,還有以下良好的操作規範: 以適當的權限運行,將文件保存在外部 /tmp 並使其與環境(正確的介面和子網路)保持一致,以避免意外。
DMZ 詳解:一個完整而現實的例子
假設一台 Linux 防火牆以「單一使用者」模式(無 NAT)連接到路由器,該防火牆有三個介面:eth0(LAN 192.168.1.1/24)、eth1(DMZ 192.168.2.1/24)和 eth2(WAN,透過 DHCP 取得 IP 位址)。 DMZ 中託管一台Apache Web 伺服器(192.168.2.2)和一台 FTP 伺服器(192.168.2.3)。
策略目標:允許從DMZ向網際網路發布HTTP/HTTPS和FTP流量,允許從區域網路透過SSH管理防火牆,並允許區域網路瀏覽網頁(HTTP/HTTPS)、透過FTP傳輸檔案以及解析DNS。所有其他訪問均被拒絕。
廣義上講: 過濾/轉發 允許 LAN→WAN 傳輸並回應,並且 WAN→DMZ 僅到已發布的端口 同 ESTABLISHED,RELATED 尋找答案。在 nat/預路由,應用DNAT發布服務;在 nat/後路由,用於 LAN/DMZ 輸出的 SNAT/MASQUERADE。
開場白範例: DNAT 80/443 到 192.168.2.2 和 21/20(取決於模式)到 192.168.2.3 與相應的 FORWARD 允許這些連接埠。保護 FTP(主動/被動)的控制和資料通道,或限制被動範圍,並在防火牆上反映這一點。
對於 LAN: 允許出口至 80、443、21 和 53 及其返回,應用出站 NAT POSTROUTING. 在防火牆中,授權 僅來自 192.168.1.0/24 子網路的傳入 SSH 並阻止來自 WAN 的不必要的存取。
別忘了注意安全:限制廣域網路(包括私有連結、環回連結和您自己的公網連結)上無效的流量範圍,並且只記錄您感興趣的資料。透過嚴格的預設策略和最小化的流量開放,您可以將風險暴露降至最低。
良好做法和操作技巧
始終要製定計劃:記錄你允許什麼以及為什麼允許,用簡單的圖表驗證預期流程,並按正確的順序應用規則以避免重疊。
使用帶有頭部的模組組合: 狀態/連接追蹤響應,tcp con --syn 在開口處,以及 multiport 分組這樣,您就可以簡化並降低不一致的風險。
對於頻繁變化的環境,請考慮按功能分離規則: 客製化鏈條 (帶 -N) 從 INPUT/OUTPUT/FORWARD 調用,這樣保存或反轉片段就更加清晰了。
許多發行版正在向 nftables 過渡,但如果您的平台/產品使用 iptables,那麼深入了解這些元件將使您擁有完全的控制權。如果您遷移到 nftables,您將很容易掌握相應的概念架構。
透過以上學習,您現在已經具備了在生產環境中部署和維護 iptables 的堅實基礎:您了解其架構(表、鍊和流),熟練掌握了基本命令,能夠使用 DNAT/SNAT 實現 NAT 和發布流量,並且知道如何設置安全的 DMZ。接下來,您需要根據自身需求進行定制,定期進行審計,並確保您的規則與您的網路模型一樣清晰明了。