Linux安全防火墻(iptables)配置策略分享
概念

防火墻(Firewall)是一種網(wǎng)絡(luò)安全設(shè)備或軟件,用于保護(hù)計(jì)算機(jī)網(wǎng)絡(luò)免受未經(jīng)授權(quán)的訪問(wèn)、惡意攻擊和惡意軟件的侵害。它充當(dāng)了網(wǎng)絡(luò)和互聯(lián)網(wǎng)與內(nèi)部網(wǎng)絡(luò)之間的關(guān)卡,對(duì)流量進(jìn)行過(guò)濾和監(jiān)控,以確保網(wǎng)絡(luò)安全和保護(hù)敏感數(shù)據(jù)。
防火墻可以部署在不同的層級(jí),包括網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層和應(yīng)用層,以提供不同級(jí)別的保護(hù)。有硬件防火墻和軟件防火墻兩種類(lèi)型,它們可以獨(dú)立運(yùn)行或組合使用,以實(shí)現(xiàn)全面的網(wǎng)絡(luò)安全。
綜而言之,防火墻是網(wǎng)絡(luò)安全的關(guān)鍵組成部分,有助于保護(hù)網(wǎng)絡(luò)和系統(tǒng)免受惡意攻擊、未經(jīng)授權(quán)的訪問(wèn)和數(shù)據(jù)泄露。在建立防火墻策略時(shí),必須根據(jù)網(wǎng)絡(luò)需求和威脅模型來(lái)定義規(guī)則,以確保網(wǎng)絡(luò)的安全性和可用性。
除此以外,還有防水墻,ensp:不透明的工作方式,就是你干什么都知道,但你自己不知道。
防火墻的主要功能和特點(diǎn)
- 包過(guò)濾: 防火墻通過(guò)檢查網(wǎng)絡(luò)數(shù)據(jù)包的源地址、目標(biāo)地址、端口號(hào)和協(xié)議等信息,根據(jù)預(yù)定義的規(guī)則來(lái)決定是否允許或拒絕這些數(shù)據(jù)包通過(guò)。這種方式可以防止未經(jīng)授權(quán)的訪問(wèn)。
- 狀態(tài)跟蹤: 某些防火墻能夠跟蹤連接的狀態(tài),允許有關(guān)已建立的連接的數(shù)據(jù)包通過(guò),從而實(shí)現(xiàn)應(yīng)用層協(xié)議的連接。這有助于支持網(wǎng)絡(luò)應(yīng)用程序的正常通信。
- 代理服務(wù): 防火墻可以充當(dāng)代理服務(wù)器,對(duì)外部請(qǐng)求進(jìn)行代理,以隱藏內(nèi)部網(wǎng)絡(luò)的細(xì)節(jié)和提供額外的安全性。
- 應(yīng)用層檢測(cè): 高級(jí)防火墻可以檢查數(shù)據(jù)包中的內(nèi)容,以識(shí)別特定應(yīng)用程序或惡意軟件,從而提供更精細(xì)的控制和安全。
- 虛擬專(zhuān)用網(wǎng)絡(luò)(VPN)支持: 防火墻通常支持建立虛擬專(zhuān)用網(wǎng)絡(luò),以加密和安全地連接遠(yuǎn)程站點(diǎn)或用戶(hù)。
- 日志記錄和報(bào)警: 防火墻可以記錄網(wǎng)絡(luò)活動(dòng)并生成報(bào)告,以幫助管理員監(jiān)控和分析網(wǎng)絡(luò)流量,識(shí)別潛在的威脅。
- 更新和規(guī)則管理: 防火墻的規(guī)則和過(guò)濾策略可以進(jìn)行定期更新,以應(yīng)對(duì)新的威脅和安全漏洞。
防火墻分類(lèi)
按部署位置分類(lèi):
- 邊界防火墻(Perimeter Firewall):位于內(nèi)部網(wǎng)絡(luò)和外部網(wǎng)絡(luò)之間的邊界,用于過(guò)濾進(jìn)入和離開(kāi)內(nèi)部網(wǎng)絡(luò)的流量,通常用于保護(hù)整個(gè)內(nèi)部網(wǎng)絡(luò)。
- 個(gè)人防火墻(Personal Firewall):通常安裝在個(gè)人計(jì)算機(jī)上,用于保護(hù)個(gè)人計(jì)算機(jī)免受惡意軟件和網(wǎng)絡(luò)攻擊的侵害。
- 混合防火墻(Hybrid Firewall):結(jié)合了邊界防火墻和個(gè)人防火墻的特性,可在組織和個(gè)人層面提供安全性。
按技術(shù)分類(lèi):
- 包過(guò)濾型防火墻(Packet Filtering Firewall):基于數(shù)據(jù)包的源地址、目標(biāo)地址、端口號(hào)和協(xié)議等信息來(lái)過(guò)濾流量。iptables就是包過(guò)濾防火墻
- 應(yīng)用代理型防火墻(Application Proxy Firewall):代理服務(wù)器充當(dāng)客戶(hù)端和服務(wù)器之間的中介,檢查和控制應(yīng)用層數(shù)據(jù),提供更精細(xì)的應(yīng)用層安全。
- 復(fù)合型防火墻(Next-Generation Firewall):結(jié)合了包過(guò)濾和應(yīng)用代理功能,具備更全面的安全性和應(yīng)用層檢測(cè)能力。
按硬件或軟件分類(lèi):
- 軟件防火墻(Software Firewall):運(yùn)行在一臺(tái)服務(wù)器或計(jì)算機(jī)上的軟件,通常用于保護(hù)單個(gè)設(shè)備或主機(jī)。
- 硬件防火墻(Hardware Firewall):獨(dú)立的硬件設(shè)備,通常位于網(wǎng)絡(luò)的入口點(diǎn),用于保護(hù)整個(gè)網(wǎng)絡(luò)。
按防火墻結(jié)構(gòu)分類(lèi):
- 單一主機(jī)防火墻(Host-based Firewall):部署在單個(gè)主機(jī)上,用于保護(hù)該主機(jī)免受攻擊。
- 路由器集成式防火墻(Router-Integrated Firewall):防火墻功能集成在路由器中,用于保護(hù)整個(gè)網(wǎng)絡(luò)。
- 分布式防火墻(Distributed Firewall):多個(gè)防火墻設(shè)備協(xié)同工作,以提供更大規(guī)模的網(wǎng)絡(luò)保護(hù)。
按性能分類(lèi):
百兆級(jí)防火墻(100Mbps Firewall):能夠處理百兆位速度的網(wǎng)絡(luò)流量。
千兆級(jí)防火墻(1Gbps Firewall):能夠處理千兆位速度的網(wǎng)絡(luò)流量。
按使用方法分類(lèi):
網(wǎng)絡(luò)層防火墻(Network Layer Firewall):操作在網(wǎng)絡(luò)層,通常用于過(guò)濾IP數(shù)據(jù)包。
物理層防火墻(Physical Layer Firewall):操作在物理數(shù)據(jù)鏈路層,用于控制網(wǎng)絡(luò)物理連接。
鏈路層防火墻(Link Layer Firewall):操作在數(shù)據(jù)鏈路層,通常用于控制訪問(wèn)局域網(wǎng)內(nèi)的網(wǎng)絡(luò)設(shè)備。
其他概念
通信五要素:
源ip和目的ip
源端口和目的端口
協(xié)議(tcp/udp)
通信四要素
源ip和目的ip
源端口和目的端口
用戶(hù)態(tài)和內(nèi)核態(tài)

