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

1. 火牆介紹

防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的邊界上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間創建起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所鏈接的網絡之間的軟件或硬件。該計算機流入流出的全部網絡通訊和數據包均要通過此防火牆。node


1.1 iptables簡介

IPTABLES 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。若是 Linux 系統鏈接到因特網或 LAN、服務器或鏈接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置shell

iptables其實不是真正的防火牆,咱們能夠把它理解成一個客戶端代理,用戶經過iptables這個代理,將用戶的安全設定執行到對應的"安全框架"中,這個"安全框架"纔是真正的防火牆,這個框架的名字叫netfilter。netfilter纔是防火牆真正的安全框架(framework),netfilter位於內核空間。vim

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

規則鏈


tcp

  • input 鏈:輸入(當收到訪問防火牆本機地址的數據包時,將應用此鏈中的規則;)
  • output 鏈:輸出(當防火牆本機向外發送數據包時,將應用此鏈中的規則;)
  • forward 鏈:轉發(當收到須要經過防火中轉發給其餘地址的數據包時,將應用此鏈中的規則;)
  • prerouting 鏈:路由以前(在對數據包作路由選擇以前,將應用此鏈中的規則;)
  • postrouting 鏈:路由以後(在對數據包作路由選擇以後,將應用此鏈中的規則;)

數據包狀態


工具

RELATED 創建過鏈接的
ESTABLISHED 正在鏈接的
NEW 新的


4. iptables的永久保存

iptables策略記錄文件:/etc/sysconfig/iptablespost

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.111)中訪問外網(192.168.43.121)


在這裏插入圖片描述


在外網主機(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 -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 1.1.1.111:將外網訪問內網的經過此路由的IP轉換爲1.1.1.111

  2. service iptables save:保存修改


在這裏插入圖片描述


8.2 客戶端配置


內網主機


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




外網主機


在這裏插入圖片描述





8.3 客戶端測試


在外網主機node3中登錄路由器node1,顯示登錄在node2上


在這裏插入圖片描述


在node2中查看登錄本身的主機,顯示是node3主機


在這裏插入圖片描述

相關文章
相關標籤/搜索