網絡安全人士必知的Iptables四表五鏈
iptables 是 Linux 系統中一個強大的網絡包過濾工具,廣泛應用于網絡管理和安全。它主要用于數據包的過濾和轉發,保護服務器免受網絡攻擊。通過 iptables,管理員可以靈活地控制網絡流量,實現訪問控制、安全防護、網絡地址轉換等功能。
本文將詳細介紹 iptables 的四個默認表和五種規則鏈,分別展示它們的典型用法,以幫助您理解 iptables 的基本配置和使用方法。
iptables 的四表
1. raw 表
raw 表主要用于控制數據包的狀態跟蹤。它允許管理員決定是否對某個數據包進行狀態跟蹤,從而優化性能或防止特定攻擊。raw 表通常在數據包處理的初始階段使用,默認包含 OUTPUT 和 PREROUTING 鏈。
● 示例:關閉狀態跟蹤以提高性能
iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
以上規則指定不對進入 PREROUTING 鏈的 TCP 80 端口流量進行狀態跟蹤。
2. mangle 表
mangle 表專用于修改數據包內容,常用于流量整形或對數據包做標記。它包括五種規則鏈:INPUT、OUTPUT、FORWARD、PREROUTING 和 POSTROUTING。
● 示例:給指定端口的流量做標記
iptables -t mangle -A PREROUTING -p tcp --dport 8080 -j MARK --set-mark 1
以上規則為 PREROUTING 鏈中 TCP 8080 端口的流量設置一個標記 1,可用于流量整形等用途。
3. nat 表
nat 表用于網絡地址轉換(Network Address Translation),能夠修改數據包的源或目的 IP 地址或端口。nat 表包含 OUTPUT、PREROUTING 和 POSTROUTING 鏈。
● 示例:對訪問外網的數據包執行源地址轉換
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
該規則為所有通過 eth0 網口的出站數據包執行源地址偽裝,適用于 NAT 網絡地址轉換。
4. filter 表
filter 表是最常用的表,用于過濾數據包并決定是否放行,包含 INPUT、OUTPUT 和 FORWARD 鏈。filter 表的規則是對入站、出站和轉發的數據包進行過濾。
● 示例:阻止來自特定 IP 地址的訪問
iptables -t filter -A INPUT -s 192.168.1.100 -j DROP
以上規則在 INPUT 鏈中阻止 IP 地址 192.168.1.100 的所有入站流量。
iptables 的五鏈
1. INPUT 鏈
INPUT 鏈負責處理所有入站數據包的規則,即從外部發送到本機的數據包。
● 示例:允許來自本地網絡的入站 SSH 流量
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
該規則允許本地網絡(192.168.1.0/24)的設備訪問本機的 SSH 服務。
2. OUTPUT 鏈
OUTPUT 鏈處理本機發出的所有出站數據包的規則。
● 示例:允許本機的所有 HTTP 出站流量
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
該規則允許本機所有訪問外部服務器的 HTTP 流量。
3. FORWARD 鏈
FORWARD 鏈主要用于轉發數據包,在本機作為路由器或網關時起作用。
● 示例:允許通過本機轉發的流量
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
以上規則允許所有通過本機轉發的 HTTP 流量。
4. PREROUTING 鏈
PREROUTING 鏈在數據包路由選擇之前對其進行處理,適合在數據包到達本機前對其進行修改。
● 示例:將所有的 HTTP 請求重定向到本地的 8080 端口
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
此規則將所有發往本機的 80 端口 HTTP 請求重定向到 8080 端口。
5. POSTROUTING 鏈
POSTROUTING 鏈在數據包路由選擇之后對其進行處理,適合在數據包離開本機前對其進行修改。
● 示例:將本地 IP 地址的數據包偽裝為外部 IP 地址
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
此規則偽裝了所有通過 eth0 網卡的出站流量,適合實現 NAT 功能。
iptables 的基本用法
1. 查看規則
iptables -L -v -n
顯示所有表的規則。-v 選項提供詳細輸出,-n 選項禁用 DNS 查詢以提高速度。
2. 添加規則
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
將一條規則追加到 INPUT 鏈中,允許所有 TCP 22 端口流量。
3. 刪除規則
iptables -D INPUT 1
刪除 INPUT 鏈中的第一條規則。確保在刪除前使用 iptables -L --line-numbers 查看規則編號。
4. 保存規則
在 Debian/Ubuntu 中可以使用以下命令保存規則:
sudo iptables-save > /etc/iptables/rules.v4
在重啟后可以自動加載規則。
5. 清除規則
iptables -F
清除所有鏈中的規則,重置為默認狀態。
總結
iptables 是 Linux 系統中的強大防火墻工具,通過四個表(raw、mangle、nat、filter)和五個鏈(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)對網絡數據包進行高效控制和管理。它允許管理員根據不同需求設置規則,以實現數據包的過濾、流量整形、網絡地址轉換(NAT)和狀態跟蹤等功能。iptables 可用于精細化管理入站、出站和轉發的數據包,保障系統的網絡安全,優化流量分配,適合企業網絡中的防護與流量控制需求。總之,iptables 是 Linux 網絡安全和管理中不可或缺的防火墻工具。