用戶(hù)態(tài)防火墻:面向使用對(duì)象,就是使用工具,配置策略
- 位置: 用戶(hù)態(tài)防火墻是運(yùn)行在操作系統(tǒng)的用戶(hù)空間(User Space)的防火墻。它是一個(gè)獨(dú)立的應(yīng)用程序,不直接訪問(wèn)操作系統(tǒng)內(nèi)核。
- 特點(diǎn): 用戶(hù)態(tài)防火墻通常是第三方應(yīng)用程序,它們使用操作系統(tǒng)提供的網(wǎng)絡(luò)套接字 API 來(lái)監(jiān)控和控制網(wǎng)絡(luò)流量。它們提供了更靈活的配置選項(xiàng),允許用戶(hù)根據(jù)需要定義規(guī)則和策略。
- 優(yōu)點(diǎn): 用戶(hù)態(tài)防火墻具有更高的可配置性,可以支持高級(jí)的應(yīng)用層規(guī)則和應(yīng)用程序特定的策略。它們通常更容易管理和調(diào)整,適用于特定網(wǎng)絡(luò)應(yīng)用的定制需求。
- 缺點(diǎn): 用戶(hù)態(tài)防火墻的性能通常較低,因?yàn)樗鼈冃枰獙⒕W(wǎng)絡(luò)數(shù)據(jù)包從內(nèi)核空間復(fù)制到用戶(hù)空間,然后再進(jìn)行處理。這可能會(huì)導(dǎo)致性能瓶頸。
內(nèi)核態(tài)防火墻:代碼層(開(kāi)發(fā))
- 位置: 內(nèi)核態(tài)防火墻是運(yùn)行在操作系統(tǒng)內(nèi)核空間(Kernel Space)的防火墻。它直接與操作系統(tǒng)內(nèi)核交互,可以更有效地控制網(wǎng)絡(luò)流量。
- 特點(diǎn): 內(nèi)核態(tài)防火墻通常是操作系統(tǒng)的一部分,它們能夠在數(shù)據(jù)包到達(dá)操作系統(tǒng)時(shí)立即處理,無(wú)需復(fù)制到用戶(hù)空間。
- 優(yōu)點(diǎn): 內(nèi)核態(tài)防火墻具有較高的性能,因?yàn)樗鼈兛梢栽诓僮飨到y(tǒng)內(nèi)核中直接操作。它們適用于需要快速和高效的網(wǎng)絡(luò)流量處理的情況,如防止網(wǎng)絡(luò)攻擊和快速數(shù)據(jù)包過(guò)濾。
- 缺點(diǎn): 內(nèi)核態(tài)防火墻通常具有較少的可配置性,因?yàn)樗鼈兛赡苁芟抻趦?nèi)核模塊的特定規(guī)則。定制化程度較低,難以滿(mǎn)足某些高級(jí)網(wǎng)絡(luò)需求。
iptables就屬于用戶(hù)態(tài)防火墻,配置規(guī)則生效后,立即生效,無(wú)需重啟。centos7之前,iptables是默認(rèn)配置,現(xiàn)在默認(rèn)是firewalld。centos7之后要使用iptables要把firewalld關(guān)閉

