天天看點

Linux中的火牆:firewall和iptables

所謂防火牆指的是一個由軟體和硬體裝置組合而成、在内部網和外部網之間、專用網與公共網之間的邊界上構造的保護屏障.是一種擷取安全性方法的形象說法,它是一種計算機硬體和軟體的結合,使Internet與Intranet之間建立起一個安全網關(Security Gateway),進而保護内部網免受非法使用者的侵入,防火牆主要由服務通路規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位于計算機和它所連接配接的網絡之間的軟體或硬體。該計算機流入流出的所有網絡通信和資料包均要經過此防火牆。

在網絡中,所謂“防火牆”,是指一種将内部網和公衆通路網(如Internet)分開的方法,它實際上是一種隔離技術。防火牆是在兩個網絡通訊時執行的一種通路控制尺度,它能允許你“同意”的人和資料進入你的網絡,同時将你“不同意”的人和資料拒之門外,最大限度地阻止網絡中的黑客來通路你的網絡。換句話說,如果不通過防火牆,公司内部的人就無法通路Internet,Internet上的人也無法和公司内部的人進行通信。

百度百科:防火牆:https://baike.baidu.com/item/防火牆/52767?fromtitle=firewall&fromid=9705392&fr=aladdin

在Red Hat發行的linux版本中,我們用到的防火牆有兩種,一種為firewall,一種為iptables。

下面我們将對兩種火牆都做說明:

【firewall:】

yum search firewalld  ###安裝
systemctl stop iptables 停止iptables
systemctl start firewalld 開啟火牆
           
Linux中的火牆:firewall和iptables

firewall-config ###圖形檢視域

下來了解一些關于火牆的基礎指令:

firewall-cmd 
	--state    ###狀态
	--get-active-zones   ###正在使用的域
	--get-default-zone   ###預設的域
	--get-zones          ###支援的域
	--zone=public --list-all   ###public域的設定
	--get-services       ###支援的所有可以直接使用的服務
	--list-all-zones     ###所有域的設定
	--set-default-zone=dmz   ###更改正在使用的域,和改預設的域是一樣
           
Linux中的火牆:firewall和iptables
firewall-cmd --permanent --zone=internal --add-source=172.25.254.250     
###在internal域中允許所有250來源的資料包【例如250pc使用ssh通路】
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24     ###删除internal域中的172.25.0.0網段的所有來源資料包權限
firewall-cmd --permanent --zone=internal --add-interface=eth0    ###給某個域添加eth0接口
firewall-cmd --permanent --zone=internal --change-interface=eth0    ###直接改變eth0接口的所在域
firewall-cmd --permanent --zone=internal --remove-interface=eth0    ###移除internal域中的eth0接口
--permanent 為永久性更改,重起服務後依舊生效
           

下 面 來 演 示 一 下 s o u r c 的 使 用 , 允 許 通 過 某 一 i p 的 數 據 包 : \color{blue}{下面來示範一下sourc的使用,允許通過某一ip的資料包:} 下面來示範一下sourc的使用,允許通過某一ip的資料包:

需要兩台pc,一台伺服器,一台用戶端。

1.伺服器配置雙網卡,每個網卡都有一個IP

Linux中的火牆:firewall和iptables

2.伺服器上下載下傳并開啟httpd,firewalld,http預設釋出檔案中寫入内容

yum install http firewall -y
systemctl start httpd
systemctl start firewalld
vim /var/www/html/index.html  ###随便寫入内容,友善檢視
           
Linux中的火牆:firewall和iptables

我們可以用firewall-cmd --list-all檢視現在的域設定:

Linux中的火牆:firewall和iptables

通過添加用戶端IP到trustd域中,以達到讓特定的使用者可以通路。【通路控制】

Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables

在用戶端進行測試:

配置好網絡,浏覽器輸入伺服器IP:

Linux中的火牆:firewall和iptables

