首頁 > 軟體

iptables防火牆網路安全實踐設定

2020-06-16 16:48:57

01:iptables防火牆網路安全前言介紹
企業中安全設定原則:
盡可能不給伺服器設定外網IP,可以通過代理轉發或者通過防火牆對映。
並行不是特別大情況有外網IP,可以開啟防火牆服務。大並行的情況,不能開iptables,影響效能,利用硬體防火牆提升架構安全。

2.iptables防火牆概念介紹
Netfilter/Iptables(以下簡稱Iptables)是unix/linux自帶的一款優秀且開放原始碼的完全自由的基於包過濾的防火牆工具,它的功能十分強大,使用非常靈活,可以對流入和流出伺服器的封包進行很精細的控制。

iptables是linux2.4及2.6核心中整合的服務。
iptables主要工作在OSI七層的二、三、四層,如果重新編譯核心,iptables也可以支援7層控制

3.iptables防火牆使用時名詞概念理解
容器:裝東西的器皿,docker容器技術,將映象裝在了一個系統中,這個系統就稱為容器
iptables稱為一個容器---裝著防火牆的表
防火牆的表又是一個容器---裝著防火牆的鏈
防火牆的鏈也是一個容器---裝著防火牆的規則
iptables---表---鏈---規則

規則:防火牆一條一條安全策略
防火牆匹配規則流程:參見防火牆工作流程圖
1.防火牆是層層過濾的,實際是按照設定規則的順序從上到下,從前到後進行過濾的。
2.如果匹配上規則,即明確表示是阻止還是通過,封包就不再向下匹配新的規則。
3.如果規則中沒有明確表明是阻止還是通過的,也就是沒有匹配規則,
向下進行匹配,直到匹配預設規則得到明確的阻止還是通過。
4.防火牆的預設規則是所有規則執行完才執行的。

表和鏈說明:4表5鏈
Filter: 實現防火牆安全過濾功能
· INPUT 對於指定到本地通訊端的包,即到達本地防火牆伺服器的封包 外面---->(門)房子iptables
· FORWARD 路由穿過的封包,即經過本地防火牆伺服器的封包 外面-----(前門)房子(後門)---房子
· OUTPUT 本地建立的封包 外面<-----(門)房子iptables
NAT: 實現將封包中IP地址或者埠資訊,內網到外網進行改寫/外網到內網進行改寫
· PREROUTING 一進來就對封包進行改變 在路由之前,進行封包IP地址或埠資訊的轉換
· OUTPUT 本地建立的封包在路由之前進行改變 本地防火牆要出去的流量進行相應轉換(了解)
· POSTROUTING 在封包即將出去時改變封包資訊 在路由之後,進行封包IP地址或埠資訊的轉換
Managle 對資料進行標記
raw 忽略不計

多個表和鏈的關係


4.iptables防火牆操作實踐練習
1)iptables防火牆設定初始化
/etc/init.d/iptables start
chkconfig iptables on
iptables -F --- 清除防火牆預設規則
iptables -X --- 清除防火牆自定義鏈
iptables -Z --- 清除防火牆技術器資訊

2)iptables防護牆資訊檢視方法
/etc/init.d/iptables status
iptables -L --- -L 以列表形式顯示所有規則資訊
iptables -L -n --- -n 以數位形式顯示IP地址或埠資訊,不要轉換為字串顯示
iptables -t nat -L -n --- -t 表示指定檢視或者設定相應的表
iptables -L -n -v --- -v 表示顯示詳細規則資訊,包含匹配計數器數值資訊
iptables -L -n --line-number --- --line-number 顯示規則序號資訊

3)iptables防火牆埠規則設定:
實踐01:阻止使用者存取伺服器的22埠
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP --- -A 表示新增規則到相應鏈上,預設表示新增規則到結尾
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP --- -D 表示刪除規則從相應鏈上。
iptables -t filter -D INPUT 規則序號
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP --- -I 表示插入規則到相應鏈上,預設表示插入規則到首部
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP --- 指定規則插入位置
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP --- -R 指定將設定好的規則資訊進行替換