四個(gè)表五個(gè)鏈


在 Linux 上,iptables 防火墻系統(tǒng)通常使用四個(gè)主要表來(lái)控制網(wǎng)絡(luò)數(shù)據(jù)包的過(guò)濾和處理。這四個(gè)表分別是:????filter????、????mangle????、????nat???? 和 ????raw????。每個(gè)表有不同的目的和功能,用于管理不同層次的數(shù)據(jù)包處理。
四個(gè)表
raw 表:關(guān)閉啟用的連接跟蹤機(jī)制,加快封包穿越防火墻速度
用途:
raw表用于配置原始數(shù)據(jù)包處理,通常用于在數(shù)據(jù)包進(jìn)入連接跟蹤系統(tǒng)之前進(jìn)行特殊處理,如連接跟蹤追蹤。鏈:
raw表包括兩個(gè)主要鏈:PREROUTING(數(shù)據(jù)包到達(dá)路由前處理)和OUTPUT(出站數(shù)據(jù)包處理)。
mangle 表:修改數(shù)據(jù)標(biāo)記位規(guī)則表
用途:
mangle表主要用于數(shù)據(jù)包的修改和特殊處理,如修改數(shù)據(jù)包頭部信息、更改數(shù)據(jù)包的 TOS(Type of Service)字段等。鏈:
mangle表包括一系列鏈,如PREROUTING(數(shù)據(jù)包到達(dá)路由前處理)、INPUT(進(jìn)入系統(tǒng)前處理)、FORWARD(轉(zhuǎn)發(fā)前處理)等。
nat 表:network address translation 地址轉(zhuǎn)換規(guī)則表
用途:
nat(Network Address Translation)表用于進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換,允許內(nèi)部網(wǎng)絡(luò)中的多個(gè)設(shè)備共享單一公共 IP 地址,以及實(shí)現(xiàn)端口映射和端口轉(zhuǎn)發(fā)等功能。鏈:
nat表包括三個(gè)主要鏈:PREROUTING(數(shù)據(jù)包到達(dá)路由前處理,用于端口映射和 DNAT)、POSTROUTING(數(shù)據(jù)包離開(kāi)路由后處理,用于源地址轉(zhuǎn)換和 SNAT)、OUTPUT(出站數(shù)據(jù)包處理,通常用于本地流量的 NAT)。
filter 表:過(guò)濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過(guò)濾符合條件的數(shù)據(jù)包,默認(rèn)表
用途:
filter表是最常用的表,用于控制數(shù)據(jù)包的過(guò)濾和策略路由。鏈:
filter表包括三個(gè)主要鏈:INPUT(用于處理進(jìn)入系統(tǒng)的數(shù)據(jù)包)、FORWARD(用于處理轉(zhuǎn)發(fā)的數(shù)據(jù)包)和OUTPUT(用于處理離開(kāi)系統(tǒng)的數(shù)據(jù)包)。
這四個(gè)表共同構(gòu)成了 iptables 防火墻的核心,允許管理員通過(guò)配置規(guī)則和鏈來(lái)控制數(shù)據(jù)包的流向、處理和修改。這種細(xì)粒度的控制有助于實(shí)施網(wǎng)絡(luò)安全策略和網(wǎng)絡(luò)地址轉(zhuǎn)換等功能。管理員可以使用不同鏈和規(guī)則來(lái)自定義防火墻行為,以滿(mǎn)足網(wǎng)絡(luò)環(huán)境的需求。
五條鏈
PREROUTING鏈:處理數(shù)據(jù)包進(jìn)入本機(jī)之前的規(guī)則。
INPUT鏈:處理數(shù)據(jù)包進(jìn)入本機(jī)的規(guī)則。
FORWARD鏈:處理數(shù)據(jù)包轉(zhuǎn)發(fā)到其他主機(jī)的規(guī)則。
OUTPUT鏈:處理本機(jī)發(fā)出的數(shù)據(jù)包的規(guī)則,一般不做處理。
POSTROUTING鏈:處理數(shù)據(jù)包離開(kāi)本機(jī)之后的規(guī)則。
四表五鏈
- 規(guī)則表的作用:容納各種規(guī)則鏈
- 規(guī)則鏈的作用:容納各種防火墻規(guī)則
- 總結(jié):表里有鏈,鏈里有規(guī)則
數(shù)據(jù)包過(guò)濾的匹配流程

