所謂防火墻也稱之為防護墻,它是一種位于內(nèi)部網(wǎng)絡(luò)與外部網(wǎng)絡(luò)之間的網(wǎng)絡(luò)安全系統(tǒng)。一項信息安全的防護系統(tǒng)。按照給定的規(guī)則,允許或者限制網(wǎng)絡(luò)報文通過。
- 硬件防?墻:通過硬件和軟件的組合,基于硬件的防?墻保護整個內(nèi)部網(wǎng)絡(luò)安全。(例如 華為E9000)
- 軟件防?墻:通過純軟件,單獨使?軟件系統(tǒng)來完成防?墻功能,保護安裝它的系統(tǒng)。
大型公司都是以硬件防火墻為主,軟件防火墻為輔。軟件防火墻根據(jù)情況來決定是否開啟,如果服務(wù)器性能不夠,可能會關(guān)閉軟件防火墻。
1 iptables防火墻概述
linux系統(tǒng)自帶的軟件防火墻:
- iptables:centos 5/6 系統(tǒng)默認(rèn)防火墻
- firewalld:Centos 7/8 系統(tǒng)默認(rèn)防火墻
1.1 iptables概述
iptables是Linux系統(tǒng)的防火墻, IP信息包過濾系統(tǒng),它實際上由兩個組件netfilter和iptables組成。
主要工作在網(wǎng)絡(luò)層,針對IP數(shù)據(jù)包。體現(xiàn)在對包內(nèi)的IP地址、端口、協(xié)議等信息的處理上。屬于典型的包過濾防火墻(或稱為網(wǎng)絡(luò)層防火墻)。
netfilter和iptables的關(guān)系:
netfilter
- 屬于的“內(nèi)核態(tài)”(Kernel Space, 又稱為內(nèi)核空間)的防火墻功能體系。
- 是內(nèi)核的一部分,由一些數(shù)據(jù)包過濾表組成,這些表包含內(nèi)核用來控制數(shù)據(jù)包過濾處理的規(guī)則集。
iptables
- 屬于“用戶態(tài)”(User Space,又稱為用戶空間)的防火墻管理體系。
- 是一種用來管理Linux防火墻的命令程序,它使插入、修改和刪除數(shù)據(jù)包過濾表中的規(guī)則變得容易,通常位于/sbin/iptables目錄下。
1.2 iptables的四表五鏈
netfilter/iptables后期簡稱為iptables。iptables是基于內(nèi)核的防火墻,其中內(nèi)置了raw、mangle、 nat和filter四個規(guī)則表。
表中所有規(guī)則配置后,立即生效,不需要重啟服務(wù)。
四表五鏈:
規(guī)則表的作用:容納各種規(guī)則鏈。
規(guī)則鏈的作用:容納各種防火墻規(guī)則。
即表里有鏈,鏈里有規(guī)則。
四表:
表名 |
作用 |
raw |
確定是否對該數(shù)據(jù)包進行狀態(tài)跟蹤。包含兩個規(guī)則鏈,OUTPUT、PREROUTING |
mangle |
修改數(shù)據(jù)包內(nèi)容,用來做流量整形,給數(shù)據(jù)包設(shè)置標(biāo)記。包含五個規(guī)則鏈,INPUT、 OUTPUT、 FORWARD、 PREROUTING、 POSTROUTING |
nat |
負(fù)責(zé)網(wǎng)絡(luò)地址轉(zhuǎn)換,用來修改數(shù)據(jù)包中的源、目標(biāo)IP地址或端口。包含三個規(guī)則鏈,OUTPUT、 PREROUTING、 POSTROUTING |
filter |
負(fù)責(zé)過濾數(shù)據(jù)包,確定是否放行該數(shù)據(jù)包(過濾)。包含三個規(guī)則鏈,INPUT、 FORWARD、 OUTPUT |
在iptables的四個規(guī)則表中, mangle表和raw表的應(yīng)用相對較少。
filter表是防火墻的默認(rèn)表。
五鏈:
鏈名 |
作用 |
INPUT |
處理入站數(shù)據(jù)包,匹配目標(biāo)IP為本機的數(shù)據(jù)包。 |
OUTPUT |
處理出站數(shù)據(jù)包,一般不在此鏈上做配置。 |
FORWARD |
處理轉(zhuǎn)發(fā)數(shù)據(jù)包,匹配流經(jīng)本機的數(shù)據(jù)包。 |
PREROUTING |
在進行路由選擇前處理數(shù)據(jù)包,用來修改目的地址,用來做DNAT。相當(dāng)于把內(nèi)網(wǎng)服務(wù)器的IP和端口映射到路由器的外網(wǎng)IP和端口上。 |
POSTROUTING |
在進行路由選擇后處理數(shù)據(jù)包,用來修改源地址,用來做SNAT。相當(dāng)于內(nèi)網(wǎng)通過路由器NAT轉(zhuǎn)換功能實現(xiàn)內(nèi)網(wǎng)主機通過一個公網(wǎng)IP地址上網(wǎng)。 |
1.3 數(shù)據(jù)包控制的匹配流程
1.3.1 規(guī)則表之間的優(yōu)先順序:
數(shù)據(jù)包到達(dá)防火墻時,規(guī)則表之間的優(yōu)先順序:raw >mangle > nat > filter
1.3.2 規(guī)則鏈之間的匹配順序:
主機型防火墻:
- 入站數(shù)據(jù)(來自外界的數(shù)據(jù)包,且目標(biāo)地址是防火墻本機):PREROUTING --> INPUT -->本機的應(yīng)用程序
- 出站數(shù)據(jù)(從防火墻本機向外部地址發(fā)送的數(shù)據(jù)包):本機的應(yīng)用程序---->OUTPUT ----->POSTROUTING
網(wǎng)絡(luò)型防火墻:
- 轉(zhuǎn)發(fā)數(shù)據(jù)(需要經(jīng)過防火墻轉(zhuǎn)發(fā)的數(shù)據(jù)包):PREROUTING -->FORWARD -->POSTROUTING
注:標(biāo)紅的表示該鏈的規(guī)則通常在這個表上配置。
1.3.3 規(guī)則鏈內(nèi)部的匹配順序:
- 自上向下按順序依次進行檢查,找到相匹配的規(guī)則即停止(LOG策略例外,表示記錄相關(guān)日志)
- 若在該鏈內(nèi)找不到相匹配的規(guī)則,則按該鏈的默認(rèn)策略處理(未修改的狀況下,默認(rèn)策略為允許)
#例1:
filter表 input鏈:
1、放通 目的地址為192.168.80.0/24的
2、放通 目的地址為192.168.100.0/24的
此時192.168.100.0/24的IP數(shù)據(jù)包能夠放行。
#例2:
filter表 input鏈:
1、拒絕 源地址為100.100.100.0/24的
2、放通 目的地址為192.168.80.0/24的
3、放通 目的地址為192.168.100.0/24的
此時192.168.100.0/24的IP數(shù)據(jù)包會被拒絕,因為是自上向下按順序依次進行檢查,第一條規(guī)則已匹配到,就不會再向下匹配。
復(fù)制代碼
1.3.4 內(nèi)核中數(shù)據(jù)包的傳輸過程
- 當(dāng)一個數(shù)據(jù)包進入網(wǎng)卡時,數(shù)據(jù)包首先進入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
- 如果數(shù)據(jù)包是進入本機的,數(shù)據(jù)包就會到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后, 任何進程都會收到它。本機上運行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過OUTPUT鏈,然后返回給發(fā)送方。
- 如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出。
2 iptables的安裝和規(guī)則配置
2.1 iptables的安裝
Centos 7默認(rèn)使用firewalld防火墻,沒有安裝iptables, 若想使用iptables防火墻。必須先關(guān)閉firewalld防火墻,再安裝iptables 。
#步驟1、關(guān)閉firewalld
[root@yuji ~]# systemctl disable --now firewalld //設(shè)置firwalld開機不自啟,且現(xiàn)在就關(guān)閉
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#步驟2、安裝iptables 和 iptables-services
[root@yuji ~]# yum install -y iptables iptables-services
#安裝完后啟動服務(wù)
[root@yuji ~]# systemctl start iptables
復(fù)制代碼
2.2 iptables的配置方法
- 使用iptables命令行。
- 使用圖形化管理工具system- config- firewall
2.3 使用iptables命令行配置規(guī)則
命令格式:
iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]
復(fù)制代碼
注意事項:
- 不指定表名時,默認(rèn)指filter表
- 不指定鏈名時,默認(rèn)指表內(nèi)的所有鏈
- 除非設(shè)置鏈的默認(rèn)策略,否則必須指定匹配條件
- 控制類型使用大寫字母,其余均為小寫
常用控制類型:
控制類型 |
作用 |
ACCEPT |
允許數(shù)據(jù)包通過(默認(rèn)) |
DROP |
直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息 |
REJECT |
拒絕數(shù)據(jù)包通過,會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息 |
SNAT |
修改數(shù)據(jù)包的源地址 |
DNAT |
修改數(shù)據(jù)包的目的地址 |
MASQUERADE |
偽裝成一個非固定公網(wǎng)IP地址 |
LOG |
在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。LOG只是一種輔助動作,并沒有真正處理數(shù)據(jù)包 |
常用管理選項:
管理選項 |
作用 |
-A |
在指定鏈的末尾追加(--Append)一條新的規(guī)則 |
-I(大寫i) |
在指定鏈的開頭插入(--insert)一條新的規(guī)則,未指定序號時默認(rèn)作為第一條規(guī)則 |
-R |
修改、替換(--replace) 指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內(nèi)容 |
-P |
設(shè)置指定鏈的默認(rèn)策略(--policy) |
-D |
刪除(--delete) 指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內(nèi)容 |
-F |
清空(--flush)指定鏈中的所有規(guī)則,若未指定鏈名,則清空表中的所有鏈 |
-L |
列出(--list) 指定鏈中所有的規(guī)則,若未指定鏈名,則列出表中的所有鏈 |
-n |
使用數(shù)字形式(--numeric) 顯示輸出結(jié)果,如顯示IP地址而不是主機名 |
-v |
顯示詳細(xì)信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù) |
--line-numbers |
查看規(guī)則時,顯示規(guī)則的序號 |
匹配條件:
匹配條件 |
說明 |
-p |
指定要匹配的數(shù)據(jù)包的協(xié)議類型 |
-s |
指定要匹配的數(shù)據(jù)包的源IP地址 |
-d |
指定要匹配的數(shù)據(jù)包的目的IP地址 |
-i |
指定數(shù)據(jù)包進入本機的網(wǎng)絡(luò)接口 |
-o |
指定數(shù)據(jù)包離開本機做使用的網(wǎng)絡(luò)接口 |
–sport |
指定源端口號 |
–dport |
指定目的端口號 |
2.4 規(guī)則配置示例
示例1:查看規(guī)則 -nL
[root@yuji ~]# iptables -L //查看filter表中所有規(guī)則
[root@yuji ~]# iptables -nL //以數(shù)字形式顯示
?
[root@yuji ~]# iptables -nL -t nat //查看nat表ACCEPT
[root@yuji ~]# iptables -nL --line-numbers //顯示規(guī)則序號
?
[root@yuji ~]#iptables -t filter -F //清空 filter表內(nèi)所有規(guī)則
復(fù)制代碼
示例:
1、 iptables -L,列出表中所有鏈。不指定表名則默認(rèn)查看filter表。
2、 iptables -L -n,以數(shù)字形式顯示輸出結(jié)果。-L -n 合在一起寫時,必須n在前,要寫成 -nL。
3、iptables -nL -t nat,查看nat表。
4、iptables -t filter -F,清空 filter表內(nèi)所有規(guī)則。
示例2:添加規(guī)則 -A -I
-A,在末尾追加規(guī)則。
-I,在指定位置前插入規(guī)則。如果不指定,則在首行插入。
#在INPUT鏈末尾追加規(guī)則
[root@yuji ~]# iptables -t filter -A INPUT -p icmp -j REJECT
[root@yuji ~]# iptables -nL
?
#在INPUT鏈第二行出入規(guī)則
[root@yuji ~]# iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT
[root@yuji ~]# iptables -nL --line-numbers
復(fù)制代碼
示例:
1、拒絕icmp協(xié)議的數(shù)據(jù)包, 即不允許其他主機ping本機 。REJECT
使用其他的主機ping不通本機,reject拒絕后會回應(yīng)一條消息。
2、丟棄icmp協(xié)議的數(shù)據(jù)包。DROP。
使用其他的主機ping本機,drop丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息。
3、-I,在指定位置前插入。如果不指定,則在首行插入。
iptables -nL --line-numbers,可以查看每條規(guī)則的序號。
示例3:刪除規(guī)則 -D
1、按序號刪除,比較準(zhǔn)確。
2、按內(nèi)容刪除,如果有2條相同內(nèi)容,會刪除序號小的那個。
注意:
- 刪除規(guī)則前,先想清楚會不會導(dǎo)致ssh斷連。
- 如果鏈的默認(rèn)規(guī)則是DROP,在使用iptables -F之前一定要慎重,可能會導(dǎo)致自己斷連,斷連后只能去機房解決。
#先查看鏈中的規(guī)則
[root@yuji ~]# iptables -nL --line-numbers //顯示規(guī)則的序號
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
2 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
?
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
?
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
?
#按序號刪除
[root@yuji ~]# iptables -D INPUT 2 //刪除INPUT鏈中的第2條規(guī)則
[root@yuji ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0
?
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
?
Chain OUTPUT (policy ACCEPT)
?
#按內(nèi)容刪除
[root@yuji ~]# iptables -D INPUT -p tcp -j ACCEPT //刪除INPUT鏈中tcp協(xié)議ACCEPT的規(guī)則
[root@yuji ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP icmp -- 0.0.0.0/0 0.0.0.0/0
?
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
?
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
復(fù)制代碼
示例4:修改規(guī)則
1、-R 直接修改。但一般不用這種形式。
2、可以先添加一條新規(guī)則,之后再刪除舊規(guī)則。這樣比較保險。
#方法1:使用-R直接修改
[root@yuji ~]# iptables -A INPUT -p icmp -j DROP //原先設(shè)置的規(guī)則
[root@yuji ~]# iptables -R INPUT -p icmp -j ACCEPT //將DROP修改成ACCEPT
?
#方法2:先-A添加一條規(guī)則,之后再-D刪除舊規(guī)則
[root@yuji ~]# iptables -A INPUT -p icmp -j ACCEPT //添加一條新規(guī)則
[root@yuji ~]# iptables -D INPUT -p icmp -j DROP //刪除舊規(guī)則
復(fù)制代碼
示例5:設(shè)置默認(rèn)策略 -P
未修改的狀況下,默認(rèn)策略為ACCEPT(允許)。
注意:
將默認(rèn)策略修改為DROP前,一定要檢查清楚鏈內(nèi)是否設(shè)置了允許tcp協(xié)議22端口進行連接的規(guī)則。否則一旦修改為DROP,會導(dǎo)致ssh斷連。
[root@yuji ~]# iptables -P INPUT DROP //將默認(rèn)策略修改為DROP
復(fù)制代碼
3 匹配條件
3.1 通用匹配
可直接使用, 不依賴于其他條件或擴展包括網(wǎng)絡(luò)協(xié)議、IP地址、網(wǎng)絡(luò)接口等條件。
協(xié)議匹配 |
-p 協(xié)議名 |
地址匹配 |
-s 源地址、-d 目的地址 。可以是IP、網(wǎng)段、域名、空(任何地址) |
接口匹配 |
-i 入站網(wǎng)卡、-o 出站網(wǎng)卡 |
例:
iptables -A INPUT ! -p icmp -j ACCEPT
#沒有-t指定表,就是指默認(rèn)表filter表
# !代表條件取反,不是icmp的都放通
iptables -A INPUT -s 192.168.72.10 -j REJECT
#拒絕從哪個主機發(fā)數(shù)據(jù)包過來(-s指定了源地址)
iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP
#在行首插入規(guī)則,丟棄該網(wǎng)段從ens33網(wǎng)卡進來的數(shù)據(jù)包
復(fù)制代碼
示例1:
! 取反時需要注意。
例如設(shè)置“不是icmp的都放通”,即放通的協(xié)議中不包括icmp,這條規(guī)則沒有針對icmp。那么icmp協(xié)議會向下查找匹配,如果匹配不到規(guī)則,那么就會取默認(rèn)策略ACCEPT,則此時其他主機可以ping通本機。
使用其他主機ping本機,可以ping通。
示例2:
拒絕192.168.72.10發(fā)來的數(shù)據(jù)包。
使用192.168.72.10這臺機器ping本機,ping不通。REJECT拒絕后,會顯示回應(yīng)信息。
3.2 隱含匹配
要求以特定的協(xié)議匹配作為前提,包括端口、TCP標(biāo)記、ICMP類 型等條件。
3.2.1 端口匹配
端口匹配:--sport 源端口、--dport 目的端口。
可以是個別端口或者端口范圍。
格式 |
含義 |
--sport 1000 |
匹配源端口是1000的數(shù)據(jù)包 |
--sport 1000:3000 |
匹配源端口是1000-3000的數(shù)據(jù)包 |
--sport 1000: |
匹配源端口是1000及以上的數(shù)據(jù)包 |
--sport :3000 |
匹配源端口是3000及以下的數(shù)據(jù)包 |
注意: --sport 和 --dport 必須配合 -p <協(xié)議類型> 使用
3.2.2 TCP標(biāo)記匹配
--tcp-flags TCP標(biāo)記
#TCP三次握手時的第一次握手,放行SYN為1的報文,拒絕其他包。
iptables -I INPUT -P tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
?
#第二次握手放行SYN、ACK為1的報文,拒絕其他包。
iptables -I OUTPUT -P tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
復(fù)制代碼
3.2.3 ICMP類型匹配
--icmp-type ICMP類型
ICMP類型可以是字符串、數(shù)字代碼:
ICMP類型 |
含義 |
Echo-Request (代碼為8) |
表示請求 |
Echo- -Reply (代碼為0) |
表示回顯 |
Dest ination-Unreachable (代碼為3) |
表示目標(biāo)不可達(dá) |
注: 其他可用的icmp協(xié)議類型,可以執(zhí)行iptables -p icmp -h 查看幫助信息。
--icmp-type 8 //表示請求(ping),即其他主機向本機請求(ping本機)
--icmp-type 0 //表示回顯(pong),即本機向其他主機發(fā)數(shù)據(jù)包(本機ping其他主機)
--icmp-type 3 //當(dāng)本機ping不通其他主機時,提示目標(biāo)不可達(dá)。
?
例子:
#丟棄icmp的包,別人ping不通本機,本機也ping不通別人
iptables -A INPUT -p icmp -j DROP
?
#丟棄icmp的請求,禁止其他主機ping本機,但本機可以ping其他主機
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
?
#當(dāng)本機ping不通其它主機時提示目標(biāo)不可達(dá),此時其它主機需要配置關(guān)于icmp協(xié)議的控制類型為REJECT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
復(fù)制代碼
示例:
丟棄icmp協(xié)議的請求,禁止其他主機ping本機,但本機可以ping其他主機。
3.3 顯示匹配
要求以“-m擴展模塊”的形式明確指出類型,包括多端口、mac地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件
3.3.1 多端口匹配
- -m multiport --sport 源端口列表
- -m multiport --dport 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
復(fù)制代碼
3.3.2 IP范圍匹配
- -m iprange --src-range 源IP范圍
- -m iprange --dst-range 目的IP范圍
iptables -A FORWARD -p udp -m iprange --src-range 192.168.72.100-192.168.72.200 -j DROP
# 禁止轉(zhuǎn)發(fā)源地址位于192.168.72.100——192.168.72.200的udp數(shù)據(jù)包
復(fù)制代碼
3.3.3 MAC地址匹配
格式:
-m mac -- -mac- source MAC地址
復(fù)制代碼
示例:
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止來自某MAC地址的數(shù)據(jù)包通過本機轉(zhuǎn)發(fā)
復(fù)制代碼
3.3.4 狀態(tài)匹配
格式:
-m state --state連接狀態(tài)
復(fù)制代碼
常見的連接狀態(tài):
狀態(tài) |
含義 |
NEW |
主機連接目標(biāo)主機,在目標(biāo)主機上看到的第一個想要連接的包 |
ESTABLISHED |
主機已與目標(biāo)主機進行通信,判斷標(biāo)準(zhǔn)只要目標(biāo)主機回應(yīng)了第一個包,就進入該狀態(tài) |
RELATED |
主機已與目標(biāo)主機進行通信,目標(biāo)主機發(fā)起新的鏈接方式,一般與ESTABLISHED配合使用 |
INVALID |
無效的封包,例如數(shù)據(jù)破損的封包狀態(tài) |
示例:
iptables -I INPUT -M state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#第一個包我只看22端口的包
#-p tcp是隱含匹配,可以省略-m tcp
iptables -A INPUT -p tcp -m multiport --dport 443,80,22,21,20,53 -j ACCEPT
#允許放通tcp的這些端口號
#-m multiport加載多個端口模塊
iptables -A INPUT -p udp --dport 53 -j ACCEPT
#放通UDP的53端口進來的包(DNS服務(wù)器返回信息時默認(rèn)使用UDP的53端口)
?
iptables -A INPUT -p tcp -m state --state ESTABLISHED ,RELATED -j ACCEPT
#對進來的包的狀態(tài)進行檢測。已經(jīng)建立tcp連接的包以及該連接相關(guān)的包允許通過。簡單來說就是只允許所有自己發(fā)出去的包進來。
#比如我和你做生意,我們談成了生意,到了支付的時候,就可以直接調(diào)用與這筆生意相關(guān)的支付功能。
iptables -P INPUT DROP
#默認(rèn)關(guān)閉,將以上的設(shè)置設(shè)為白名單
復(fù)制代碼
4 總結(jié)
1、Linux防火墻的兩個組件:
- 內(nèi)核態(tài) netilter(保存包過濾處理的規(guī)則集)
- 用戶態(tài) iptables(防火墻規(guī)則管理工具)
2、數(shù)據(jù)包五要素:
源IP,目的IP,源端口,目的端口 ,協(xié)議UDP/TCP
3、四表:
- raw 對數(shù)據(jù)包進行狀態(tài)跟蹤
- mangle 修改數(shù)據(jù)包內(nèi)容,給數(shù)據(jù)包設(shè)置標(biāo)記
- nat 地址轉(zhuǎn)換,轉(zhuǎn)換源/目的IP或者端口
- fileter 過濾數(shù)據(jù)包 放行 丟棄
4、五鏈:
- INPUT 入站
- OUTPUT 出站
- FORWARD 轉(zhuǎn)發(fā)
- PREROUTING 路由前修改目的地址
- POSTROUTING 路由后修改源IP
5、匹配順序
1)數(shù)據(jù)包到達(dá)防火墻時,規(guī)則表之間的優(yōu)先順序:raw >mangle > nat > filter。
2)規(guī)則鏈之間的匹配順序:
主機型防火墻
- 入站數(shù)據(jù)(來自外界的數(shù)據(jù)包,且目標(biāo)地址是防火墻本機):PREROUTING --> INPUT -->本機的應(yīng)用程序
- 出站數(shù)據(jù)(從防火墻本機向外部地址發(fā)送的數(shù)據(jù)包):本機的應(yīng)用程序---->OUTPUT ----->POSTROUTING;
網(wǎng)絡(luò)型防火墻
- 轉(zhuǎn)發(fā)數(shù)據(jù)(需要經(jīng)過防火墻轉(zhuǎn)發(fā)的數(shù)據(jù)包):PREROUTING -->FORWARD -->POSTROUTING
3)鏈中的規(guī)則集:從上往下一次匹配,匹配到規(guī)則即停止,若都沒有匹配到則按默認(rèn)策略處理
6、管理選項
iptables [-t 表名] 管理選項 [鏈名] [匹配條件] [-j 控制類型]
- 增:-A 在末尾添加,-I 在指定位置插入
- 刪:-D 刪除指定規(guī)則,-F 清空所有規(guī)則
- 改:-R,或者-A 添加后 -D 刪除
- 查:-nL 以數(shù)字形式顯示,--line-numbers 顯示規(guī)則的序號
- 設(shè)置默認(rèn)規(guī)則:-P
注意:
刪除規(guī)則前,以及將默認(rèn)規(guī)則修改為DROP之前,一定要先想清楚會不會導(dǎo)致ssh斷連。
7、 匹配條件
- -p tcp|udp|icmp
- -s 源IP
- -d 目的IP
- -i 入站網(wǎng)卡
- -o 出站網(wǎng)卡
作者:聶魯達(dá)的郵差
鏈接:
https://juejin.cn/post/7093477215983124494