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