- 當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
- 如果數(shù)據(jù)包是進(jìn)入本機(jī)的,數(shù)據(jù)包就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈。 數(shù)據(jù)包到達(dá)INPUT鏈后, 任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包, 這些數(shù)據(jù)包經(jīng)過(guò)OUTPUT鏈,然后到達(dá)
- 如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)向右移動(dòng), 經(jīng)過(guò)FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出
三種報(bào)文流向
流入本機(jī):PREROUTING --> INPUT-->用戶(hù)空間進(jìn)程 httpd服務(wù)-目的轉(zhuǎn)換-httpd 流出本機(jī):用戶(hù)空間進(jìn)程 -->OUTPUT--> POSTROUTING httpd服務(wù)-out-源地址 轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING -----FOR------
規(guī)則內(nèi)的匹配順序
自上向下按順序依次進(jìn)行檢查,找到相匹配的規(guī)則即停止(LOG策略例外,表示記錄相關(guān)日志) 若在該鏈內(nèi)找不到相匹配的規(guī)則,則按該鏈的默認(rèn)策略處理(未修改的狀況下,默認(rèn)策略為允許)
iptables
iptables命令的格式和相關(guān)選項(xiàng)

管理選項(xiàng)
匹配規(guī)則:從上到下按照順序依次檢查,找到匹配的規(guī)則立刻停止匹配。找到匹配規(guī)則,會(huì)按照鏈的默認(rèn)規(guī)則進(jìn)行執(zhí)行。如果不指定表名,默認(rèn)就是filter
-A:向指定的鏈(如INPUT、OUTPUT、FORWARD)的末尾追加一條規(guī)則。
iptables -A INPUT (操作)
-I:在指定鏈的指定位置插入一條規(guī)則,根據(jù)編號(hào)來(lái)進(jìn)行插入,不指定序號(hào),直接插入當(dāng)前鏈中的第一條(不推薦)。
iptables -I INPUT (操作)
-P:設(shè)置指定鏈的默認(rèn)策略(如ACCEPT、DROP)。
iptables -P OUTPUT ACCEPT (操作)
-D:從指定的鏈中刪除一條規(guī)則。
iptables -t nat -D INPUT 2 (操作)
-R:替換指定鏈中的一條規(guī)則。
iptables -t nat -R INPUT (操作)
-L:列出指定鏈中的所有規(guī)則。
iptables -t nat -L (查看)
-n:所有字段以數(shù)字形式展示
iptables -L -n,iptables -nL,iptables -vnL (查看)
-v:顯示詳細(xì)信息
常跟-L一起使用 (查看)
-F:清除指定鏈中的所有規(guī)則。
iptables -F
-N:創(chuàng)建一個(gè)新的自定義鏈。
iptables -N
-X:刪除一個(gè)自定義鏈。
iptables -X
-Z:將所有鏈中的數(shù)據(jù)包計(jì)數(shù)器歸零。
iptables -Z
-S:看鏈的所有規(guī)則或者某個(gè)鏈的規(guī)則/某個(gè)具體規(guī)則后面跟編號(hào)
匹配條件
匹配條件是用來(lái)確定是否應(yīng)用某個(gè)規(guī)則的依據(jù)。
-p:指定傳輸層協(xié)議(如TCP、UDP、ICMP)。-s:指定源IP地址或地址范圍。-d:指定目標(biāo)IP地址或地址范圍。-i:指定進(jìn)入網(wǎng)絡(luò)接口。-o:指定離開(kāi)網(wǎng)絡(luò)接口。--sport:指定源端口號(hào)或端口范圍。--dport:指定目標(biāo)端口號(hào)或端口范圍。--protocol:指定協(xié)議(與-p類(lèi)似)。-m state:根據(jù)連接狀態(tài)匹配規(guī)則(如ESTABLISHED、RELATED)。-m multiport:匹配多個(gè)端口。-m mac:根據(jù)MAC地址匹配規(guī)則。-m comment:為規(guī)則添加注釋。
數(shù)據(jù)包的控制類(lèi)型
- ACCPET:允許數(shù)據(jù)包通過(guò)
- DROP:直接丟棄數(shù)據(jù)包,沒(méi)有任何回應(yīng)信息
- REJECT:拒絕數(shù)據(jù)包通過(guò),會(huì)給一個(gè)響應(yīng)信息
- SNAT:修改數(shù)據(jù)包的源地址
- DNAT:修改數(shù)據(jù)包的目的地址
使用實(shí)例
實(shí)驗(yàn)準(zhǔn)備
CentOS7默認(rèn)使用firewalld防火墻,沒(méi)有安裝iptables,若想使用iptables防火墻。必須先關(guān)閉firewalld防火墻, 再安裝iptables
bash systemctl stop firewalld.service setenforce 0 systemctl disable --now firewalld.service
開(kāi)機(jī)不自啟 并且立即關(guān)閉
systemctl enable --now firewalld.service
開(kāi)機(jī)自啟 并且 立即開(kāi)啟
yum -y install iptables iptables-services systemctl start iptables.service systemctl enable iptables.service
查看
粗略查看默認(rèn)規(guī)則:
[root@localhost ~]#iptables -L
數(shù)字化的形式查看規(guī)則: [root@localhost ~]#iptables -nL
注意:當(dāng)-nL同時(shí)使用時(shí),n一定要在L 的前面,否則會(huì)報(bào)錯(cuò),使用-vnL時(shí)也是如此,L要在最后面
指定表查看:
[root@localhost ~]#iptables -t filter -vnL
查看指定表中的指定鏈
[root@localhost ~]#iptables -t filter -vnL INPUT #不指定表,默認(rèn)就是filter
- pkts:對(duì)應(yīng)規(guī)則匹配到的報(bào)文的個(gè)數(shù)。
- bytes:對(duì)應(yīng)匹配到的報(bào)文包的大小總和。
- target:規(guī)則對(duì)應(yīng)的target,往往表示規(guī)則對(duì)應(yīng)的”動(dòng)作”,即規(guī)則匹配成功后需要采取的措施。
- prot:表示規(guī)則對(duì)應(yīng)的協(xié)議,是否只針對(duì)某些協(xié)議應(yīng)用此規(guī)則。
- opt:表示規(guī)則對(duì)應(yīng)的選項(xiàng)。
- in:表示數(shù)據(jù)包由哪個(gè)接口(網(wǎng)卡)流入,我們可以設(shè)置通過(guò)哪塊網(wǎng)卡流入的報(bào)文需要匹配當(dāng)前規(guī)則。
- out:表示數(shù)據(jù)包由哪個(gè)接口(網(wǎng)卡)流出,我們可以設(shè)置通過(guò)哪塊網(wǎng)卡流出的報(bào)文需要匹配當(dāng)前規(guī)則。
- source:表示規(guī)則對(duì)應(yīng)的源頭地址,可以是一個(gè)IP,也可以是一個(gè)網(wǎng)段。
- destination:表示規(guī)則對(duì)應(yīng)的目標(biāo)地址??梢允且粋€(gè)IP,也可以是一個(gè)網(wǎng)段。