總結防火牆引數資訊:
-A --- 表示將規則新增到指定鏈上
-I --- 表示將規則插入到指定鏈上
-D --- 表示將規則從指定鏈上刪除
-R --- 表示將規則資訊進行修改
-p --- 指定相應服務協定資訊(tcp udp icmp all)
--dport --- 表示指定目標埠資訊
--sport --- 表示指定源埠號資訊
-j --- 指定對相應匹配規則執行什麼操作(ACCEPT DROP* REJECT)

實踐02:阻止相應網段主機存取伺服器端指定埠服務
10.0.0.0/24 -- 22埠(阻止)
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP

總結引數資訊:
-s --- 指定匹配的源地址網段資訊,或者匹配的主機資訊
-d --- 指定匹配的目標地址網段資訊,或者匹配的主機資訊
-i --- 指定匹配的進入流量介面資訊 只能設定在INPUT鏈上
-o --- 指定匹配的發出流量介面資訊 只能設定在OUTPUT鏈上

實踐03:除了莫個地址可以存取22埠之外,其餘地址都不能存取
10.0.0.1 10.0.0.253 10.0.0.9(只允許)
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP

iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
通過利用 !進行規則取反,進行策略控制

實踐04:指定阻止存取多個埠服務
22--80 22,24,25
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP --- 匹配連續的埠號存取
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP --- 匹配不連續的埠號存取

總結引數資訊:
-m --- 指定應用擴充套件模組引數
multiport --- 可以匹配多個不連續埠資訊

實踐05: 通過防火牆實現禁ping功能
實現ping功能測試鏈路是否正常,基於icmp協定實現的
icmp協定有多種型別:
icmp-type 8:請求型別 icmp-type 0:回復型別

情況一:實現禁止主機存取防火牆伺服器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP

情況二:實現禁止防火牆存取主機伺服器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP

預設情況:所有icmp型別都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP

實踐06:實現防火牆狀態機制控制
NEW: 傳送封包裡面控制欄位為syn=1,傳送第一次握手的封包
ESTABLISHED: 請求封包發出之後,響應回來的封包稱為回復的包
RELATED: 基於一個連線,然後建立新的連線 例如:ftp連線
INVALID: 無效的的封包,封包結構不符合正常要求的

iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT


5.企業當中應用防火牆方法
專案:部署一個最安全的企業級防火牆(案例)
兩種思想:針對預設規則而言。
逛公園:黑名單
1、預設規則預設是允許的狀態。
看電影:白名單(更安全,推薦設定)
2、預設規則預設是不允許的狀態。更安全。
看電影的思想更安全。

1)儲存防火牆組態檔資訊
cp /etc/sysconfig/iptables{,.bak}

2)清除設定規則
iptables -F <- 清空iptables所有規則資訊(清除filter)
iptables -X <- 清空iptables自定義鏈設定(清除filter)
iptables -Z <- 清空iptables計數器資訊(清除filter)

3)別把自己踢出到門外
iptables -A INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j ACCEPT

4)設定防火牆filter上各個鏈的預設規則
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

-P --- 指定相應鏈的預設規則策略,是允許還是阻止

5)允許iptables伺服器端ping自己的網絡卡地址
iptables -A INPUT -i lo -j ACCEPT --- 讓自己可以ping自己

6)指定外網可以存取的埠資訊
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT

7)企業中內網之間不要設定防火牆策略
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT --- 允許架構內部服務進行存取

8)企業之間有合作關係的,不要將友商的網路禁止(主要經常改動)
iptables -A INPUT -s 10.0.1.0/24 -j ACCEPT --- 允許一些合作企業的外網伺服器進行存取
iptables -A INPUT -s 10.0.2.0/24 -j ACCEPT

