【Linux學習筆記26-1】Linux的火牆優化策略之iptables
文章目錄
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作業系統核心層內部的一個資料包處理模組,它具有如下功能:
- 網路地址轉換(Network Address Translate)
- 資料包內容修改
- 以及資料包過濾的防火牆功能
2. 火牆管理工具切換
2.1 firewalld切換到iptables
- 關閉firewalld
systemctl disable --now firewalld.service
systemctl mask firewalld.service
- 開啟iptables
dnf install iptables-services.x86_64 -y
systemctl unmask iptables.service
systemctl enable --now iptables.service
2.2 iptables切換到firewalld
- 關閉iptables
systemctl disable --now iptables.service
systemctl mask iptables.service
- 開啟firewalld
dnf install firewalld -y #安裝firewalld(rhel8中預設已安裝)
systemctl unmask firewalld.service
systemctl enable --now firewalld.service
3. iptables的四表五鏈
每個規則表,其實就相當於一個核心空間的容器,按照規則集的不同用途進行劃分為預設的四個表,在每個規則表中包含不同的規則鏈,處理資料包的不同時機分為五種鏈,決定是否過濾或處理資料包的各種規則並按照先後順序存放在各規則鏈中。
- 規則的作用:對資料包進行過濾或處理;
- 鏈的作用:容納多種防火牆規則;
規則表:iptables管理著四個不同的規則表,分別由獨立的核心模組實現
- filter 表:經過本機核心的資料,用來對資料包進行過濾,具體的規則要求決定如何處理一個資料包。對應的核心模組為:iptable_filter,其表內包括三個鏈:input、forward、output;
- nat 表:(network address translation,網路地址轉換)不經過核心,主要用來修改資料包的 IP 地址、埠號資訊。對應的核心模組為:iptable_nat,其表內包括三個鏈:prerouting、postrouting、output;
- mangle 表:當fileter和nat表不夠用時使用主要用來修改資料包的服務型別,生存週期,為資料包設定標記,實現流量整形、策略路由等。對應的核心模組為:iptable_mangle,其表內包括五個鏈:prerouting、postrouting、input、output、forward;
- raw 表:主要用來決定是否對資料包進行狀態跟蹤。對應的核心模組為:iptable_raw,其表內包括兩個鏈:output、prerouting;
規則鏈
- 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(內網訪問外網)
實驗環境:
- 雙網路卡主機(路由):192.168.43.101;1.1.1.101
- 單網路卡主機(內網):1.1.1.111(閘道器設為雙網路卡 1 段IP)
- 單網路卡主機(外網):192.168.43.121
7.1 路由器端
- 開啟iptables服務
systemctl disable --now firewalld.service
systemctl mask firewalld.service 上鎖
dnf install iptables-services.x86_64 -y
systemctl enable --now iptables.service
iptables -F
:清空預設表(filter)- 檢查基本配置
sysctl -a | grep ip_forward
vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1 #可以ping
sysctl -p
iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.43.101
:將內網訪問外網的通過此路由的IP轉換為192.168.43.101service iptables save
:儲存修改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(外網訪問內網)
實驗環境:
- 雙網路卡主機(路由):192.168.43.101;1.1.1.101
- 單網路卡主機(內網):1.1.1.111(閘道器設為雙網路卡 1 段IP)
- 單網路卡主機(外網):192.168.43.121
8.1 路由器端
- 開啟iptables服務
systemctl disable --now firewalld.service
systemctl mask firewalld.service 上鎖
dnf install iptables-services.x86_64 -y
systemctl enable --now iptables.service
iptables -F
:清空預設表(filter)- 檢查基本配置
sysctl -a | grep ip_forward
vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1 #可以ping
sysctl -p
iptables -t nat -A PREROUTING -i ens192 -j DNAT --to-dest 1.1.1.101
:將外網訪問內網的通過此路由的IP轉換為1.1.1.101service iptables save
:儲存修改
8.2 客戶端配置
內網主機
外網主機
8.3 客戶端測試
相關文章
- Linux 防火牆 學習 iptablesLinux防火牆
- Linux防火牆iptables學習筆記(三)iptables命令詳解和舉例Linux防火牆筆記
- linux學習筆記三:防火牆設定Linux筆記防火牆
- linux防火牆iptablesLinux防火牆
- LInux iptables學習Linux
- MySQL優化學習筆記之索引MySql優化筆記索引
- MySQL優化學習筆記之explainMySql優化筆記AI
- linux放火牆------iptables(filter)LinuxFilter
- iptables 配置LINUX防火牆Linux防火牆
- Linux防火牆之IPtables概念與用法(轉)Linux防火牆
- Linux的銅牆鐵壁iptablesLinux
- 強化學習-學習筆記3 | 策略學習強化學習筆記
- Linux設定防火牆iptablesLinux防火牆
- Linux 效能優化筆記Linux優化筆記
- Linux學習筆記Linux筆記
- Linux 學習筆記Linux筆記
- 斜率優化學習筆記優化筆記
- mysql優化學習筆記MySql優化筆記
- Linux基礎命令---iptables防火牆Linux防火牆
- Linux 學習筆記--程式Linux筆記
- linux學習筆記一Linux筆記
- linux學習筆記二Linux筆記
- Linux學習筆記--viLinux筆記
- linux c 學習筆記Linux筆記
- Linux學習筆記1Linux筆記
- Linux中iptables防火牆的簡單配置Linux防火牆
- Linux與DNS的學習筆記LinuxDNS筆記
- Mysql 優化(學習筆記二十)MySql優化筆記
- Linux防火牆iptables實用設定Linux防火牆
- Linux 防火牆開放特定埠 (iptables)Linux防火牆
- Linux 自帶防火牆 Iptables 基本配置Linux防火牆
- 使用iptables建置Linux 防火牆(2)(轉)Linux防火牆
- 使用iptables建置Linux 防火牆(3)(轉)Linux防火牆
- 設計模式學習筆記之策略模式設計模式筆記
- oracle 學習筆記---效能優化學習(1)Oracle筆記優化
- REDHAT LINUX學習筆記之環境變數RedhatLinux筆記變數
- linux之iptables使用Linux
- Linux 學習筆記--程式管理Linux筆記