列出當(dāng)前防火墻規(guī)則,并顯示每條規(guī)則的行號(hào)、詳細(xì)信息、以數(shù)值格式顯示的 IP 地址和端口號(hào)
iptables: 這是用于配置Linux內(nèi)核防火墻規(guī)則的命令。
-vnL: 這是一組參數(shù),具體含義如下:
-v: 用于顯示更詳細(xì)的信息,包括數(shù)據(jù)包計(jì)數(shù)和字節(jié)計(jì)數(shù)。-n: 用于顯示數(shù)值格式的 IP 地址和端口號(hào),而不是解析為主機(jī)名和服務(wù)名稱(chēng)。-L: 用于列出防火墻規(guī)則。
--line-numbers: 這個(gè)參數(shù)用于顯示規(guī)則的行號(hào)(line numbers),以便更容易識(shí)別和引用特定規(guī)則。
這個(gè)命令的作用是列出當(dāng)前防火墻規(guī)則,并顯示每條規(guī)則的行號(hào)、詳細(xì)信息、以數(shù)值格式顯示的 IP 地址和端口號(hào)。
添加規(guī)則
添加新的防火墻規(guī)則時(shí),使用管理選項(xiàng)“-A”、“-I”,前者用來(lái)追加規(guī)則,后者用來(lái)插入規(guī)則。
禁止所有主機(jī)ping本機(jī)和允許(如果先允許,那么就不會(huì)禁止。匹配到了就不在匹配后面的規(guī)則)

iptables: 這是用于配置Linux防火墻規(guī)則的命令。
-t filter: 這部分指定了使用名為 "filter" 的表(table)。iptables支持不同的表,用于管理不同類(lèi)型的規(guī)則。 "filter" 表用于過(guò)濾數(shù)據(jù)包。-A INPUT: 這部分表示要將規(guī)則附加(Append)到 INPUT 鏈中。"INPUT" 鏈用于處理進(jìn)入系統(tǒng)的數(shù)據(jù)包。-p icmp: 這部分指定了要匹配的協(xié)議類(lèi)型,這里是 ICMP 協(xié)議。ICMP(Internet Control Message Protocol)是用于網(wǎng)絡(luò)通信和診斷的協(xié)議,包括 ping 請(qǐng)求和響應(yīng)。-j ACCEPT: 這部分表示如果數(shù)據(jù)包匹配了上述條件(ICMP協(xié)議),則將其接受(ACCEPT)。這意味著允許 ICMP 數(shù)據(jù)包通過(guò)防火墻,允許系統(tǒng)響應(yīng) ping 請(qǐng)求和其他 ICMP 請(qǐng)求。
因此,這個(gè)命令的作用是將一個(gè)規(guī)則添加到 "filter" 表的 "INPUT" 鏈中,以允許所有的 ICMP 數(shù)據(jù)包通過(guò)防火墻。
指定序號(hào)插入
插入到第一條:iptables -t filter -I INPUT 1 -p icmp -j ACCEPT
iptables: 這是用于配置Linux防火墻規(guī)則的命令。-t filter: 這部分指定了使用名為 "filter" 的表(table)。 "filter" 表用于過(guò)濾數(shù)據(jù)包。-I INPUT 1: 這部分表示要在 "INPUT" 鏈的位置 1(即第一個(gè)規(guī)則位置)插入(Insert)規(guī)則。之前的命令使用的是 -A INPUT,將規(guī)則附加到 INPUT 鏈的末尾,而這個(gè)命令將規(guī)則插入到 INPUT 鏈的開(kāi)頭。-p icmp:這部分指定了要匹配的協(xié)議類(lèi)型,這里是 ICMP 協(xié)議。-j ACCEPT: 這部分表示如果數(shù)據(jù)包匹配了上述條件(ICMP協(xié)議),則將其接受(ACCEPT),即允許 ICMP 數(shù)據(jù)包通過(guò)防火墻。
因此,這個(gè)命令的作用是將一個(gè)規(guī)則插入到 "filter" 表的 "INPUT" 鏈的第一個(gè)位置,以允許所有的 ICMP 數(shù)據(jù)包通過(guò)防火墻。
禁止任何主機(jī)tcp

