目錄
前言
1 iptables概述
1.1 Netfilter與iptables關系
1.1.1 Netfilter
1.1.2 iptables
1.1.3 兩者關系
2 iptables的表、鏈結構
2.1 四表五鏈結構介紹
2.1.1 基本概念
2.1.2 四表功能***
2.1.3 五鏈功能***
2.2 數據包過濾的匹配流程***
2.2.1 規則表應用順序***
2.2.2 規則鏈匹配順序
2.2.3 規則鏈內匹配順序
2.2.4 數據包匹配流程詳解
3 編寫防火墻規則
3.1 iptables安裝配置
3.1.1 關閉firewalld
3.1.2 安裝iptables
3.1.3 設置開機啟動
3.2 基本語法與控制類型
3.2.1 語法構成
3.2.2 注意事項不指定表名時,默認使用 filter 表
3.2.3 數據包控制類型
3.3 基本操作命令
3.3.1 常用管理參數
3.3.2 添加新規則
3.3.3 查看規則列表
3.3.4 刪除清空規則
3.3.5 設置默認策略
3.4 規則的匹配條件
3.4.1 通用匹配
3.4.2 隱含匹配
3.4.3?拓展
3.4.4 顯式匹配
4 總結
前言
????????在企業網絡環境中,各種應用系統(如Web網站、電子郵件系統、FTP服務器、數據庫系統等)都需要通過網絡為用戶提供服務。如何有效保護這些服務器,過濾不必要的訪問請求甚至惡意入侵,成為網絡安全的重要課題。
????????Linux系統中的iptables防火墻正是為解決這些問題而設計。它工作在網絡層,對TCP/IP數據包實施精細化的過濾和限制,屬于典型的包過濾防火墻(網絡層防火墻)。基于內核實現的iptables具有卓越的性能和穩定性,在全球范圍內獲得了廣泛應用。
????????本文將系統介紹iptables防火墻的核心概念、結構原理、匹配機制和規則配置方法,幫助讀者全面掌握這一重要的網絡安全技術。
1 iptables概述
1.1 Netfilter與iptables關系
1.1.1 Netfilter
-
Linux防火墻功能由Netfilter組件提供
-
Netfilter工作在內核空間,集成在Linux內核中
-
采用模塊化設計,具有良好的可擴充性
-
與IP協議棧無縫契合,支持數據包過濾、地址轉換和處理操作
-
官網文檔:https://netfilter.org/documentation/
1.1.2 iptables
-
屬于用戶空間(User Space)的防火墻管理體系
-
管理Linux防火墻的命令行程序
-
位于
/sbin/iptables
目錄下 -
使插入、修改和刪除數據包過濾表中的規則變得容易
1.1.3 兩者關系
-
netfilter:內核態的防火墻功能體系
-
iptables:用戶態的防火墻管理工具
-
后期簡稱為iptables,基于內核防火墻,內置raw、mangle、nat和filter四個規則表
2 iptables的表、鏈結構
2.1 四表五鏈結構介紹
2.1.1 基本概念
-
規則表:容納各種規則鏈的容器
-
規則鏈:容納各種防火墻規則的鏈條
-
規則:對數據包進行過濾或處理的具體規則
-
結構關系:表里有鏈,鏈里有規則
2.1.2 四表功能***
-
raw表:決定是否對數據包進行狀態跟蹤
-
包含鏈:OUTPUT、PREROUTING
-
-
mangle表:修改數據包內容,做流量整形,設置標記
-
包含鏈:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING
-
-
nat表:負責網絡地址轉換,修改源/目標IP地址或端口
-
包含鏈:OUTPUT、PREROUTING、POSTROUTING
-
-
filter表:負責過濾數據包,決定是否放行
-
包含鏈:INPUT、FORWARD、OUTPUT
-
2.1.3 五鏈功能***
-
INPUT:處理入站數據包,匹配目標IP為本機的數據包
-
OUTPUT:處理出站數據包
-
FORWARD:處理轉發數據包,匹配流經本機的數據包
-
PREROUTING:路由選擇前處理數據包,用于DNAT
-
POSTROUTING:路由選擇后處理數據包,用于SNAT
2.2 數據包過濾的匹配流程***
2.2.1 規則表應用順序***
raw → mangle → nat → filter
2.2.2 規則鏈匹配順序
-
主機型防火墻
- 入站數據:PREROUTING → INPUT → 本機應用程序
- 出站數據:本機應用程序 → OUTPUT → POSTROUTING
-
網絡型防火墻
- 轉發數據:PREROUTING → FORWARD → POSTROUTING
2.2.3 規則鏈內匹配順序
-
自上向下依次檢查,找到匹配規則即停止(LOG策略除外)
-
找不到匹配規則時,按該鏈的默認策略處理
-
默認策略不參與鏈內規則的順序編排
2.2.4 數據包匹配流程詳解
-
入站數據流向:外界數據包 → PREROUTING → 路由選擇 → INPUT → 應用程序
-
轉發數據流向:外界數據包 → PREROUTING → 路由選擇 → FORWARD → POSTROUTING
-
出站數據流向:本機數據包 → 路由選擇 → OUTPUT → POSTROUTING
3 編寫防火墻規則
3.1 iptables安裝配置
3.1.1 關閉firewalld
systemctl stop firewalld.service systemctl disable firewalld.service sentenforce 0
3.1.2 安裝iptables
yum -y install iptables iptables-services
3.1.3 設置開機啟動
systemctl start iptables.service systemctl enable iptables.service
3.2 基本語法與控制類型
3.2.1 語法構成
iptables 【-t 表名】【管理參數】【鏈名】【匹配條件】【-j 控制類型】
3.2.2 注意事項不指定表名時,默認使用 filter 表
-
不指定鏈名時,默認指表內所有鏈
-
除非設置鏈的默認策略,否則必須指定匹配條件
-
參數、鏈名、控制類型使用大寫字母
3.2.3 數據包控制類型
ACCEPT | 允許通過 |
DROP | 直接丟包,不回應 |
REJECT | 拒絕通過,回應 |
LOG | 記錄日志信息后傳遞給下一條規則 |
SNAT | 修改數據包源地址 |
DNAT | 修改數據包目的地址 |
MASQUERADE | 偽裝成非固定公網IP地址 |
3.3 基本操作命令
3.3.1 常用管理參數
選項 | 功能描述 | 示例 |
---|---|---|
-A | 在指定鏈末尾追加規則 | iptables -A INPUT |
-I | 在指定鏈中插入新規則 | iptables -I INPUT |
-P | 指定默認規則 | iptables -P OUTPUT ACCEPT |
-D | 刪除規則 | iptables -t nat -D INPUT |
-R | 修改、替換規則 | iptables -t nat -R INPUT |
-L | 查看規則 | iptables -t nat -L |
-n | 數字形式顯示 | iptables -L -n |
-v | 顯示詳細信息 | iptables -v -L |
--line-number | 顯示規則編號 | iptables -L --line-number |
-F | 清除鏈中所有規則 | iptables -F |
-X | 清空自定義鏈規則 | iptables -X |
-Z | 清空鏈計數器 | iptables -Z |
-S | 查看鏈的所有規則 | iptables -t nat -S |
3.3.2 添加新規則
iptables -t filter -A INPUT -p icmp -j REJECT??????? #在filter表 INPUT鏈 行末添加:禁止所有ICMP請求進入本機,并告知被拒者 解釋:其他計算機將無法成功 ping 通你的服務器iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT???????? #在filter表 INPUT鏈 第2行添加:允許所有目標端口為 22 的 TCP 請求進入本機 解釋:開放了服務器的 SSH 遠程登錄端口,允許外部連接
3.3.3 查看規則列表
iptables -L INPUT --line-numbers iptables -nL INPUT iptables -vnL --line-numbers
3.3.4 刪除清空規則
iptables -D INPUT 5 iptables -F INPUT iptables -t nat -F
3.3.5 設置默認策略
iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
3.4 規則的匹配條件
3.4.1 通用匹配
-
協議匹配:
-p 協議名
-
地址匹配:
-s 源地址
、-d 目的地址
-
接口匹配:
-i 入站網卡
、-o 出站網卡
iptables -A FORWARD ! -p icmp -j ACCEPT #在filter表 FORWARD鏈 行末添加:接收所有非ICMP請求進入本機iptables -A INPUT -s 192.168.80.11 -j DROP #在filter表 INPUT鏈 行末添加:拒絕 IP地址為 192.168.80.11 的數據進入本機,并丟棄不回應iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP #在filter表 INPUT鏈 行首添加:拒絕 192.168.80.0/24網段的數據通過ens33網卡進入本機,并丟棄不回應
3.4.2 隱含匹配
-
端口匹配:
--sport 源端口
、--dport 目的端口
-
TCP標記匹配:
--tcp-flags TCP標記
-
ICMP類型匹配:
--icmp-type ICMP類型
iptables -A INPUT -p tcp --sport 1000:3000 -j REJECT #在filter表 INPUT鏈 行末添加:拒絕所有從外部發起、且源端口號在1000到3000范圍內的TCP連接,并告知被拒者iptables -A INPUT -p icmp --icmp-type 8 -j DROP???????? #丟棄所有發往本機的 ICMP Echo Request 請求包,并丟棄不回應
3.4.3?拓展
??--icmp-type 8
?vs ?-p icmp
-p icmp -j DROP | -p icmp --icmp-type 8 -j DROP |
這會丟棄所有類型的 ICMP 包,包括 Echo Request (8)、Echo Reply (0)、Destination Unreachable (3) 等 | 這只丟棄 ICMP Echo Request 包(即入站 ping 請求)。其他類型的 ICMP 包(如出站 ping 的回復、網絡錯誤消息等)仍然被允許 |
影響:?你不僅無法被?ping ?通,還可能影響路徑 MTU 發現、網絡診斷等關鍵功能,可能導致網絡連接問題 | 影響:?效果非常精準。你的服務器仍然可以正常?ping ?通外部(因為能收到 Echo Reply (Type 0)),也能接收其他重要的網絡控制消息,只是別人無法?ping ?通你 |
3.4.4 顯式匹配
-
多端口匹配:
-m multiport --sport/dport 端口列表
-
IP范圍匹配:
-m iprange --src-range IP范圍
-
MAC地址匹配:
-m mac --mac-source MAC地址
-
狀態匹配:
-m state --state 連接狀態
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT #在filter表 INPUT鏈 行末添加:接受所有端口號為80,22,21,20,53的TCP數據進入本機iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP #在filter表 FORWARD鏈 行末添加:拒絕所有 新連接狀態且沒有syn標志 的TCP數據,并丟棄不回應
4 總結
????????iptables作為Linux系統中最強大的防火墻工具,提供了靈活而精細的網絡數據包控制能力。通過本文的系統學習,我們掌握了:
-
核心架構:理解了netfilter與iptables的關系,以及四表五鏈的結構設計理念
-
匹配機制:掌握了數據包在表和鏈間的流轉流程和匹配優先級
-
規則配置:學會了使用各種管理選項進行規則的添加、查看、刪除和修改
-
匹配條件:熟悉了通用匹配、隱含匹配和顯式匹配三種匹配方式的應用場景
????????在實際生產環境中,iptables的合理配置對網絡安全至關重要。建議遵循"默認拒絕,按需開放"的原則,結合具體的業務需求設計防火墻規則。同時,要注意規則的測試和驗證,避免因配置失誤導致的服務中斷。通過持續學習和實踐,能夠更加熟練地運用iptables構建堅固的網絡安全防護體系。
????????重要提醒:在對遠程服務器進行iptables配置時,務必先設置允許SSH連接的規則,然后再設置默認策略為DROP,防止因配置失誤導致無法遠程連接服務器。