利用Linux自帶的iptables配置防火牆

一、實驗要求

利用Linux自帶的iptables配置防火牆,完成如下配置:

  • (1)阻止任何外部世界直接與防火牆內部網段直接通訊
  • (2)允許內部用戶通過防火牆訪問外部HTTP和HTTPS服務器
  • (3)允許內部用戶通過防火結防問外部FTP服務器。
  • (4)其餘功能可自行添加。

網段示意圖:
在這裏插入圖片描述

二、環境配置

概述

新建3個虛擬機,分別作爲內網、網關(防火牆)、外網,如下:在這裏插入圖片描述
要在VMware中配置一個區分內網和外網並且含有網關的網絡環境,那麼就應該按照以下思路:

  1. 網關需要進行數據包的轉發,因此需要兩張虛擬網卡,一張對內,一張對外,兩張網卡設置爲不同的網段
  2. 內網的IP與網關的對內網卡IP處於同一網段,且內網的網關IP是網關主機的對內網卡IP
  3. 外網的IP與網關的對外網卡IP處於同一網段,且外網的網關IP是網關主機的對外網卡IP

整體思路就是這樣,具體的配置步驟如下

1、配置VMware的虛擬網絡

打開VMware的虛擬網絡選項,將NAT模式的“使用本地DHCP自動分配IP”取消勾選,因爲要創建兩個網絡環境,就需要手動給三個主機設置靜態IP及其網段,而DHCP服務會根據配置將所有虛擬機劃分到同一網段。

在這裏插入圖片描述

子網IP自己設置,但是需要和物理機的網絡適配器選項中的網關處於同一網段,這樣虛擬機纔可以上網,比如我設置IP範圍是192.168.11.0/24,網關就是192.168.11.2
在這裏插入圖片描述

2、配置網關

網關需要有轉發功能,因此需要兩個網卡一個對內,一個對外,在虛擬機設置中,添加一張網絡適配器(網卡),均選擇NAT模式即可

在這裏插入圖片描述
兩個網卡的設置方法相同,如下:

  • 對內網卡(網卡1 - ens33)

我是Ubuntu18.04,直接在設置中就可以修改網絡選項

在這裏插入圖片描述
設置網卡1,選擇IPv4的方式爲手動(Manual),在Address欄分別輸入

  • IP地址:192.168.11.16
  • 子網掩碼:255.255.255.0
  • 網關IP:192.168.11.2

(網關主機的網關IP用於和物理機進行數據交互,因此需要和物理主機的VMnet8網絡適配器中的網關一致,否則無法訪問外網)
在這裏插入圖片描述
至此,對內網卡填寫的數據如下:
在這裏插入圖片描述

  • 對外網卡(網卡2 - ens38)

對外網卡的配置與對內網卡一樣,只不過IP需要和對內網卡不在同一網段,如下:

  • IP地址:192.168.22.11
  • 子網掩碼:255.255.255.0
  • 網關IP:192.168.22.2

在這裏插入圖片描述
這樣網關的網卡就設置好了,但是默認的IP轉發功能並沒有開啓,需要手動開啓來進行轉發,使用以下語句將ip_forward文件內的值改爲1即可開啓

echo "1" > /proc/sys/net/ipv4/ip_forward

在這裏插入圖片描述

3、配置內網與外網

內外網的配置與網關的對內對外網卡大同小異,如下:

  • 內網

配置成以下數據:

  • IP地址:192.168.11.12(和網關的對內網卡IP處於同一網段)
  • 子網掩碼:255.255.255.0
  • 網關IP:192.168.11.16
    (此處的網關需要填網關主機的對內網卡IP,因爲是把其作爲內外環境的網關,讓數據包經過網關主機)

在這裏插入圖片描述

  • 外網

外網與內網同理

  • IP地址:192.168.22.12(和網關的對內網卡IP處於同一網段)
  • 子網掩碼:255.255.255.0
  • 網關IP:192.168.22.11 (網關主機的對外網卡IP)

在這裏插入圖片描述
至此,所有環境配置完成,各主機IP如下:

  • 內網:192.168.11.12
  • 外網:192.168.22.12
  • 網關:
    • 對內:192.168.11.16
    • 對外:192.168.22.11

三、環境測試

重啓網卡服務或者虛擬機,通過互相ping來測試環境是否配置成功

內網ping外網與網關(成功):
在這裏插入圖片描述
外網ping內網與網關(成功):
在這裏插入圖片描述
網關ping內網與外網(成功):

在這裏插入圖片描述
OK,測試無誤,可以開始進行iptables的防火牆配置了。

四、iptables規則配置

首先查看當前規則表爲空
在這裏插入圖片描述

1、阻止內外網直接通信

阻止任何外部世界直接與防火牆內部網段直接通訊,有以下兩種方法:

  • 1)將轉發鏈的默認策略改爲DROP

可以看到當前轉發鏈的默認策略是允許(ACCEPT)
在這裏插入圖片描述
使用語句 iptables -P FORWARD DROP 修改默認策略爲丟棄

在這裏插入圖片描述
此時內外網互相ping,均無法通信
在這裏插入圖片描述
在這裏插入圖片描述

不僅如此,內網主機也已經無法與任何外部網絡進行通信,例如百度
在這裏插入圖片描述
阻斷成功。

  • 2)設置指定IP可以訪問內網

將默認策略改回並重置iptables,並且將非內網的請求目標是內網的請求包拒絕(REJECT)即可。

此處以ping爲例,那麼協議就是icmp,語句如下:

iptables -I FORWARD -p icmp -d 192.168.11.12 -j REJECT

