【Linux學習筆記26-1】Linux的火牆優化策略之iptables

sdsnzy_9發表於2020-12-10

1. 火牆介紹

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


1.1 iptables簡介

IPTABLES 是與最新的 3.5 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置

iptables其實不是真正的防火牆,我們可以把它理解成一個客戶端代理,使用者通過iptables這個代理,將使用者的安全設定執行到對應的"安全框架"中,這個"安全框架"才是真正的防火牆,這個框架的名字叫netfilter。netfilter才是防火牆真正的安全框架(framework),netfilter位於核心空間。

iptables其實是一個命令列工具,位於使用者空間,我們用這個工具操作真正的框架。netfilter/iptables(下文中簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

Netfilter是Linux作業系統核心層內部的一個資料包處理模組,它具有如下功能:

  1. 網路地址轉換(Network Address Translate)
  2. 資料包內容修改
  3. 以及資料包過濾的防火牆功能


2. 火牆管理工具切換

2.1 firewalld切換到iptables

  1. 關閉firewalld
systemctl disable --now firewalld.service
systemctl mask firewalld.service
  1. 開啟iptables
dnf install iptables-services.x86_64 -y
systemctl unmask iptables.service
systemctl enable --now iptables.service

2.2 iptables切換到firewalld

  1. 關閉iptables
systemctl disable --now iptables.service
systemctl mask iptables.service
  1. 開啟firewalld
dnf install firewalld -y	#安裝firewalld(rhel8中預設已安裝)
systemctl unmask firewalld.service
systemctl enable --now firewalld.service


3. iptables的四表五鏈

每個規則表,其實就相當於一個核心空間的容器,按照規則集的不同用途進行劃分為預設的四個表,在每個規則表中包含不同的規則鏈,處理資料包的不同時機分為五種鏈,決定是否過濾或處理資料包的各種規則並按照先後順序存放在各規則鏈中。

  • 規則的作用:對資料包進行過濾或處理;
  • 鏈的作用:容納多種防火牆規則;

在這裡插入圖片描述

規則表:iptables管理著四個不同的規則表,分別由獨立的核心模組實現

  • filter 表:經過本機核心的資料,用來對資料包進行過濾,具體的規則要求決定如何處理一個資料包。對應的核心模組為:iptable_filter,其表內包括三個鏈:inputforwardoutput
  • nat 表:(network address translation,網路地址轉換)不經過核心,主要用來修改資料包的 IP 地址、埠號資訊。對應的核心模組為:iptable_nat,其表內包括三個鏈:preroutingpostroutingoutput
  • mangle 表:當fileter和nat表不夠用時使用主要用來修改資料包的服務型別,生存週期,為資料包設定標記,實現流量整形、策略路由等。對應的核心模組為:iptable_mangle,其表內包括五個鏈:preroutingpostroutinginputoutputforward
  • raw 表:主要用來決定是否對資料包進行狀態跟蹤。對應的核心模組為:iptable_raw,其表內包括兩個鏈:outputprerouting

規則鏈

  • input 鏈:輸入(當收到訪問防火牆本機地址的資料包時,將應用此鏈中的規則;)
  • output 鏈:輸出(當防火牆本機向外傳送資料包時,將應用此鏈中的規則;)
  • forward 鏈:轉發(當收到需要通過防火中轉發給其他地址的資料包時,將應用此鏈中的規則;)
  • prerouting 鏈:路由之前(在對資料包做路由選擇之前,將應用此鏈中的規則;)
  • postrouting 鏈:路由之後(在對資料包做路由選擇之後,將應用此鏈中的規則;)

資料包狀態

RELATED建立過連線的
ESTABLISHED正在連線的
NEW新的


4. iptables的永久儲存

iptables策略記錄檔案:/etc/sysconfig/iptables

iptables-save > /etc/sysconfig/iptables
service iptables save

在這裡插入圖片描述
在這裡插入圖片描述



5. iptables命令


iptables [ -t 表名 ] 管理選項 [ 鏈名 ] [ 條件匹配 ] [ -j 目標動作或跳轉 ]

注意事項:
1.不指定表名時,預設表示filter表,
2.不指定鏈名時,預設表示該表內所有鏈,除非設定規則鏈的預設策略,否則需要指定匹配條件


鏈管理
-N增加鏈-X刪除鏈-E重新命名鏈
規則管理
-F清空規則-A增加策略
-D刪除規則-I插入規則
-R修改規則-P修改預設規則
基本命令
-t指定表名稱-n不做解析
-L列出指定表的策略--dport目標埠
-s資料來源-p協議
-o輸出介面-i輸入介面
ACCEPT允許DROP丟棄
REJECT拒絕-SNAT源地址轉換
DNAT目的地地址轉換-j動作

在這裡插入圖片描述



6. 火牆優化部署

允許ESTABLISHED與RELATED狀態的資料連線:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

允許迴環介面中NEW狀態的資料連線: 
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT

允許狀態為NEW的資料訪問80埠: 
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

允許172.25.254.10中狀態為NEW的資料訪問22埠: 
iptables -A INPUT -s 172.25.254.10 -p tcp --dport 22 -m state --state NEW -j ACCEPT

其餘訪問一概拒絕:
iptables -A INPUT -j REJECT

#最後必須儲存
service iptables save

7. nat表中的SNAT(內網訪問外網)

實驗環境:

  1. 雙網路卡主機(路由):192.168.43.101;1.1.1.101
  2. 單網路卡主機(內網):1.1.1.111(閘道器設為雙網路卡 1 段IP)
  3. 單網路卡主機(外網):192.168.43.121

7.1 路由器端

在這裡插入圖片描述

  1. 開啟iptables服務
systemctl disable --now firewalld.service 
systemctl mask firewalld.service 上鎖
dnf install iptables-services.x86_64 -y
systemctl enable --now iptables.service 
  1. iptables -F:清空預設表(filter)
  2. 檢查基本配置
sysctl -a | grep ip_forward
vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1	#可以ping
sysctl -p

在這裡插入圖片描述

  1. iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.43.101:將內網訪問外網的通過此路由的IP轉換為192.168.43.101
  2. service iptables save:儲存修改
  3. iptables -t nat -nL:檢視nat表

在這裡插入圖片描述

7.2 客戶端配置


內網主機


在這裡插入圖片描述
在這裡插入圖片描述


外網主機


在這裡插入圖片描述

7.3 客戶端測試

  1. 在內網主機(1.1.1.111)中訪問外網(192.168.43.121)

在這裡插入圖片描述

  1. 在外網主機(192.168.43.121)中檢視登陸者,卻顯示路由器IP

在這裡插入圖片描述



8.nat表中的DNAT(外網訪問內網)

實驗環境:

  1. 雙網路卡主機(路由):192.168.43.101;1.1.1.101
  2. 單網路卡主機(內網):1.1.1.111(閘道器設為雙網路卡 1 段IP)
  3. 單網路卡主機(外網):192.168.43.121

8.1 路由器端

在這裡插入圖片描述

  1. 開啟iptables服務
systemctl disable --now firewalld.service 
systemctl mask firewalld.service 上鎖
dnf install iptables-services.x86_64 -y
systemctl enable --now iptables.service 
  1. iptables -F:清空預設表(filter)
  2. 檢查基本配置
sysctl -a | grep ip_forward
vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1	#可以ping
sysctl -p
  1. iptables -t nat -A PREROUTING -i ens192 -j DNAT --to-dest 1.1.1.101:將外網訪問內網的通過此路由的IP轉換為1.1.1.101
  2. service iptables save:儲存修改

8.2 客戶端配置


內網主機


在這裡插入圖片描述
在這裡插入圖片描述


外網主機


在這裡插入圖片描述

8.3 客戶端測試

相關文章