拒絕來(lái)自特定源IP地址 192.168.41.13,目標(biāo)端口為 80 的 TCP 數(shù)據(jù)包。

iptables -t filter -I INPUT 1 -s 192.168.41.13 -p tcp --dport 80 -j REJECT
-t filter:-t參數(shù)指定了要操作的表(table),在這里是filter表。filter表用于數(shù)據(jù)包過(guò)濾,允許或者拒絕數(shù)據(jù)包通過(guò)防火墻。-I INPUT 1:-I參數(shù)表示要在特定鏈(chain)中插入一條規(guī)則。INPUT鏈?zhǔn)侵笖?shù)據(jù)包進(jìn)入本地系統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)包處理鏈。1表示將規(guī)則插入到鏈的第一個(gè)位置。-s 192.168.41.13:-s參數(shù)用于指定源 IP 地址,這個(gè)規(guī)則將僅適用于源IP地址為192.168.41.13的數(shù)據(jù)包。-p tcp:-p參數(shù)指定匹配的協(xié)議類(lèi)型,這里是 TCP 協(xié)議。--dport 80:--dport參數(shù)指定目標(biāo)端口號(hào)為80,這意味著這個(gè)規(guī)則將匹配目標(biāo)端口號(hào)為80的 TCP 數(shù)據(jù)包。-j REJECT:-j參數(shù)用于指定如果規(guī)則匹配成功,應(yīng)該執(zhí)行的動(dòng)作。在這個(gè)規(guī)則中,當(dāng)匹配成功時(shí),動(dòng)作是拒絕(REJECT)匹配的數(shù)據(jù)包。這將導(dǎo)致系統(tǒng)向發(fā)送方發(fā)送拒絕連接的消息。
拒絕多態(tài)主機(jī),用,連接ip
iptables -t filter -A INPUT -s 192.168.41.11,192.168.41.13 -p icmp -j REJECT
拒絕單臺(tái)主機(jī),其他主機(jī)可以連接
iptables -t filter -A INPUT -s 192.168.41.11 -p icmp -j REJECT

拒絕主機(jī)發(fā)出數(shù)據(jù)包
iptables -t filter -A OUTPUT -s 192.168.41.10 -p icmp -j REJECT