在這裏插入圖片描述
此時再次使用外網ping內網,已經無法ping成功
在這裏插入圖片描述
當然除此之外,還可以不指定數據包類型,那麼就切斷了所有的內外網直接訪問,如下,打開內網的Apache http服務
在這裏插入圖片描述
此時外網可以正常訪問
在這裏插入圖片描述
插入所有數據包均攔截(即不指定協議或端口)的規則:

iptables -I FORWARD -d 192.168.11.12 -j REJECT

再次使用外網訪問內網的http服務,無法訪問
在這裏插入圖片描述

2、內網通過防火牆訪問外網的HTTP和HTTPS

允許內部用戶通過防火牆訪問外部HTTP服務器,允許內部用戶通過防火牆訪問外部HTTPS服務器

該規則的含義是指:內網訪問外網只能訪問HTTP和HTTPS服務,其他的均攔截。

那麼接着上一步,依然將轉發鏈中默認的策略改爲DROP,且刪除所有配置,內網無法與外部進行任何通信,此時添加以下語句:

iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 80 -j ACCEPT 
iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 443 -j ACCEPT

語句表示:只有源地址是內網地址,目的地址不限,目的端口是80(HTTP)和443(HTTPS)時纔會允許,其餘的默認丟棄(此處均設置兩個服務的默認端口)
在這裏插入圖片描述
此時使用再訪問百度(HTTPS)
在這裏插入圖片描述
學校官網(HTTP),均可成功訪問
在這裏插入圖片描述
但是依然ping不通外網,因爲策略中沒有對其進行允許
在這裏插入圖片描述

3、內網通過防火牆訪問外網的TFP

允許內部用戶通過防火牆訪問外部FTP服務器。

FTP服務的默認端口爲20(傳輸端口)和21(控制端口),先不添加規則,在步驟二的iptables配置基礎上
在這裏插入圖片描述
直接訪問一個上海交大的FTP站點,無法訪問,因爲默認丟棄
在這裏插入圖片描述
此時添加以下語句:

iptables -A FORWARD -s 192.168.11.12 -p tcp --dport 20 -j ACCEPT 
iptables -A FORWARD -s 192.168.11.12 -p tcp --dport 21 -j ACCEPT

在這裏插入圖片描述
再次訪問,即可成功
在這裏插入圖片描述

4、內網服務器端口映射

將內網服務器的80端口映射到網關的9999端口,也就是可以通過訪問網關的9999端口,來訪問內網的80端口提供的HTTP服務

首先需要打開轉發功能,也就是允許所有轉發

iptables -I FORWARD -j ACCEPT

在這裏插入圖片描述
接着輸入以下兩條語句:

  • 請求包的NAT映射
iptables -t nat -I PREROUTING -d 192.168.11.16 -p tcp --dport 9999 -j DNAT --to 192.168.11.12:80
  • 響應包的NAT映射
iptables -t nat -I POSTROUTING -s 192.168.11.12 -j SNAT --to 192.168.11.16

在這裏插入圖片描述
此時便可成功映射,訪問網關主機的9999端口即訪問內網的HTTP服務
在這裏插入圖片描述

附:iptables & 涉及參數解釋

僅對實驗中涉及到的參數進行解釋,其餘的網上比比皆是,請自行搜查。

1、iptables簡述

iptables的設計是四表五鏈結構

四表:

  • filter: 基本過濾表,防火牆,也是不指定表時的默認表
  • nat: 用於NAT(網絡地址轉換)功能,如端口映射,地址映射等
  • mangle: 用於對特定數據包的修改
  • raw: 有限級最高,設置raw時一般是爲了不再讓iptables做數據包的鏈接跟蹤處理,提高性能

五鏈:

  • INPUT: 進來的數據包應用此規則鏈中的策略
  • OUTPUT: 外出的數據包應用此規則鏈中的策略
  • FORWARD: 轉發數據包時應用此規則鏈中的策略
  • PREROUTING: 對數據包作路由選擇前應用此鏈中的規則(所有的數據包進來的時侯都先由這個鏈處理)
  • POSTROUTING: 對數據包作路由選擇後應用此鏈中的規則(所有的數據包出來的時侯都先由這個鏈處理)

鏈是相同動作規則的集合,表是相同功能規則的集合。

iptables工作優先級示意圖:
在這裏插入圖片描述

2、參數解釋

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION
  • -t table:指操作的表,filter、nat、mangle或raw, 默認使用filter
  • COMMAND:子命令,定義對規則的管理
  • chain:指明鏈路
  • CRETIRIA:匹配的條件或標準
  • ACTION:操作動作

以以下語句爲例:

iptables -I FORWARD -s 192.168.11.12 -p tcp --dport 80 -j ACCEPT
  • 未指定-t table即使用默認表,filter
  • -I FORWARD表示在FORWARD鏈首插入(insert)本條規則,-A是在末尾追加(append)
  • -s 表示源IP(source)
  • -p 表示網絡協議(protocol),一般有TCP、UPD、ICMP等
  • –dport 表示目的端口(destination port)
  • -j 後跟執行的動作,一般有ACCEPT、REJECT、DROP,或者在nat表中還可能有SNAT(對源地址進行NAT)、DNAT(對目的地址進行NAT)

除此還有一些常用的:

  • iptables -t table -L:列出指定表的規則鏈信息
  • iptables -t table -D chain 1:刪除指定表的指定鏈的第1條規則
  • iptables -t table -F:重置指定表(刪除表中所有規則)
  • iptables -t table -P chain ACTION:更改指定表中指定鏈的默認策略

具體的iptables相關知識請看以下博客,非常詳細:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章