Linux防火墻配置一頭霧水?iptables 從入門到實戰(zhàn)全攻略!
iptables是Linux內(nèi)核中用于配置防火墻規(guī)則的工具。它基于Netfilter框架,可以對通過網(wǎng)絡(luò)接口的數(shù)據(jù)包進(jìn)行過濾、修改等操作。通過設(shè)置一系列規(guī)則,iptables能夠控制哪些數(shù)據(jù)包可以進(jìn)入或離開系統(tǒng),從而實現(xiàn)網(wǎng)絡(luò)安全防護等功能。
它主要工作在網(wǎng)絡(luò)層,能夠根據(jù)數(shù)據(jù)包的源地址、目的地址、協(xié)議類型(如TCP、UDP、ICMP等)、端口號等信息來決定如何處理數(shù)據(jù)包。
一、介紹
1. NetfilterNetfilter 是 Linux 內(nèi)核中的一個框架,允許在內(nèi)核空間對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行過濾、修改和重定向。它是 Linux 防火墻的基礎(chǔ),提供了以下功能:
Netfilter 通過鉤子(hooks)在內(nèi)核的網(wǎng)絡(luò)協(xié)議棧中插入處理函數(shù),這些鉤子位于數(shù)據(jù)包處理的各個階段,如接收、轉(zhuǎn)發(fā)、發(fā)送等。
? 數(shù)據(jù)包過濾:根據(jù)規(guī)則允許或阻止數(shù)據(jù)包通過。
? 網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT):修改數(shù)據(jù)包的源或目標(biāo)地址,常用于路由器和防火墻。
? 數(shù)據(jù)包修改:如修改數(shù)據(jù)包的 TTL(Time to Live,生存時間)或 TOS(Type of Service,服務(wù)類型)。
? 連接跟蹤:跟蹤網(wǎng)絡(luò)連接狀態(tài),用于狀態(tài)防火墻。
2. iptablesiptables 是用戶空間的工具,用于配置和管理 Netfilter 的規(guī)則。它通過命令行接口讓用戶定義數(shù)據(jù)包的處理規(guī)則,并將這些規(guī)則傳遞給內(nèi)核中的 Netfilter。iptables有多個表,每個表包含一系列規(guī)則鏈(Chains),用于處理不同類型的任務(wù)。主要功能包括:
執(zhí)行動作:如 ACCEPT、DROP、REJECT 等。
? 定義規(guī)則:允許或阻止特定類型的數(shù)據(jù)包。
? 管理鏈(Chains):規(guī)則被組織成鏈,常見的鏈有 INPUT、OUTPUT 和 FORWARD。
1.1 iptables 結(jié)構(gòu)
簡單地講,tables 由 chains 組成,而 chains 又由 rules 組成。如下圖所示:
202503201444855
iptables: 表(Tables) -> 鏈(Chains) -> 規(guī)則(Rules).
數(shù)據(jù)包過濾匹配流程和規(guī)則鏈內(nèi)部匹配原則:
? iptables 按照預(yù)定義的順序依次檢查規(guī)則鏈中的規(guī)則。
? 匹配到第一條符合條件的規(guī)則后,將停止后續(xù)規(guī)則的匹配并執(zhí)行該規(guī)則的動作。
? 如果遍歷整個鏈都沒有匹配的規(guī)則,則執(zhí)行該鏈的默認(rèn)策略 (通常是 ACCEPT 或 DROP)。
1.2 四表五鏈架構(gòu)
iptables 的核心架構(gòu)由四個表和五個鏈組成,它們按照特定的優(yōu)先級順序處理數(shù)據(jù)包:
表名 | 功能 | 規(guī)則鏈 | 優(yōu)先級 |
filter (過濾規(guī)則表) |
過濾數(shù)據(jù)包(默認(rèn)表),決定是否允許數(shù)據(jù)包通過 | INPUT ,OUTPUT,FORWARD | 低 |
nat (地址轉(zhuǎn)換規(guī)則表) |
網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT),例如 SNAT、DNAT | PREROUTING ,POSTROUTING,OUTPUT | 中 |
mangle (修改數(shù)據(jù)標(biāo)記位規(guī)則表) |
修改數(shù)據(jù)包的特定屬性,例如 TTL、TOS 等 | PREROUTING ,POSTROUTING,INPUT,OUTPUT,FORWARD | 高 |
raw (跟蹤數(shù)據(jù)表規(guī)則表) |
決定是否對數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤 | PREROUTING ,OUTPUT | 最高 |
? INPUT(入站數(shù)據(jù)過濾):處理進(jìn)入防火墻本機的數(shù)據(jù)包。
? OUTPUT(出站數(shù)據(jù)過濾):處理從防火墻本機將發(fā)出的數(shù)據(jù)包。
? FORWARD(轉(zhuǎn)發(fā)數(shù)據(jù)過濾):處理需要由防火墻本機,轉(zhuǎn)發(fā)到其他地址的數(shù)據(jù)包。
? PREROUTING(路由前過濾):在數(shù)據(jù)包進(jìn)行路由選擇之前,根據(jù)規(guī)則修改數(shù)據(jù)包的目標(biāo)IP地址(destination ip address),通常用于DNAT(destination NAT)。
? POSTROUTING(路由后過濾):在數(shù)據(jù)包進(jìn)行路由選擇之后,根據(jù)規(guī)則修改數(shù)據(jù)包的源IP地址(source ip address),通常用于SNAT(source NAT)。
數(shù)據(jù)包處理流程圖:
202503212157371
1.3 規(guī)則(Rules)
牢記以下三點式理解iptables規(guī)則的關(guān)鍵:
? Rules 包括一個規(guī)則條件 和一個目標(biāo)(target) .
? 如果滿足條件,就執(zhí)行目標(biāo)(target)中的規(guī)則或者特定值。
? 如果不滿足條件,就判斷下一條 Rules。
二、iptables 語法
規(guī)則編寫語法
完整語法:IPTABLES 完整語法
2.1 基本語法
| | | | --- | --- | | | iptables [-t table]command[chain] [rule-specification] [-j target] |
?table: 指定操作的表,例如:
? filter(默認(rèn)), nat, mangle, raw .
?command: 操作類型,例如:
? -A (append), -I (insert), -D (delete), -R (replace), -L (list)
? -F (flush), -P (policy), -E (rename), -X (delete chain), -Z (zero counters) .
?chain: 指定操作的鏈。
? INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING .
?rule-specification: 匹配條件,用于指定要處理的數(shù)據(jù)包特征,例如:
? 源 IP 地址、目標(biāo)端口等。
?target: 控制類型,指定匹配數(shù)據(jù)包后的動作,例如:
? ACCEPT, DROP, REJECT, LOG, DNAT, SNAT, MASQUERADE, REDIRECT .
匹配條件(rule-specification):
?-p
?-s
?-d
?--sport
?--dport
控制類型(target):
?ACCEPT: 允許數(shù)據(jù)包通過。
?DROP: 丟棄數(shù)據(jù)包,不發(fā)送任何回應(yīng)。
?REJECT: 拒絕數(shù)據(jù)包,并發(fā)送 ICMP 錯誤消息。
?LOG: 記錄數(shù)據(jù)包的日志信息,通常和-j NFLOG或-j ULOG一起使用,用于將日志發(fā)送到特定的設(shè)施。
?SNAT、DNAT:用于源地址(source NAT)轉(zhuǎn)換和目標(biāo)地址(destination NAT)轉(zhuǎn)換,主要用于nat表。
?MASQUERADE: 一種特殊的 SNAT,用于動態(tài)獲取公網(wǎng) IP 地址。
?REDIRECT: 將數(shù)據(jù)包重定向到本機的另一個端口。
2.2 常用參數(shù)介紹
2.2.1 查看規(guī)則
| | | | --- | --- | | |##-L(list)列出指定鏈中的規(guī)則(如果不指定鏈,默認(rèn)列出所有鏈中的規(guī)則:iptables -L)。例如: | | |#使用 -t 參數(shù),指定查看的表,默認(rèn)filter, | | |#使用 -n 參數(shù)以數(shù)字形式顯示IP地址和端口號, | | |#使用 -v 參數(shù)顯示詳細(xì)信息,如數(shù)據(jù)包匹配次數(shù)等。 | | |#使用 --line-numbers 參數(shù),顯示規(guī)則行號 | | | iptables [-t filter] -L [-nv] [INPUT] [--line-numbers] | | |#列出 INPUT鏈中的所有規(guī)則。 | | | iptables -L INPUT |
2.2.2 添加規(guī)則
| | | | --- | --- | | |##-P(policy)設(shè)置指定鏈的 默認(rèn)策略。例如: | | |#將 INPUT鏈的默認(rèn)策略設(shè)置為 DROP,即如果沒有匹配的規(guī)則,所有進(jìn)入的數(shù)據(jù)包都將被丟棄。 | | | iptables -P INPUT DROP | | | | | | | | |##-p(protocol)指定數(shù)據(jù)包的協(xié)議類型。常見的協(xié)議有 tcp、udp、icmp 等。例如: | | |##-j(jump)指定當(dāng)數(shù)據(jù)包匹配規(guī)則時要執(zhí)行的動作。常見的動作有:ACCEPT:允許, DROP:丟棄等 | | |#這表示丟棄所有進(jìn)入的 ICMP 數(shù)據(jù)包,通常用于禁止所有 ping操作。 | | | iptables -A INPUT -p icmp -j DROP | | | | | |##-A(append) 用于在指定鏈的末尾添加一條規(guī)則。例如: | | |##--dport(destination port)指定目標(biāo)端口號。例如: | | |#這條命令的意思是在 INPUT鏈的 末尾 添加一條規(guī)則,允許(ACCEPT)目標(biāo)端口為22(SSH服務(wù)端口)的TCP數(shù)據(jù)包通過。 | | | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | | | | | |##-I(insert)用于在指定鏈的 指定位置 插入 一條規(guī)則。(如果沒有指定位置,默認(rèn)插入到鏈的開頭)例如: | | |#這表示在INPUT鏈的 第一個位置 插入 一條規(guī)則,允許目標(biāo)端口為80(HTTP服務(wù)端口)的TCP數(shù)據(jù)包通過。 | | | iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT | | | | | |##--sport(source port)指定源端口號。例如: | | |#允許源端口為 80 的 TCP 數(shù)據(jù)包通過。 | | | iptables -A INPUT -p tcp --sport 80 -j ACCEPT | | | | | |##-s(source)指定數(shù)據(jù)包的源地址??梢允荌P地址、IP地址范圍 或 主機名 等。例如: | | |#允許來自IP地址為192.168.1.100的數(shù)據(jù)包通過。 | | | iptables -A INPUT -s 192.168.1.100 -j ACCEPT | | | iptables -A INPUT -s 192.168.1.100/24 -p tcp --dport 22 -j ACCEPT | | | | | |##-d(destination)指定數(shù)據(jù)包的目的地址。例如: | | |#允許目標(biāo)地址為192.168.1.100的數(shù)據(jù)包通過。 | | | iptables -A INPUT -d 192.168.1.100 -j ACCEPT | | | | | | | | |##-i(in-interface)指定輸入接口,例如:eth0 | | |#當(dāng)從eth0出去的,訪問目的地址是 192.168.23.253 ,且 目的端口是80 的route,允許通過 | | | iptables -A FORWARD -o eth0 -d 192.168.23.253 -p tcp --dport 80 -j ACCEPT | | | | | |##-o(out-interface)指定輸出接口 | | |#當(dāng)從eth0進(jìn)來的,原地址是 192.168.23.253 ,且 目的端口是80 的route,允許通過 | | | iptables -A FORWARD -i eth0 -s 192.168.23.253 -p tcp --dport 80 -j ACCEPT |
2.2.3 刪除規(guī)則
| | | | --- | --- | | |##-D(delete)用于 刪除 指定鏈中的一條規(guī)則。可以通過指定規(guī)則編號或直接指定規(guī)則內(nèi)容來刪除。例如: | | |#刪除INPUT鏈的第一條規(guī)則 | | | iptables -D INPUT 1 | | |#刪除INPUT鏈中匹配這條規(guī)則(允許目標(biāo)端口為80的TCP數(shù)據(jù)包通過)的規(guī)則。 | | | iptables -D INPUT -p tcp --dport 80 -j ACCEPT | | | | | |##-F(flush)清空指定鏈中的所有規(guī)則。例如: | | |#清空 INPUT鏈中的所有規(guī)則。如果不指定鏈,默認(rèn)清空所有鏈中的規(guī)則(iptables -F)。 | | | iptables -F INPUT |
2.2.4 保存/恢復(fù)規(guī)則
| | | | --- | --- | | | service iptables save | | | iptables-save > /etc/iptables/rules.v4 | | | iptables-restore < /etc/iptables/rules.v4 |
三、例子
3.1 基本防火墻規(guī)則設(shè)置
| | | | --- | --- | | |#清空所有規(guī)則 | | | iptables -F | | | | | |#設(shè)置默認(rèn)策略 | | | iptables -P INPUT DROP | | | iptables -P FORWARD DROP | | | iptables -P OUTPUT ACCEPT | | |#將 INPUT 和 FORWARD 鏈的默認(rèn)策略設(shè)置為 DROP,這樣沒有匹配規(guī)則的數(shù)據(jù)包都會被丟棄,增強了系統(tǒng)的安全性。 | | | | | |#允許本地回環(huán)接口 | | | iptables -A INPUT -i lo -j ACCEPT | | | | | |#允許已建立的連接 | | | iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | | | | | |# 禁止外部 ICMP (ping) 本機 | | | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | | |#這條規(guī)則丟棄所有進(jìn)入的ICMP回顯請求數(shù)據(jù)包,從而禁止外部主機ping本機。 | | |# --icmp-type 指定 ICMP數(shù)據(jù)包的類型,不指定則操作所有類型,包括: | | |## echo-request(ping 請求) | | |## echo-reply(ping 回復(fù)) | | |## destination-unreachable(目標(biāo)不可達(dá))等 | | | | | |#允許外部 SSH 連接本機 | | | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | | |#這條規(guī)則允許外部主機通過TCP端口 22(SSH服務(wù)端口)連接到本機。 | | | | | |#允許外部訪問本機的 HTTP 服務(wù) | | | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | | |#允許外部通過 TCP 端口 80(HTTP服務(wù)端口)訪問本機的HTTP服務(wù)。 |
3.2 NAT相關(guān)規(guī)則
假設(shè)本機有一個公網(wǎng)IP地址為 192.0.2.1,內(nèi)部有一臺主機IP地址為 192.168.1.100,運行著一個HTTP服務(wù)(監(jiān)聽端口8080)
3.2.1 端口轉(zhuǎn)發(fā)(REDIRECT)
通常用于將外部訪問的 HTTP 流量(端口 80)重定向到本機的另一個端口(例如 8080)。
| | | | --- | --- | | |#在路由前,將外部對本機某端口的訪問(舊目標(biāo)端口),轉(zhuǎn)發(fā)到內(nèi)部主機的端口(新目標(biāo)端口) | | | iptables -t nat -A PREROUTING -p tcp --dport <舊目標(biāo)端口> -j REDIRECT --to-port <新目標(biāo)端口> | | | | | |#將端口 80 轉(zhuǎn)發(fā)至 8080 | | | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 | | | | | |#多端口轉(zhuǎn)發(fā):將端口 1000-2000 轉(zhuǎn)發(fā)至 3000-4000,如:1001 -> 3001 | | | iptables -t nat -A PREROUTING -p tcp --dport 1000:2000 -j REDIRECT --to-ports 3000-4000 |
3.2.2 目標(biāo)網(wǎng)絡(luò)地址轉(zhuǎn)換(DNAT)
DNAT(Destination NAT):修改數(shù)據(jù)包的目的地址,通常用于將外部網(wǎng)絡(luò)的公共 IP 地址映射到內(nèi)部網(wǎng)絡(luò)的私有 IP 地址。
? 可以用于將外部網(wǎng)絡(luò)的請求,轉(zhuǎn)發(fā)到內(nèi)部網(wǎng)絡(luò)的特定主機和服務(wù)。
? 可以用于將流量轉(zhuǎn)發(fā)到另一個服務(wù)器(例如內(nèi)網(wǎng)中的另一臺機器)
| | | | --- | --- | | |#在路由前,將外部對 舊目標(biāo)地址 的請求,轉(zhuǎn)發(fā)到 新目標(biāo)地址 的服務(wù)。 | | | iptables -t nat -A PREROUTING -d <舊目標(biāo)IP> -p tcp --dport <舊目標(biāo)PORT> -j DNAT --to-destination <新目標(biāo)IP>:<新目標(biāo)PORT> | | | | | |#當(dāng)外部用戶訪問 “192.0.2.1:80” (舊目標(biāo)地址)時,DNAT規(guī)則會將其修改為 192.168.1.100:8080 (新目標(biāo)地址)。 | | |##外部用戶通過公網(wǎng)IP地址 192.0.2.1 訪問本機的HTTP服務(wù)(端口80)。 | | |##本機需要將請求轉(zhuǎn)發(fā)到內(nèi)部主機 192.168.1.100 的HTTP服務(wù)(端口8080)。 | | | iptables -t nat -A PREROUTING -d 192.0.2.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080 | | | | | |#這條規(guī)則在nat表的PREROUTING鏈中,將目標(biāo)端口為 80 的數(shù)據(jù)包的目標(biāo)地址,修改為 192.168.1.100,目標(biāo)端口修改為8080。 | | | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080 | | | | | |#轉(zhuǎn)發(fā)流量到其他IP | | | iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80 | | | | | |#如果進(jìn)來的route的訪問 目的地址: 192.168.23.252:80 ,就進(jìn)行DNAT轉(zhuǎn)換,把 目的地址改為: 192.168.23.223:80 | | | iptables -t nat -A PREROUTING -d 192.168.23.252 -p tcp --dport 80 -j DNAT --to-destination 192.168.23.223:80 | | | | | |#這條規(guī)則將所有進(jìn)入的TCP端口 1000到2000 的流量重定向到 192.168.1.100 的 3000到4000 端口。 | | | iptables -t nat -A PREROUTING -p tcp --dport 1000:2000 -j DNAT --to-destination 192.168.1.100 --to-ports 3000-4000 |
3.2.3 源網(wǎng)絡(luò)地址轉(zhuǎn)換(SNAT)
SNAT(Source NAT):修改數(shù)據(jù)包的源地址,通常用于將內(nèi)部網(wǎng)絡(luò)的私有 IP 地址轉(zhuǎn)換為外部網(wǎng)絡(luò)的公共 IP 地址。
MASQUERADE 會自動將數(shù)據(jù)包的源 IP 地址替換為網(wǎng)關(guān)的出接口 IP 地址(通常是公網(wǎng) IP 地址),并且在數(shù)據(jù)包返回時,再將目標(biāo) IP 地址轉(zhuǎn)換回原始的私有 IP 地址。
? 內(nèi)部主機 192.168.1.100 需要訪問外部網(wǎng)絡(luò)。
? 本機需要將內(nèi)部主機的源地址 192.168.1.100 修改為公網(wǎng)IP地址 192.0.2.1。
| | | | --- | --- | | |#在路由后,將內(nèi)部源地主,轉(zhuǎn)化成外部源地址 | | | iptables -t nat -A POSTROUTING -s <內(nèi)部源地址> -j SNAT --to-source <外部源地址> | | | | | |#如果內(nèi)部主機(192.168.1.100)要訪問外部網(wǎng)絡(luò),而本機(網(wǎng)關(guān))有一個公網(wǎng)IP地址192.0.2.1 | | |#當(dāng)內(nèi)部主機 192.168.1.100 發(fā)送數(shù)據(jù)包到外部網(wǎng)絡(luò)時,SNAT規(guī)則會將源地址 192.168.1.100 修改為 192.0.2.1。 | | | iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.100 -j SNAT --to-source 192.0.2.1 | | | | | |#當(dāng) FORWARD 出來后,訪問的 目的地址是 192.168.23.223,端口是80的。進(jìn)行DNAT地址轉(zhuǎn)換,把源地址改為 192.168.23.252 | | | iptables -t nat -A POSTROUTING -d 192.168.23.223 -p tcp --dport 80 -j SNAT --to-source 192.168.23.252:80 | | | | | |#偽裝流量(NAT) | | |#eth0:連接到互聯(lián)網(wǎng),具有公網(wǎng) IP 地址。 | | |#eth1:連接到局域網(wǎng),IP 地址為 192.168.1.1。 | | | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
3.3 防火墻日志
1. 配置日志存儲位置默認(rèn)情況下,iptables 日志會記錄到 /var/log/messages 或 /var/log/syslog 中。為了方便管理,可以將 iptables 日志重定向到單獨的文件。使用 rsyslog 配置
| | | | --- | --- | | |#1. 編輯 /etc/rsyslog.conf 或 /etc/rsyslog.d/ 目錄下的配置文件(例如 /etc/rsyslog.d/iptables.conf),添加以下內(nèi)容: | | |##將 iptables 日志重定向到單獨的文件 | | | :msg, contains,"IPTABLES"/var/log/iptables.log | | |##或者 | | |echo"kern.* /var/log/iptables.log">> /etc/rsyslog.conf | | | | | |#2. 保存文件后,重啟 rsyslog 服務(wù): | | | service rsyslog restart |
2. 配置 iptables 日志規(guī)則
| | | | --- | --- | | |#1. 記錄所有進(jìn)入的流量 | | | iptables -A INPUT -j LOG --log-prefix"IPTABLES-INPUT: "--log-level 7 | | | | | |#2. 記錄所有出去的流量 | | | iptables -A OUTPUT -j LOG --log-prefix"IPTABLES-OUTPUT: "--log-level info | | | | | |#3. 記錄所有轉(zhuǎn)發(fā)的流量 | | | iptables -A FORWARD -j LOG --log-prefix"IPTABLES-FORWARD: "| | | | | |#4. 限制日志速率(避免日志過多) | | | iptables -A INPUT -mlimit--limit5/min -j LOG --log-prefix"IPTABLES-INPUT: "|
? --log-prefix:添加日志前綴。用于在日志消息前添加自定義前綴,便于區(qū)分不同的日志來源
? --log-level:設(shè)置日志級別。指定日志的級別(優(yōu)先級)。默認(rèn)級別是 warning(4),可以根據(jù)需要調(diào)整
?emerg0#緊急情況(系統(tǒng)不可用)
?alert1#需要立即采取行動
?crit2#嚴(yán)重情況
?error3#錯誤情況
?warn4#警告情況(默認(rèn)級別)
?notice5#正常但重要的情況
?info6#一般信息
?debug7#調(diào)試信息
? -m limit --limit 5/min
? --limit 5/min:每分鐘最多記錄 5 條日志。
? --limit-burst 10:初始允許記錄 10 條日志(默認(rèn)值為 5)。
規(guī)則條件擴展語法
1. 匹配多端口(multiport)功能: 用于匹配多個源端口 (--sports) 或目標(biāo)端口 (--dports)。用途: 當(dāng)你需要針對多個端口設(shè)置相同的規(guī)則時,可以使用這個模塊來簡化配置。
| | | | --- | --- | | | -m multiport --sports/--dports, ,... | | | | | |#這條規(guī)則允許 TCP 流量通過 22 (SSH)、80 (HTTP) 和 443 (HTTPS) 端口。 | | | iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT | | | | | | --sports/--dports : | | |#--sports/--dports 支持連續(xù)端口,這條規(guī)則允許 8000 到9000 端口 | | | iptables -A INPUT -p tcp --dports 8000:9000 -j ACCEPT | | | | | |#結(jié)合使用:允許 TCP 流量通過 22, 80, 443, 8000 到 9000 等端口 | | | iptables -A INPUT -p tcp -m multiport --dports 22,80,443,8000:9000 -j ACCEPT |
2. 匹配 IP范圍(iprange)功能: 用于匹配源 IP 地址范圍 (--src-range) 或目標(biāo) IP 地址范圍 (--dst-range)。用途: 當(dāng)你需要針對一個 IP 地址范圍設(shè)置規(guī)則時,可以使用這個模塊。
| | | | --- | --- | | | -m iprange --src-range/--dst-range- | | | | | |#這條規(guī)則會丟棄來自 192.168.1.100 到 192.168.1.200 范圍內(nèi)的所有 IP 地址的流量。 | | | iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP |
3. 匹配 MAC地址(mac)功能: 用于匹配源 MAC 地址。用途: 當(dāng)你需要根據(jù)設(shè)備的 MAC 地址來設(shè)置規(guī)則時,可以使用這個模塊。
| | | | --- | --- | | | -m mac --mac-source| | | | | |#這條規(guī)則允許來自 MAC 地址為 002B4D:5E 的設(shè)備的流量。 | | | iptables -A INPUT -m mac --mac-source 002B4D:5E -j ACCEPT |
4. 匹配連接狀態(tài)(conntrack)功能: 用于匹配連接跟蹤狀態(tài) (--ctstate)。用途: 當(dāng)你需要根據(jù)連接的狀態(tài)(如 ESTABLISHED, RELATED, NEW 等)來設(shè)置規(guī)則時,可以使用這個模塊。
| | | | --- | --- | | | -m conntrack --ctstatectstate 參數(shù)介紹| | |#這條規(guī)則允許新的連接和已經(jīng)建立的連接通過。 | | | iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | | | | | |#類似于 conntrack 模塊,但 state 模塊是舊版的連接狀態(tài)匹配模塊,通常推薦使用 conntrack 模塊。 | | | -m state --state | | |#這條規(guī)則允許已經(jīng)建立的連接和相關(guān)的連接通過。 | | | iptables -A INPUT -m state --state NEW,ESTABLISHED -j ACCEPT |
?NEW: 新連接。
?ESTABLISHED: 已建立的連接。
?RELATED: 與現(xiàn)有連接相關(guān)的連接。
?INVALID: 無效的連接(如損壞的數(shù)據(jù)包或無效的狀態(tài))。
?UNTRACKED: 未被跟蹤的連接(通常是因為連接跟蹤表已滿或連接被顯式排除)。
?SNAT: 經(jīng)過源地址轉(zhuǎn)換的連接。
?DNAT: 經(jīng)過目標(biāo)地址轉(zhuǎn)換的連接。
?NONE: 沒有狀態(tài)的連接(通常用于無狀態(tài)協(xié)議,如 UDP 或 ICMP)。
IPTABLES 完整語法
用法:
| | | | --- | --- | | | iptables [ACD] 鏈名 規(guī)則條件 [選項] | | | iptables -I 鏈名 [規(guī)則編號] 規(guī)則條件 [選項] | | | iptables -R 鏈名 規(guī)則編號 規(guī)則條件 [選項] | | | iptables -D 鏈名 規(guī)則編號 [選項] | | | iptables -[LS] [鏈名 [規(guī)則編號]] [選項] | | | iptables -[FZ] [鏈名] [選項] | | | iptables -[NX] 鏈名 | | | iptables -E 舊鏈名 新鏈名 | | | iptables -P 鏈名 目標(biāo) [選項] | | | iptables -h (打印此幫助信息) |
參數(shù):
| | | | --- | --- | | |#命令: | | | --append -A 鏈名 #向鏈中追加規(guī)則 | | | --check -C 鏈名 #檢查規(guī)則是否存在 | | | --delete -D 鏈名 #從鏈中刪除匹配的規(guī)則 | | | --delete -D 鏈名 規(guī)則編號 #刪除鏈中規(guī)則編號(1 為第一個)的規(guī)則 | | | --insert -I 鏈名 [規(guī)則編號] #在鏈中插入規(guī)則,作為規(guī)則編號(默認(rèn)為 1,即第一個) | | | --replace -R 鏈名 規(guī)則編號 #替換鏈中規(guī)則編號(1 為第一個)的規(guī)則 | | | --list -L [鏈名 [規(guī)則編號]] #列出鏈中的規(guī)則或所有鏈的規(guī)則 | | | --list-rules -S [鏈名 [規(guī)則編號]] #打印鏈中的規(guī)則或所有鏈的規(guī)則 | | | --flush -F [鏈名] #刪除鏈中所有規(guī)則或所有鏈中的規(guī)則 | | | --zero -Z [鏈名 [規(guī)則編號]] #清空鏈或所有鏈中的計數(shù)器 | | | --new -N 鏈名 #創(chuàng)建新的用戶自定義鏈 | | | --delete-chain -X [鏈名] #刪除用戶自定義鏈 | | | --policy -P 鏈名 目標(biāo) #更改鏈的策略為目標(biāo) | | | --rename-chain -E 舊鏈名 新鏈名 #更改鏈名,(移動任何引用) | | | | | |#選項: | | | --ipv4 -4 #無(該行將被 ip6tables-restore 忽略) | | | --ipv6 -6 #錯誤(該行將被 iptables-restore 忽略) | | | [!] --protocol -p proto #協(xié)議:通過編號或名稱指定,例如 'tcp' | | | [!] --source -s address[/mask][...] #指定源地址 | | | [!] --destination -d address[/mask][...] #指定目的地 | | | | | | [!] --in-interface -i input name[+] #網(wǎng)絡(luò)接口名稱([+] 表示通配符) | | | --jump -j target #規(guī)則的目標(biāo)(可加載目標(biāo)擴展) | | | --goto -g chain #跳轉(zhuǎn)到鏈且不返回 | | | --match -m match #擴展匹配(可加載擴展) | | | --numeric -n #地址和端口的數(shù)字輸出 | | | | | | [!] --out-interface -o output name[+] #網(wǎng)絡(luò)接口名稱([+] 表示通配符) | | | --table -t table #要操作的表(默認(rèn)值:'filter') | | | --verbose -v #詳細(xì)模式 | | | --wait -w [seconds] #獲取 xtables 鎖的最大等待時間,超時則放棄 | | | --line-numbers #列表時打印行號 | | | --exact -x #展開數(shù)字(顯示確切值) | | | [!] --fragment -f #僅匹配第二個或后續(xù)的分片 | | | --modprobe=#使用此命令嘗試插入模塊 | | | --set-counters -c PKTS BYTES #在插入/追加時設(shè)置計數(shù)器 | | | [!] --version -V #顯示軟件包版本。 |
鏈接:https://www.cnblogs.com/librarookie/p/18786839
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1415瀏覽量
41247 -
Linux
+關(guān)注
關(guān)注
87文章
11496瀏覽量
213233 -
防火墻
+關(guān)注
關(guān)注
0文章
431瀏覽量
36133
原文標(biāo)題:Linux防火墻配置一頭霧水?iptables 從入門到實戰(zhàn)全攻略!
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Linux系統(tǒng)iptables和firewall防火墻的配置方法

Linux中使用Iptables實現(xiàn)簡單的網(wǎng)站防火墻

Linux內(nèi)核防火墻netfilter的原理和應(yīng)用
Linux防火墻的配置方法(firewalld服務(wù))
發(fā)現(xiàn) STM32 防火墻的安全配置
Linux下關(guān)閉防火墻的關(guān)閉及開放端口
Linux如何關(guān)閉防火墻
基于Linux防火墻的可視化管理系統(tǒng)的研究與實現(xiàn)
Linux新型內(nèi)核防火墻研究和應(yīng)用
Linux 防火墻配置基礎(chǔ)篇
Linux防火墻配置(iptables和firewalld)
Linux系統(tǒng)iptables防火墻配置案例

Linux軟件防火墻iptables詳解

如何在CentOS系統(tǒng)中配置防火墻

評論