下 面 來 演 示 一 下 更 改 接 口 到 t r u s t e d 域 , 使 單 一 網 卡 I P 段 可 以 被 訪 問 : \color{blue}{下面來示範一下更改接口到trusted域,使單一網卡IP段可以被通路:} 下面來示範一下更改接口到trusted域,使單一網卡IP段可以被通路:

我們将雙網卡的伺服器,一個網卡加入到trusted域中,并改變該網卡上的IPv的IP為其他網段:

Linux中的火牆:firewall和iptables

我們将用戶端的IP改為和eth1為同一網段的IP,再進行通路:

Linux中的火牆:firewall和iptables

用戶端在浏覽器上通路:

Linux中的火牆:firewall和iptables
firewall-cmd --reload    ###當ssh已經連接配接後不會斷開
firewall-cmd --complete-reload    ###會斷開已經建立的ssh連接配接

在/etc/firewalld/zones 中檢視目前域的配置。
	可以直接在檔案中更改域設定
	old檔案會恢複火牆臨時更改前的狀态
/lib/firewalld/services/中有各個服務的配置檔案
/lib/firewalld/zones 為函數,調用ssh時會使用
           

D i r e c t 規 則 【 使 單 一 的 某 個 P C 可 以 s s h 連 接 】 \color{blue}Direct 規則 【使單一的某個PC可以ssh連接配接】{} Direct規則【使單一的某個PC可以ssh連接配接】

-s 來源

-p 協定

–dport來源端口

-j動作 ACCEPT【接受】 REJECT【拒絕,有響應,用戶端會不再通路】 DROP【丢棄,沒有響應,用戶端會一直通路,加大伺服器負載壓力】

firewall-cmd --list-all  ###有ssh服務
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.12 -p tcp --dport 22 -j ACCEPT  
 ###添加政策,允許12使用22端口的ssh
firewall-cmd --remove-service=ssh   ##目前域移除ssh服務
firewall-cmd --list-all
用12去ssh該pc,再用其他ip主機去ssh該pc,發現隻有12可以連接配接
           
Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables
firewall-cmd --direct --get-all-rules   ##檢視目前政策
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.14 -p tcp --dport 22 -j ACCEPT
移除已有的ipv4 filter INPUT 1 -s 172.25.254.12 -p tcp --dport 22 -j ACCEPT 政策
firewall-cmd --direct --get-all-rules
再用12去連接配接,也無法連接配接
           
Linux中的火牆:firewall和iptables

firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.12 -p tcp --dport 22 -j ACCEPT ###除了12,其他都可以連接配接

Linux中的火牆:firewall和iptables

下面實驗前,先移除之前的配置,将環境還原。

Linux中的火牆:firewall和iptables

位址僞裝和端口轉發:

Linux中的火牆:firewall和iptables

首先位址僞裝,外網172.25.254網段主機需要借助我們雙網卡主機來連接配接到内網的1.1.1網段pc上。【線路1】

雙網卡服務端:

firewall-cmd --permanent --add-masquerade  ###
firewall-cmd --reload
sysctl -a | grep ip_forward
如果ip_forward=0,則需要vim /etc/sysctl.conf【将net.ipv4.ip_forward的值改為1】【添加一行:net.ipv4.ip_forward=1】
           
Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables

172.25.254.12測試端:

設定網關為雙網卡伺服器的172.25.254.200

ping 1.1.1.200

ping 1.1.1.1

Linux中的火牆:firewall和iptables

這樣我們位址僞裝就完成了,手繪圖的線路1即完成。下面進行端口轉發:

firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.1
###端口轉發到1.1.1.1
firewall-cmd --list-all 
           
Linux中的火牆:firewall和iptables

測試端:172.25.254.12主機:通路雙網卡伺服器的172.25.254.200時,會自動跳轉為遠處伺服器1.1.1.1上。

Linux中的火牆:firewall和iptables

在後續的iptables中,我們會繼續了解線路2的内容

iptables:

IPTABLES 是與最新的 3.5 版本 Linux 核心內建的 IP 資訊包過濾系統。如果 Linux 系統連接配接到網際網路或

LAN、伺服器或連接配接 LAN 和網際網路的代理伺服器, 則該系統有利于在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。

iptables 元件是一種工具,也稱為使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載下傳該工具并安裝使用它。

systemctl stop firewalld
systemctl start iptables
           

正式介紹iptables之前,我們先了解一下三表五列:

三表:nat表,filter表,mangle表

五列:/input/output/forward/postrouting/prerouting

一些列隻在單獨的表中有,mangle表為附加表

Linux中的火牆:firewall和iptables

iptables

參數 含義
-t 指定表名稱
-n 不做解析
-L 列出指定表中的政策
-A 增加政策
-p 網絡協定
–dport 端口
-s 資料來源
-j 動作
ACCEPT 允許
REJECT 拒絕
DROP 丢棄
-N 增加鍊
-E 修改鍊名稱
-X 删除鍊
-D 删除指定政策
-I 插入
-R 修改政策
-P 修改預設政策
iptables  -t filter -nL		#檢視filter表中的政策   【不加-t和表的時候預設檢視filter表】
iptables  -F			#刷掉filter表中的所有政策,當沒有用-t指定表名稱時預設是filter表【相當于删除】
service iptables save		#儲存目前政策到/etc/sysconfig/iptables
iptables -A INPUT -i lo -j ACCEPT	#允許lo  【回環接口】
iptables -A INPUT -p tcp --dport 22 -j ACCEPT	##允許通路22端口
iptables -A INPUT -s 172.25.254.250 -j ACCEPT	##允許250主機通路本機所有端口
iptables -A INPUT -j REJECT 			##拒絕所有主機的資料來源
iptables -D INPUT 3    ###删除預設表INPUT列中的第三條政策
iptables -I INPUT  -p tcp --dport 80  -j REJECT	##插入政策到INPUT中的第一條
iptables -I INPUT 2 -s 172.25.254.250 -p tcp --dport 22  -j REJECT ###插入政策拒絕250通路22端口到input第二條
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT	##修改第一條政策
iptables -R INPUT 2 -s 172.25.254.250 -j REJECT ##修改第二條政策為REJECT
iptable -P INPUT DROP		##把INPUT表中的預設政策改為drop
           
Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables

政策的讀取是按順序讀取,當第一條拒絕政策被讀取後,後面的允許政策則失效:

Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables
iptables -F 刷掉設定的政策後
iptables -P INPUT DROP  更改預設政策為DROP
用172.25.254.12主機去ssh伺服器172.25.254.200
會一直處于連接配接等待狀态,也不報錯連接配接失敗。【通路直接被丢棄】
           
Linux中的火牆:firewall和iptables

常用的iptables指令如上所述。下面我們來實作nat表的位址轉換

nat表:做位址轉換

測試機:172.25.254.12

雙網卡主機:172.25.254.200 1.1.1.200

遠端:1.1.1.1

【功能:】

172.25.254.12ssh172.25.254.200,會通過1.1.1.200網卡自動連接配接到1.1.1.1這台主機上。

1.1.1.1這台主機無法直接傳輸資料ping到172.25.254.12,需要端口僞裝,将其僞裝為172.25.254.200,然後可以傳輸資料【ping】到172.25.254.12

在雙網卡伺服器上:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.198:22   
 ###IP為目的地位址【做位址轉發】  
用14主機ssh199,ifconfig,會發現連接配接到的是198

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.199    
 ###ip為雙網卡的172段
用1.1.1.198ping172.25.254.14 ,可以ping通
           
Linux中的火牆:firewall和iptables
Linux中的火牆:firewall和iptables

注意:1.1.1.1這台主機上需要設定網關,否則資料可能無法經過1.1.1.200發送至172.25.254.200再發送回172.25.254.12

Linux中的火牆:firewall和iptables
 大大的小小陽
           

繼續閱讀