刪除規(guī)則
根據(jù)序號(hào)刪除內(nèi)容 iptables -D INPUT 1 #刪除指定的INPUT鏈中的第一條規(guī)則
從 INPUT 鏈中刪除第二條規(guī)則
iptables -D INPUT 2
iptables: 這是用于配置Linux內(nèi)核防火墻規(guī)則的命令。 -D INPUT 2: -D 參數(shù)表示刪除規(guī)則,INPUT 是規(guī)則所在的鏈(chain),2 是要?jiǎng)h除的規(guī)則的位置或規(guī)則編號(hào)。在這個(gè)例子中,它指示刪除 INPUT 鏈中的第二條規(guī)則。 這個(gè)命令的作用是從 INPUT 鏈中刪除第二條規(guī)則。防火墻規(guī)則是按順序執(zhí)行的,所以刪除一條規(guī)則后,后續(xù)規(guī)則的編號(hào)會(huì)向前移動(dòng)。
按照內(nèi)容匹配刪除
內(nèi)容匹配刪除(有兩個(gè)相同的則作用為去重) 如果有兩個(gè)重復(fù)的規(guī)則,則刪除序號(hào)較小的 [root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #刪除序號(hào)小的 演示刪除序號(hào)較小的 [root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT [root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT [root@localhost ~]# iptables -nL INPUT --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 [root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #第二次就時(shí)刪除指定。 [root@localhost ~]# iptables -nL INPUT --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 注意:按照內(nèi)容匹配刪除規(guī)則,只能每次刪除內(nèi)容相同序號(hào)較小的規(guī)則。 直到刪除最后一條時(shí),才能將該規(guī)則全部清除 。 一定要報(bào)保證該匹配的內(nèi)容存在,且完全匹配規(guī)則才能刪除,不然報(bào)錯(cuò)。
修改規(guī)則
-R 直接修改。 為了保險(xiǎn)起見(jiàn),我們可以嘗試著先添加一條新的規(guī)則, 確保新規(guī)則不會(huì)帶來(lái)任何不利的影響再刪除舊的規(guī)則(也能達(dá)到替換的效果) [root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT [root@localhost ~]# iptables -nL INPUT --line-number #查看規(guī)則 Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 [root@localhost ~]# iptables -R INPUT 1 -p icmp -j REJECT #替換 [root@localhost ~]# iptables -nL INPUT --line-number #ACCEPT替換成了REJECT Chain INPUT (policy ACCEPT) num target prot opt source destination 1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
設(shè)置默認(rèn)策略
指定當(dāng)沒(méi)有與已有規(guī)則匹配的情況下,如何處理進(jìn)入系統(tǒng)的數(shù)據(jù)包
iptables -P INPUT DROP
這個(gè)命令的效果是,如果沒(méi)有特定規(guī)則匹配一個(gè)進(jìn)入系統(tǒng)的數(shù)據(jù)包,那么該數(shù)據(jù)包將被拒絕,從而增強(qiáng)了系統(tǒng)的安全性。
-P INPUT意味著這個(gè)策略將應(yīng)用于 "INPUT" 鏈,用于處理進(jìn)入系統(tǒng)的數(shù)據(jù)包。DROP意味著默認(rèn)情況下,所有不匹配已有規(guī)則的進(jìn)入數(shù)據(jù)包將被丟棄(DROP),即拒絕通過(guò)防火墻。
設(shè)置一條允許,相當(dāng)于白名單
iptables -t filter -A INPUT -p ICMP -j ACCEPT
1.-F 僅僅是清空鏈中的規(guī)則,并不影響 -P 設(shè)置的規(guī)則,默認(rèn)規(guī)則需要手動(dòng)進(jìn)行修改 2.-P 設(shè)置了DROP后,使用 -F 一定要小心!
#防止把允許遠(yuǎn)程連接的相關(guān)規(guī)則清除后導(dǎo)致無(wú)法遠(yuǎn)程連接主機(jī),此情況如果沒(méi)有保存規(guī)則可重啟主機(jī)解決
此時(shí)的解決方案有三種:
- 第一種:我的防火墻設(shè)置只是臨時(shí)設(shè)置,并為保存,重啟服務(wù)器即可
- 第二種:操作服務(wù)器,重啟iptables服務(wù)
- 第三種:進(jìn)入機(jī)房操作該服務(wù)器(將設(shè)置恢復(fù),重新修改規(guī)則)炸!
在生產(chǎn)中都是默認(rèn)DROP
通用匹配
網(wǎng)絡(luò)協(xié)議、IP地址、網(wǎng)絡(luò)接口等條件。
- 協(xié)議匹配: -p協(xié)議名
- 地址匹配: -s 源地址、-d目的地址
- #可以是IP、網(wǎng)段、域名、空(任何地址)
- 接口匹配: -i入站網(wǎng)卡、-o出站網(wǎng)卡
- 感嘆號(hào)”!”表示取反
網(wǎng)絡(luò)協(xié)議
[root@localhost ~]# iptables -A INPUT ! -p icmp -j ACCEPT #除了icmp以外,所有的協(xié)議都可以進(jìn)入
#這是假的取反。定義的默認(rèn)策略還在執(zhí)行ACCEPT,只有該變默認(rèn)策略,才能生效
[root@localhost ~]#iptables -P INPUT DROP #這時(shí)候才能取反
其他的服務(wù)不受影響,這個(gè)時(shí)候,把策略清空,所有的協(xié)議都將被DROP
[root@localhost ~]#iptables -F
只能進(jìn)虛擬機(jī)重啟
IP地址
[root@localhost ~]# iptables -A INPUT -s 192.168.41.13 -j DROP #禁止22的數(shù)據(jù)進(jìn)入
IP范圍匹配
-m iprange --src-range 源IP范圍
-m iprange --dst-range 目的IP范圍
[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
禁止網(wǎng)段內(nèi)的ip地址ping主機(jī)
網(wǎng)絡(luò)接口
[root@localhost ~]# iptables -I INPUT 1 -i ens33 -s 192.168.41.0/24 -j DROP #禁止指定的網(wǎng)絡(luò)設(shè)備名稱(chēng)ens33的所有網(wǎng)段
使整個(gè)網(wǎng)段不能用指定的端口
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.41.0/24 -p tcp --dport 80 -j REJECT #禁止整個(gè)網(wǎng)段訪問(wèn)80端口
端口匹配
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22:80 -j REJECT #禁止整個(gè)網(wǎng)段訪問(wèn)22和80端口
這里寫(xiě)發(fā)要注意,小的數(shù)字寫(xiě)在前面,大的寫(xiě)在后面
多端口匹配
要求以“-m 擴(kuò)展模塊”的形式明確指出類(lèi)型,包括多端口、MAC地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT 多端口匹配,一次性禁止多個(gè)tcp網(wǎng)絡(luò)協(xié)議的端口匹配規(guī)則 [root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP 多端口匹配,一次性放通多個(gè)udp網(wǎng)絡(luò)協(xié)議的端口匹配規(guī)則
MAC匹配
-m mac --mac-source MAC地址 [root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP
隱藏?cái)U(kuò)展模塊
iptables在使用-p 指定協(xié)議時(shí),若指明特定協(xié)議后就無(wú)須再使用-m指明擴(kuò)展模塊的擴(kuò)展機(jī)制。 例如若已經(jīng)指明是 -p tcp協(xié)議則使用--dport及--sport等tcp模塊內(nèi)容時(shí)即可省略-m tcp。
策略備份與還原


yum -y install iptables iptables-services systemctl start iptables.service systemctl enable iptables.service
我們對(duì)iptables命令行中的設(shè)置,都是臨時(shí)設(shè)置,只要遇到服務(wù)器關(guān)機(jī),或者服務(wù)重啟時(shí),
所有的設(shè)置都會(huì)清空且還原為原本的設(shè)置。
為此,我們可以對(duì)已經(jīng)測(cè)試完畢符合我們需求的防火墻設(shè)置進(jìn)行備份,在必要時(shí),可以一鍵還原
備份iptables設(shè)置
格式:iptables-save >/指定的文件
[root@localhost ~]# iptables-save >/opt/iptables.bak
一鍵導(dǎo)入,設(shè)置為當(dāng)前防火墻設(shè)置
[root@localhost ~]#iptables-restore </opt/iptables.bak
修改iptables的默認(rèn)設(shè)置
iptables的默認(rèn)配置文件存在于 cat /etc/sysconfig/iptables
直接把配置導(dǎo)入配置文件:
cat /opt/iptables.bak >/etc/sysconfig/iptables
立即生效了,實(shí)驗(yàn)環(huán)境下,了解就可以了。不要嘗試
[root@localhost opt]# systemctl restart iptables #重啟之后生效的就是配置文件中的內(nèi)容,操作需謹(jǐn)慎,
注意拍快照,方便還原
自定義鏈
創(chuàng)建自定義鏈
iptables -N MYCHAIN
向自定義鏈添加規(guī)則,例如
iptables -A MYCHAIN -s 192.168.1.0/24 -j DROP
這條規(guī)則將禁止192.168.1.0/24網(wǎng)段的訪問(wèn),丟棄源地址的流量。

可以使用類(lèi)似的命令來(lái)添加更多規(guī)則到自定義鏈中,根據(jù)需求進(jìn)行配置。如果想要?jiǎng)h除自定義鏈,確保滿(mǎn)足以下條件:
- 自定義鏈沒(méi)有被任何默認(rèn)鏈引用,即自定義鏈的引用計(jì)數(shù)為0。
- 自定義鏈中沒(méi)有任何規(guī)則,即自定義鏈為空。
可以使用-x選項(xiàng)來(lái)刪除自定義鏈,例如:
iptables -X MYCHAIN
示例
自定義鏈?zhǔn)褂?/strong>
- 自定義鏈添加:iptables -N custom(鏈名) 創(chuàng)建鏈
- 自定義鏈改名:iptables -E custom(原來(lái)名稱(chēng)) ky29(新名稱(chēng)) 自定義鏈改名
- 創(chuàng)建自定義鏈規(guī)則:iptables -t filter -I ky29 -p icmp -j REJECT 創(chuàng)建自定義規(guī)則,
iptables的鏈中添加一條對(duì)應(yīng)到自定義鏈中才能生效
iptabales創(chuàng)建對(duì)應(yīng)鏈規(guī)則然后跳轉(zhuǎn)自定義鏈web:iptables -t filter -I INPUT -p icmp -j custom
刪除自定義規(guī)則鏈:先刪除iptables INPUT鏈中的對(duì)應(yīng)關(guān)系,然后刪除自定義鏈中的規(guī)則。 iptables -D INPUT 1
iptables -D ky27 1
然后再用 iptables -X ky27 刪除這個(gè)鏈
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
ubuntu18.0.4安裝mysql并解決ERROR 1698 (28000): Access denied for
這篇文章主要介紹了ubuntu18.0.4安裝mysql并解決ERROR 1698 (28000): Access denied for user 'root'@'localhost',現(xiàn)在將ubuntu18.0.4上安裝mysql并將碰到的問(wèn)題記錄下來(lái),感興趣的朋友一起看看吧2019-11-11
Linux在命令行環(huán)境中實(shí)現(xiàn)進(jìn)度條的原理解析
在Linux命令行環(huán)境中,進(jìn)度條是一種直觀展示任務(wù)執(zhí)行進(jìn)度的重要方式,本文將通過(guò)一個(gè)簡(jiǎn)單的C語(yǔ)言進(jìn)度條程序,深入解析其實(shí)現(xiàn)原理和優(yōu)化過(guò)程,希望對(duì)大家有所幫助2025-10-10
CentOS使用expect批量遠(yuǎn)程執(zhí)行腳本和命令
這篇文章主要介紹了CentOS使用expect批量遠(yuǎn)程執(zhí)行腳本和命令,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Linux VPS 計(jì)劃任務(wù)crond命令的使用方法分享
Linux VPS 計(jì)劃任務(wù)crond命令的使用方法分享,需要的朋友可以參考下。2011-11-11

