目錄
一、iptables防火墻概述
1.簡介
2.netfilter/iptables關(guān)系
3.iptables的四表五鏈
(1)四表
(2)五鏈
4.數(shù)據(jù)包過濾的匹配流程
(1)入站
(2)轉(zhuǎn)發(fā)
(3)出站
二、iptables防火墻配置
1.下載相關(guān)服務(wù)
2.iptables命令
3.實操
(1)添加新的規(guī)則
(2)查看規(guī)則
(3) 刪除規(guī)則
(4)清空規(guī)則
(5)修改規(guī)則
三、規(guī)則的匹配
1.通用匹配
2.隱含匹配
(1)協(xié)議端口匹配?
(2) tcp標(biāo)記匹配
(3)ICMP類型匹配
3.顯式匹配
(1)多端口匹配
(2)ip范圍匹配
(3)mac地址匹配
(4)狀態(tài)匹配
四、iptables配置NAT地址轉(zhuǎn)換
1.配置SNAT
(1)轉(zhuǎn)換為固定公網(wǎng)ip
(2)轉(zhuǎn)換為非固定的公網(wǎng)ip(動態(tài))
2.配置DNAT
五、iptables防火墻策略的備份和恢復(fù)
一、iptables防火墻概述
1.簡介
????????Linux系統(tǒng)的防火墻: IP信息包過濾系統(tǒng),它實際上由兩個組件netfilter和iptables組成。
????????主要工作在網(wǎng)絡(luò)層,針對IP數(shù)據(jù)包。針對 TCP/IP 數(shù)據(jù)包實施過濾和限制,屬于典型的包過濾防火墻(或稱為網(wǎng)絡(luò)層防火墻)
2.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目錄下。
netfilter/iptables后期簡稱為iptables。
iptables是基于內(nèi)核的防火墻,其中內(nèi)置了raw、mangle、 nat和filter四個規(guī)則表。
表中所有規(guī)則配置后,立即生效,不需要重啟服務(wù)。
3.iptables的四表五鏈
(1)四表
raw表:確定是否對該數(shù)據(jù)包進(jìn)行狀態(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ī)則表中,filter表是防火墻默認(rèn)表,mangle表和raw表的應(yīng)用相對較少。
(2)五鏈
INPUT:處理入站數(shù)據(jù)包,匹配目標(biāo)IP為本機的數(shù)據(jù)包。
OUTPUT:處理出站數(shù)據(jù)包,一般不在此鏈上做配置。
FORWARD:處理轉(zhuǎn)發(fā)數(shù)據(jù)包,匹配流經(jīng)本機的數(shù)據(jù)包。
PREROUTING鏈:在進(jìn)行路由選擇前處理數(shù)據(jù)包,用來修改目的地址,用來做DNAT。相當(dāng)于把內(nèi)網(wǎng)中的80端口映射到路由器外網(wǎng)端口上。
POSTROUTING鏈:在進(jìn)行路由選擇后處理數(shù)據(jù)包,用來修改源地址,用來做SNAT。相當(dāng)于內(nèi)網(wǎng)通過路由器NAT轉(zhuǎn)換功能實現(xiàn)內(nèi)網(wǎng)主機通過一個公網(wǎng)IP地址上網(wǎng)。
數(shù)據(jù)包到達(dá)防火墻時,規(guī)則表之間的優(yōu)先順序
raw > mangle > nat > filter
4.數(shù)據(jù)包過濾的匹配流程
(1)入站
????????入站數(shù)據(jù)包從A網(wǎng)絡(luò)發(fā)到B網(wǎng)絡(luò),首先發(fā)到防火墻,先后順序經(jīng)過有PREROUTING鏈的三個表(raw、mangle、nat),如果都是放通狀態(tài)的會經(jīng)過路由選擇,然后根據(jù)目的地址一層一層往上送,經(jīng)過有INPUT的兩個表(mangle、filter),一直送到應(yīng)用程序。
(2)轉(zhuǎn)發(fā)
????????目的地不是本機,數(shù)據(jù)包先從A網(wǎng)絡(luò)過濾,經(jīng)過PREROUTING鏈,看是否是自己的目的地址,如果是外網(wǎng)到內(nèi)網(wǎng)需要用nat轉(zhuǎn)換成內(nèi)網(wǎng)IP,找到內(nèi)網(wǎng)用戶,經(jīng)過FORWARD鏈進(jìn)行過濾,允許放通的到達(dá)POSTROUING鏈,再把內(nèi)網(wǎng)地址轉(zhuǎn)換成公網(wǎng),這樣數(shù)據(jù)包才能回去;如果是內(nèi)網(wǎng)往外網(wǎng)發(fā)順序就是反過來。
(3)出站
????????從本機的應(yīng)用程序發(fā)出來, 經(jīng)過路由選擇,讓路由知道從哪里發(fā),先后順序經(jīng)過有OUTPUT鏈的四個表(raw、mangle、nat、filter),都放通后到達(dá)POSTROUING鏈的兩個表(mangle、nat),如果沒有什么轉(zhuǎn)換地址,就出站。
總結(jié)
????????當(dāng)一個數(shù)據(jù)包進(jìn)入網(wǎng)卡時,數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
????????如果數(shù)據(jù)包是進(jìn)入本機的,數(shù)據(jù)包就會沿著圖向下移動,到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后, 任何進(jìn)程都會收到它。本機上運行的程序可以發(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鏈輸出。
二、iptables防火墻配置
1.下載相關(guān)服務(wù)
????????Centos 7默認(rèn)使用firewalld防火墻,沒有安裝iptables, 若想使用iptables防火墻。必須先關(guān)閉firewalld防火墻,再安裝iptables
systemctl stop firewalld. service? ? ? ? ? ? ? ? ?? //關(guān)閉firewalld防火墻
systemctl disable firewalld. service? ? ? ? ? ? ??//取消firewalld防火墻開機自啟動
yum -y install iptables iptables-services? ? ? ?//安裝iptables和iptables-services
systemctl start iptables.service? ? ? ? ? ? ? ? ? ? //啟動iptables-services
2.iptables命令
iptables ?[-t 表名] ?管理選項 ?[鏈名] [匹配條件] [-j 控制類型]
-t | 指定表名(raw、mangle、nat、filter) |
-j | 指定控制類型 |
常用管理選項
選項 | 作用 |
---|---|
-A? (--append) | 在指定鏈的末尾追加一條新的規(guī)則 |
-I? ?(--insert) |
在指定鏈的開頭插入一條新的規(guī)則;未指定序號時默認(rèn)作為第一條規(guī)則 |
-R? (--replace) | 修改、替換指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內(nèi)容 |
-P? (--policy) | 設(shè)置指定鏈的默認(rèn)策略 |
-D? (--delete) | 刪除指定鏈中的某一條規(guī)則,可指定規(guī)則序號或具體內(nèi)容 |
-F? (--flush) | 清空指定鏈中的所有規(guī)則;若未指定鏈名,則清空表中的所有鏈 |
-L? (--list) | 列出指定鏈中所有的規(guī)則;若未指定鏈名,則列出表中的所有鏈 |
-n? (--numeric) | (搭配-L使用)使用數(shù)字形式顯示輸出結(jié)果,如顯示IP地址而不是主機名 |
-v | (搭配-L使用)顯示詳細(xì)信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù) |
--line-numbers | (搭配-L使用)查看規(guī)則時,顯示規(guī)則的序號 |
常用控制類型
控制類型 | 作用 |
---|---|
ACCEPT | 允許數(shù)據(jù)包通過 |
DROP | 直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)消息 |
REJECT | 拒絕數(shù)據(jù)包通過,會給數(shù)據(jù)發(fā)送端一個響應(yīng)信息 |
SNAT | 修改數(shù)據(jù)包的源地址 |
DNAT | 修改數(shù)據(jù)包的目的地址 |
MASQUERADE | 偽裝成—個非固定公網(wǎng)IP地址 |
LOG | 在/varlog/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。(LOG只是一種輔助動作,并沒有真正處理數(shù)據(jù)包) |
匹配條件
匹配條件 | 說明 |
---|---|
-p | 指定要匹配的數(shù)據(jù)包的協(xié)議類型 |
-s | 指定要匹配的數(shù)據(jù)包的源IP地址 |
-d | 指定要匹配的數(shù)據(jù)包的目的IP地址 |
-i | 指定數(shù)據(jù)包進(jìn)入本機的網(wǎng)絡(luò)接口 |
-o | 指定數(shù)據(jù)包離開本機做使用的網(wǎng)絡(luò)接口 |
--sport | 指定源端口號 |
--dport | 指定目的端口號 |
注意事項
不指定表名時,默認(rèn)指filter表
不指定鏈名時,默認(rèn)指表內(nèi)的所有鏈
除非設(shè)置鏈的默認(rèn)策略,否則必須指定匹配條件控制類型使用大寫字母,其余均為小寫
3.實操
(1)添加新的規(guī)則
//1.-A 在filter表的INPUT鏈末行添加拒絕icmp的規(guī)則
[root@localhost1 ~]#iptables -t filter -A INPUT -p icmp -j REJECT
//2.-I 不指定行,是在指定鏈?zhǔn)仔胁迦胍?guī)則(允許tcp 22端口)
[root@localhost1 ~]#iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT
//3.-I 指定行,是在指定鏈的指定行上插入規(guī)則
[root@localhost1 ~]#iptables -t filter -I INPUT 2 -p tcp --dport 22 -j ACCEPT
(2)查看規(guī)則
//1.查看指定表的規(guī)則(不加鏈名顯示所有鏈的所有規(guī)則)
[root@localhost1 ~]#iptables -t filter -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
REJECT icmp -- anywhere anywhere reject-with icmp-port -unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
//2.-nL 以數(shù)字形式顯示
[root@localhost1 ~]#iptables -t filter -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port -unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
//3.-nvL 以數(shù)字形式顯示,并顯示詳細(xì)信息
[root@localhost1 ~]#iptables -t filter -nvL
Chain INPUT (policy ACCEPT 3 packets, 381 bytes)
pkts bytes target prot opt in out source destination
408 29984 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
5 420 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 66 packets, 5784 bytes)
pkts bytes target prot opt in out source destination
//4. --line-numbers 顯示規(guī)則序號(指定鏈名,就顯示指定鏈的規(guī)則)
[root@localhost1 ~]#iptables -t filter -nvL INPUT --line-numbers
Chain INPUT (policy ACCEPT 3 packets, 381 bytes)
num pkts bytes target prot opt in out source destination
1 902 64816 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
3 5 420 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
(3) 刪除規(guī)則
注意
若規(guī)則列表中期多條相同的規(guī)則時,按內(nèi)容匹配只刪除的序號最小的一條按號碼匹配刪除時,確保規(guī)則號碼小于等于已有規(guī)則數(shù),否則報錯
按內(nèi)容匹配刪數(shù)時,確保規(guī)則存在,否則報錯
//1.根據(jù)規(guī)則序號刪
[root@localhost1 ~]#iptables -D INPUT 3
//2.根據(jù)規(guī)則內(nèi)容刪(相當(dāng)于操作一遍創(chuàng)建指定規(guī)則的步驟加上-D選項刪除)
[root@localhost1 ~]#iptables -D INPUT -p icmp -j REJECT
//3.有相同的規(guī)則會刪除第一個
[root@localhost1 ~]#iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-p
[root@localhost1 ~]#iptables -D INPUT -p tcp --dport 22 -j ACCEPT
(4)清空規(guī)則
注意
-F僅僅是清空鏈中的規(guī)則,并不影響-Р設(shè)置的默認(rèn)規(guī)則,默認(rèn)規(guī)則需要手動進(jìn)行修改-P設(shè)置了默認(rèn)規(guī)則為DROP后,使用-F一定要小心,因為iptables的修改是立刻生效的!
防止把允許遠(yuǎn)程連接的相關(guān)規(guī)則清除后導(dǎo)致無法遠(yuǎn)程連接主機,此情況如果沒有保存規(guī)則可重啟主機解決如果不寫表
名和鏈名,默認(rèn)清空filter表中所有鏈里的所有規(guī)則
//1.清空指定鏈中所有規(guī)則
[root@localhost1 ~]#iptables -F OUTPUT
//2.不指定鏈名默認(rèn)清空所有規(guī)則
[root@localhost1 ~]#iptables -F
(5)修改規(guī)則
//1.-R 修改已有的規(guī)則
[root@localhost1 ~]#iptables -t filter -R INPUT 1 -p icmp -j ACCEPT
//2.-P 修改默認(rèn)策略(修改為丟棄轉(zhuǎn)發(fā)數(shù)據(jù)包)
[root@localhost1 ~]#iptables -P FORWARD DROP
三、規(guī)則的匹配
1.通用匹配
????????可直接使用,不依賴其他條件或擴展包括網(wǎng)絡(luò)協(xié)議、IP地址、網(wǎng)絡(luò)接口等條件。
協(xié)議匹配 |
-p??協(xié)議名 |
地址匹配 |
-s? 源地址 -d 目的地址(可以是IP、網(wǎng)段、域名、空(代表任何地址)) |
接口匹配 |
-i 入站網(wǎng)卡 -o 出站網(wǎng)卡 |
//1.(使用!取反)不是icmp協(xié)議的其他數(shù)據(jù)包全部接受
//注:雖然不是icmp包都接受,但是沒有指定icmp包的規(guī)則,所以icmp包默認(rèn)還是接受的
[root@localhost1 ~]#iptables -A INPUT ! -p icmp -j ACCEPT
//2.將指定主機192.168.116.20的數(shù)據(jù)包丟棄
[root@localhost1 ~]#iptables -A INPUT -s 192.168.116.20 -j DROP
//3.拒絕指定網(wǎng)段的數(shù)據(jù)包從ens33網(wǎng)卡進(jìn)入
[root@localhost1 ~]#iptables -I INPUT -i ens33 -s 192.168.110.0/24 -j REJECT
2.隱含匹配
????????某些條件,如端口、TCP標(biāo)記、ICMP類型,隱含要求以特定的協(xié)議匹配作為前提。
(1)協(xié)議端口匹配?
?--sport 和 --dsport 必須配合 -p 指定協(xié)議使用
詳細(xì)用法?
--sport 1000 | 匹配源端口是1000的數(shù)據(jù)包 |
--sport 1000:3000 | 匹配源端口是1000-3000的數(shù)據(jù)包 |
--dport? :3000 | 匹配目標(biāo)端口是3000及以下的數(shù)據(jù)包 |
--dport? 1000: | 匹配目標(biāo)端口是1000及以上的數(shù)據(jù)包 |
//1.允許tcp的20和21端口通過(即允許ftp數(shù)據(jù)包)
[root@localhost1 ~]#iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
//2.丟棄192.168.11.0網(wǎng)段轉(zhuǎn)發(fā)的tcp 24000到24500 端口的數(shù)據(jù)包
[root@localhost1 ~]#iptables -I FORWARD -d 192.168.11.0/24 -p tcp --dport 24000:24500 -j DROP
(2) tcp標(biāo)記匹配
--tcp-flags? ? ? ? 配合 -p tcp 使用,指定tcp標(biāo)記(SYN、ACK、RST、URG、PSH、FIN)
//1.丟棄SYN請求包,允許其他指定的數(shù)據(jù)包
[root@localhost1 ~]#iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
SYN,RST,ACK SYN 前面指定包范圍,空格后再指定
表明前面指定的里面,除了這空格后面的SYN,其他都放行
//2.tcp三次握手第一次接受SYN,拒絕其他,第二次發(fā)送SYN和ACK
[root@localhost1 ~]#iptables -I INPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT
[root@localhost1 ~]#iptables -I OUTPUT -p tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT
(3)ICMP類型匹配
--icmp-type????????配合 -p icmp 使用,指定icmp類型(字符串或數(shù)字代碼)
注:icmp類型可用iptables -p icmp -h 查看幫助信息
Echo-Request(代碼為8) | 請求 |
Echo-Reply (代碼為0) | 回顯 |
Destination-Unreachable(代碼為3) | 目標(biāo)不可達(dá) |
//1.丟棄icmp請求包(使別人不能ping通本機,但本機默認(rèn)情況可以ping通別人)
[root@localhost1 ~]#iptables -A INPUT -p icmp --icmp-type 8 -j DROP
//2.丟棄icmp回顯包(本機發(fā)送ping請求,但是別人回顯的包被本機丟棄,默認(rèn)情況下本機不能ping通別人)
[root@localhost1 ~]#iptables -A INPUT -p icmp --icmp-type 0 -j DROP
//3.當(dāng)ping不通時,允許顯示目標(biāo)不可達(dá)
[root@localhost1 ~]#iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
3.顯式匹配
????????要求以 -m (擴展模塊)的形式明確指出類型,包括多端口、MAC地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件。
(1)多端口匹配
-m multiport --sport? ?源端口列表
-m multiport --dport? ?目的端口列表
//1.允許tcp的20,21,22,53端口
[root@localhost1 ~]#iptables -A INPUT -p tcp -m multiport --dport 20,21,22,53 -j ACCEPT
//2.允許udp的53,67,68端口
[root@localhost1 ~]#iptables -A INPUT -p udp -m multiport --dport 53,67,68 -j ACCEPT
(2)ip范圍匹配
-m iprange --src-range? 源IP范圍
-m iprange --dst-range? 目的IP范圍
//1.禁止轉(zhuǎn)發(fā)源ip范圍是192.168.10.100-192.168.10.200的udp數(shù)據(jù)包
[root@localhost1 ~]#iptables -A FORWARD -p udp -m iprange --src-range 192.168.10.100-192.168.10.200 -j DROP
//2.禁止發(fā)送目的ip范圍是192.168.10.100-192.168.10.200的udp數(shù)據(jù)包
[root@localhost1 ~]#iptables -A INPUT -p udp -m iprange --dst-range 192.168.10.100-192.168.10.200 -j DROP
(3)mac地址匹配
-m mac --mac-source? 源MAC地址
(4)狀態(tài)匹配
-m state --state? 連接狀態(tài)
常見的連接狀態(tài)
NEW | 本機要連接目標(biāo)主機,在目標(biāo)主機上看到的第一個想要連接的包 |
ESTABLISHED | 本機已與目標(biāo)主機進(jìn)行通信,判斷標(biāo)準(zhǔn)只要目標(biāo)主機回應(yīng)了第一個包,就進(jìn)入該狀態(tài) |
RELATED | 本機已與目標(biāo)主機進(jìn)行通信,目標(biāo)主機發(fā)起新的鏈接方式,一般與ESTABLISHED配合使用 |
INVALID | 無效的封包,例如數(shù)據(jù)破損的封包狀態(tài) |
//第一個包我只看22端口的包(-p tcp是隱含匹配,可以省略-m tcp)
[root@localhost1 ~]#iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
//允許放通tcp和udp的這些端口號
[root@localhost1 ~]#iptables -A INPUT -p tcp -m multiport --dport 443,80,22,21,20,53 -j ACCEPT
[root@localhost1 ~]#iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
//使已建立連接的包以及該鏈接相關(guān)的包允許通過
[root@localhost1 ~]#iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
//默認(rèn)策略設(shè)為drop,以上所有配置就成了一個tcp相關(guān)包的白名單,通過第一步的檢測后允許相關(guān)包通過
[root@localhost1 ~]#iptables -P INPUT DROP
四、iptables配置NAT地址轉(zhuǎn)換
1.配置SNAT
應(yīng)用場景
局域網(wǎng)主機共享轉(zhuǎn)換的公網(wǎng)ip接入internet公網(wǎng)(內(nèi) --> 外)
模擬實驗環(huán)境
私網(wǎng)客戶端一臺、網(wǎng)關(guān)服務(wù)器一臺(設(shè)置iptables防火墻)、外網(wǎng)web服務(wù)端(有httpd服務(wù))
三臺都需要關(guān)閉默認(rèn)防火墻firewalld和selinux?
準(zhǔn)備私網(wǎng)客戶端:設(shè)置網(wǎng)卡網(wǎng)段為192.168.146.0/24;ip設(shè)為192.168.146.20;網(wǎng)關(guān)設(shè)為192.168.146.30。
準(zhǔn)備網(wǎng)關(guān)服務(wù)器:一個網(wǎng)卡設(shè)為192.168.146.0/24網(wǎng)段,并設(shè)置ip為192.168.146.30;另一個網(wǎng)卡設(shè)為12.0.0.0/8網(wǎng)段,并設(shè)置ip為12.0.0.12;添加路由轉(zhuǎn)發(fā)功能;下載?iptables-services 并開始iptables之后做防護墻策略。
準(zhǔn)備外網(wǎng)web服務(wù)端:設(shè)置網(wǎng)卡網(wǎng)段為12.0.0.0/8;ip設(shè)為12.0.0.12;網(wǎng)關(guān)設(shè)為12.0.0.254;下載并開啟httpd服務(wù)。
(1)轉(zhuǎn)換為固定公網(wǎng)ip
iptables -t nat -A POSTROUTING -s 源網(wǎng)段?-o 出站網(wǎng)卡 -j SNAT --to 轉(zhuǎn)換的公網(wǎng)地址
iptables -t nat -A POSTROUTING -s 源網(wǎng)段?-o 出站網(wǎng)卡 -j SNAT --to-source 轉(zhuǎn)換的公網(wǎng)地址范圍(如12.0.0.1-12.0.0.10)
注:每一個做轉(zhuǎn)換的公網(wǎng)ip,一般可以支持內(nèi)網(wǎng)100~200臺主機。
測試效果
使用客戶端訪問外網(wǎng)web服務(wù)器地址;在web服務(wù)器查訪問日志/var/log/httpd/access.log,發(fā)現(xiàn)私網(wǎng)客戶端使用了轉(zhuǎn)換的12.0.0.254地址訪問了服務(wù)端。
(2)轉(zhuǎn)換為非固定的公網(wǎng)ip(動態(tài))
iptables -t nat -A POSTROUTING -s 源網(wǎng)段?-o 出站網(wǎng)卡 -j MASQUERADE
2.配置DNAT
應(yīng)用場景
在internet公網(wǎng)中發(fā)布位于企業(yè)局域網(wǎng)的服務(wù)器(外 --> 內(nèi))
模擬實驗環(huán)境
私網(wǎng)客戶端一臺(有httpd服務(wù))、網(wǎng)關(guān)服務(wù)器一臺(設(shè)置iptables防火墻)、外網(wǎng)web服務(wù)端
三臺都需要關(guān)閉默認(rèn)防火墻firewalld和selinux?
可參考上個模擬場景,再為私網(wǎng)主機增設(shè)httpd服務(wù)使之成為私網(wǎng)web服務(wù)端,將原來的外網(wǎng)主機當(dāng)做客戶端。
為私網(wǎng)主機添加httpd服務(wù)并啟用?
轉(zhuǎn)換為私網(wǎng)ip
注: 在配置DNAT前一定要先配置SNAT!??!
iptables -t nat -A PREROUTING -d 外網(wǎng)客戶端地址 -p 指定協(xié)議?--dport 指定端口?-i 入站網(wǎng)卡 -j DNAT --to 轉(zhuǎn)換到的內(nèi)網(wǎng)服務(wù)器地址:服務(wù)端口(如果前面指定的端口和服務(wù)端口一致則可省略,如http默認(rèn)80端口,若前面修改成 -- dport 8080,最后就需要加上:80)
測試效果
外網(wǎng)客戶端訪問指定修改后的的外網(wǎng)ip就可以訪問內(nèi)網(wǎng)服務(wù)器
五、iptables防火墻策略的備份和恢復(fù)
? ? ? ? iptables的配置存放在/etc/sysconfig/iptables 文件中,我們對iptables所做的策略修改,雖然會立刻生效,但是并沒有保存下來,當(dāng)我們重啟iptables防火墻時,會讀取配置文件中設(shè)置的策略,我們之前修改過的策略便失效了。所以需要對修改的iptables策略進(jìn)行備份和恢復(fù)。
iptables-save > 備份文件? ? ? ? ? ? ? ? ? ? ? ? 將修改的iptables策略導(dǎo)入到備份文件中
iptables-restore < /opt/iptables.bak? ? ? ? 將備份文件中的策略還原到配置文件中文章來源:http://www.zghlxwxcb.cn/news/detail-443842.html
systemctl restart iptables.service? ? ? ? ? ? 重啟服務(wù)生效文章來源地址http://www.zghlxwxcb.cn/news/detail-443842.html
//1.查看配置文件中的默認(rèn)策略
[root@localhost1 opt]#cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configur ation
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
//2.以下為我們修改過的策略,使用iptables -nL查看
[root@localhost1 opt]#iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt: 22
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 3
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 2 0,21,22,53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5 3,67,68
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5 3
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTA BLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP udp -- 0.0.0.0/0 0.0.0.0/0 source IP range 19 2.168.10.100-192.168.10.200
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
//3.對自定義的iptables策略做備份(將命令導(dǎo)入一個備份文件iptables.bak)
[root@localhost1 opt]#iptables-save > /opt/iptables.bak
[root@localhost1 opt]#cd /opt
[root@localhost1 opt]#cat iptables.bak
# Generated by iptables-save v1.4.21 on Thu Sep 15 21:55:58 2022
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14:1392]
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 0 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21,22,53 -j ACCEPT
-A INPUT -p udp -m multiport --dports 53,67,68 -j ACCEPT
-A INPUT -p udp -m multiport --dports 53 -j ACCEPT
-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p udp -m iprange --src-range 192.168.10.100-192.168.10.200 -j DROP
COMMIT
# Completed on Thu Sep 15 21:55:58 2022
//4.重啟服務(wù)(用作模擬未保留修改的策略),再查看發(fā)現(xiàn)策略又恢復(fù)成了配置文件中的默認(rèn)策略
[root@localhost1 opt]#systemctl restart iptables.service
[root@localhost1 opt]#iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
//5.將備份文件中的策略恢復(fù)到配置文件中,再重啟服務(wù)就還原成功了
[root@localhost1 opt]#iptables-restore < /opt/iptables.bak
[root@localhost1 opt]#systemctl restart iptables.service
[root@localhost1 opt]#iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt: 22
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 0
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 3
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 2 0,21,22,53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5 3,67,68
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 5 3
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTA BLISHED
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP udp -- 0.0.0.0/0 0.0.0.0/0 source IP range 19 2.168.10.100-192.168.10.200
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
到了這里,關(guān)于Linux系統(tǒng)防火墻iptables的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!