9)如果防火牆上設定了FTP服務,需要設定網路狀態機制
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT --- 允許web服務與ftp伺服器建立連線
注意:如果沒有ESTABLISHED允許,當用防火牆的伺服器ssh去另一台伺服器時,就沒有回來的資料了
例如:telnet 10.0.0.9 22 將連線不成功
10)實現iptables策略設定永久儲存
①. 利用防火牆啟動指令碼命令引數,實現永久儲存
/etc/init.d/iptables save

②. 利用防火牆設定資訊儲存命令,實現永久儲存
iptables-save >/etc/sysconfig/iptables

範例拓展:避免自己被踢出門外
1.去機房重新啟動系統或者登陸伺服器刪除剛才的禁止規則。
2.讓機房人員重新啟動伺服器或者讓機房人員拿使用者密碼登入進去
3.通過伺服器的遠端管理卡管理(推薦)
4.先寫一個定時任務,每5分鐘就停止防火牆
5.測試環境測試好,寫成指令碼,批次執行?

以上內容為防火牆filter表的設定實踐與原理說明


6.防火牆nat表的設定實踐
iptables NAT:(設定NAT表示就是設定以下兩個鏈)
1.postrouting(內網---外網-NAT 源私網IP地址---源公網IP地址)
路由之後,進行地址對映轉換,把源地址進行轉換(源私網地址==>源公網地址)
2.prerouting(外網---內網-NAT 目標公網IP地址---目標私網IP地址 對映目標埠)
路由之前,進行地址對映轉換,把目標地址進行轉換(目標公網地址==>目標變為私網地址)

實踐一:iptables實現共用上網方法(postrouting)
第一個歷程:設定內網伺服器,設定閘道器地址
/etc/init.d/iptables stop --- 內網伺服器停止防火牆服務
ifdown eth0 --- 模擬關閉內網伺服器外網網絡卡
setup --- 修改內網網絡卡閘道器和DNS地址資訊
[root@oldboyedu42-lnb-02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 172.16.1.7 0.0.0.0 UG 0 0 0 eth1
說明:內網伺服器閘道器地址指定為共用上網伺服器內網網絡卡地址

第二個歷程:設定共用上網伺服器,開啟共用上網伺服器路由轉發功能
[root@oldboyedu42-lnb-02 ~]# vim /etc/sysctl.conf
[root@oldboyedu42-lnb-02 ~]# sysctl -p
net.ipv4.ip_forward = 1

第三個歷程:設定共用上網伺服器,實現內網存取外網的NAT對映
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7
-s 172.16.1.0/24 --- 指定將哪些內網網段進行對映轉換
-o eth0 --- 指定在共用上網哪個網絡卡介面上做NAT地址轉換
-j SNAT --- 將源地址進行轉換變更
-j DNAT --- 將目標地址進行轉換變更
--to-source ip地址 --- 將源地址對映為什麼IP地址
--to-destination ip地址 --- 將目標地址對映為什麼IP地址

擴充套件如果開啟:forward預設drop策略,如果設定forward鏈
iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT

網路封包傳輸過程一定是有去有回的

實踐二:iptables實現共用上網方法(postrouting)
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 偽裝共用上網
說明:在企業中如何沒有固定外網IP地址,可以採取以上偽裝對映的方式進行共用上網

總結:設定對映方法
1.指定哪些網段需要進行對映 -s 172.16.1.0/24
2.指定在哪做對映 -o eth0
3.用什麼方法做對映 -j SNAT/DNAT
4.對映成什麼地址 --to-source ip地址/--to-destination ip地址

實踐三:iptables實現外網IP的埠對映到內網IP的埠
需求:將閘道器的IP和9000埠對映到內網伺服器的22埠
埠對映 10.0.0.7:9000 -->172.16.1.8:22
實現命令:
iptables -t nat -A PREROUTING -d 10.0.0.7 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.8:22

(1)-d 10.0.0.8目標地址。
(2)-j DNAT 目的地址改寫。

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-08/153549.htm


IT145.com E-mail:sddin#qq.com