Linux 防火墻( iptables )

目錄

一、 Linux 防火墻基礎

1. 防火墻基礎概念

(1)防火墻的概述與作用

(2)防火墻的結構與匹配流程

(3)防火墻的類別與各個防火墻的區別

2. iptables 的表、鏈結構

(1)規則表

(2)規則鏈

3. 數據包過濾的匹配流程

(1)規則表之間的順序

(2)規則鏈之間的順序

入站流量處理流程

出站流量處理流程

(3)規則鏈內部各條防火墻規則之間的順序

總結速記表

二、編寫防火墻規則

1. iptables 的基礎設置

(1)iptables 安裝

(2)啟動防火墻并設置開機自啟動

2. 基本語法、數據包控制類型

(1)基本語法

(2)控制類型

3. 添加·、查看、刪除規則等基本規則

(1)添加新的規則(鏈的末尾可使用“-p 協議名”作匹配條件)

(2)查看規則列表(可結合“-L”,“--line-numbers”)

(3)刪除、清空規則

(4)設置默認策略

三、規則的匹配條件(分為三大類)

1. 通用匹配

(1)協議匹配

(2)地址匹配

(3)網絡接口匹配

2. 隱含匹配

(1)端口匹配

(2)ICMP 類型匹配

3. 顯式匹配

(1)多端口匹配

(2)IP范圍匹配

(3)MAC 地址匹配

(4)狀態匹配


一、 Linux 防火墻基礎

1. 防火墻基礎概念

(1)防火墻的概述與作用
  • 定義:防火墻是位于網絡邊界的?安全屏障,通過預定義規則控制進出網絡的流量。

  • 核心功能

    • 訪問控制:允許或拒絕特定流量(如 IP、端口、協議)。

    • 網絡地址轉換(NAT):隱藏內部網絡結構,實現 IP/端口映射。

    • 流量監控:記錄網絡活動,檢測異常行為(如 DDoS 攻擊)。

    • 防御攻擊:阻止惡意流量(如 SYN Flood、ICMP 洪水)。

(2)防火墻的結構與匹配流程
           ┌───────────────┐  輸入流量 →│ 規則匹配引擎 │→ 輸出流量  └───────┬───────┘  ↓  [日志記錄/警報]  
數據包 → 匹配規則 → 執行動作(ACCEPT/DROP/REJECT)  ↑  規則數據庫(表+鏈+規則)  

匹配流程
協議分析 → 規則匹配 → 執行動作(允許/拒絕/日志)

(3)防火墻的類別與各個防火墻的區別
  • iptables:傳統防火墻工具,用于管理Linux防火墻的命令程序,基于 Netfilter 框架,通過規則表(Tables)和規則鏈(Chains)管理流量。是“用戶態”(User Space ,用戶空間)的防火墻管理體;通常在/sbin/iptables 目錄下。

  • nftables:iptables 的替代品,在Linux內核中實現包過濾防火墻的內部結構,語法更簡潔,性能更優,逐步成為主流。是“內核態”(Kernel Space ,內核空間)不以程序或文件形式存在的防火墻功能體系。

  • firewalld:動態防火墻管理工具(Red Hat 系默認),支持區域(Zones)和運行時/永久配置。

  • ?類型對比

工具特點適用場景
iptables基于 Netfilter 框架,直接管理規則表/鏈,語法復雜但靈活。精細化控制、復雜網絡環境
nftablesiptables 的替代品,統一語法、性能更優,支持多規則合并。新系統、追求高效管理的場景
firewalld動態防火墻管理工具,支持運行時/永久配置,抽象為“服務”和“區域”。快速配置(如開放 Web 服務)

2. iptables 的表、鏈結構

iptables 的作用是為了過濾機制的實現提供規則

(1)規則表
表名功能常見操作
filter數據包過濾(默認表)確定是否放行數據包允許/拒絕流量(ACCEPT/DROP)
nat網絡地址轉換(NAT)修改數據包中的源、目標 IP 地址或端口。端口轉發、IP 偽裝(MASQUERADE)
mangle修改數據包頭部(如 TTL(生存周期)、TOS(服務類型))為數據包設置標記標記數據包(MARK)
raw決定是否對數據包進行狀態跟蹤標記不追蹤的數據包(NOTRACK)
(2)規則鏈

每個表包含多個鏈,鏈是規則的集合,決定數據包的處理路徑:

鏈名所屬表觸發場景
POSTROUTINGmangle, nat數據包離開網卡前(SNAT 修改源地址)
PREROUTINGraw, mangle, nat數據包進入網卡后、路由決策前(DNAT 修改目標地址)
INPUTfilter數據包目標是本機地址應用(入站)
OUTPUTfilter本機向外發出的數據包(出站)
FORWARDfilter數據包需要轉發到其他主機(路由開啟時生效)

鏈路由圖

外部數據 → PREROUTING → 路由判斷 → 目標是否本機?  ↓                 ↙             ↘  INPUT鏈         FORWARD鏈        OUTPUT鏈  ↓                 ↓               ↓  本機進程          轉發處理        POSTROUTING → 外發

3. 數據包過濾的匹配流程

匹配流程:

數據包依次經過不同?表(raw?→?mangle?→?nat?→?filter)。

在表中按?鏈?的順序處理(如?PREROUTING?→?INPUT)。

鏈內規則按?從上到下?順序匹配,命中則執行動作(ACCEPT/DROP)。

(1)規則表之間的順序

數據包依次經過?raw → mangle → nat → filter?表的處理:

  1. raw 表PREROUTING鏈:決定是否跳過連接追蹤(如標記?NOTRACK)。

  2. mangle 表PREROUTING鏈:修改數據包頭部(如調整 TTL)。

  3. nat 表PREROUTING鏈:執行地址轉換(如 DNAT 端口映射)。

  4. filter 表INPUT鏈:最終決定是否允許數據包通過。

(2)規則鏈之間的順序

數據包根據方向觸發不同鏈:

  • 入站流量(如訪問本機 Web 服務):

    網卡 → PREROUTING(raw/mangle/nat) → 路由決策 → INPUT(filter) → 本地應用  
  • 轉發流量(如路由器轉發數據):

    網卡 → PREROUTING → 路由決策 → FORWARD(filter) → POSTROUTING → 出站網卡  
  • 出站流量(如本機訪問外網):

    本地應用 → OUTPUT(filter) → POSTROUTING(mangle/nat) → 出站網卡  
入站流量處理流程
1. 網卡接收數據包  ↓  
2. raw 表的 PREROUTING 鏈  ↓  
3. mangle 表的 PREROUTING 鏈  ↓  
4. nat 表的 PREROUTING 鏈(DNAT)  ↓  
5. 路由決策(目標是否為本機?)  ↓  
6. 是 → filter 表的 INPUT 鏈(決定是否允許進入本機)  ↓  
7. 本地應用接收  
出站流量處理流程
1. 本地應用發送數據包  ↓  
2. filter 表的 OUTPUT 鏈(決定是否允許出站)  ↓  
3. mangle 表的 POSTROUTING 鏈  ↓  
4. nat 表的 POSTROUTING 鏈(SNAT/MASQUERADE)  ↓  
5. 數據包從網卡發出  
(3)規則鏈內部各條防火墻規則之間的順序

執行原則

  • 從上到下逐條匹配

  • 首次匹配后停止(ACCEPT/DROP/REJECT)

  • 未匹配則執行鏈的默認策略(通過?iptables -P?設置)

總結速記表

核心概念要點
防火墻作用訪問控制、NAT、流量監控、防御攻擊
表與鏈的關系表按功能分類,鏈按流量方向劃分
匹配流程順序raw → mangle → nat → filter(表順序);PREROUTING → INPUT/FORWARD → POSTROUTING(鏈順序)
安全最佳實踐默認拒絕(-P DROP)、細化規則優先、定期審計規則

二、編寫防火墻規則

1. iptables 的基礎設置

(1)iptables 安裝

yum -y install iptables iptables-services? ? ?##注意有些系統裝過iptables,直接下一步啟動就好

(2)啟動防火墻并設置開機自啟動

systemctl stop firewalld? ? ?##關閉默認的 防火墻(firewalld),避免產生影響

systemctl disable? firewalld

systemctl start iptables.service? ? ?##啟動iptables 防火墻

systemctl enable iptables.service

2. 基本語法、數據包控制類型

(1)基本語法
iptables [-t 表名] 命令選項 [鏈名] [規則條件] [-j 控制類型  ]

參數解析

  • -t:指定操作表(不指定,默認為filter表)

  • 命令選項:-A(追加)/-I(插入)/-D(刪除)/-L(查看)等

  • -j:指定數據包處理動作(ACCEPT/DROP等)

  • -p : 指定協議

(2)控制類型
控制類型功能描述典型場景
ACCEPT允許通過開放SSH端口(22)
DROP靜默丟棄防御端口掃描
REJECT拒絕并返回錯誤明確拒絕HTTP請求(返回RST)
LOG記錄日志(不阻斷流量)/var/log/messages調試防火墻規則
SNAT源地址轉換內網機器訪問外網
DNAT目標地址轉換外網訪問內網服務器
MASQUERADE動態源地址轉換撥號上網等動態IP環境

3. 添加·、查看、刪除規則等基本規則

管理選項:

類別選項用途
增加-A追加到最后一行
-I插入到第一行(或指定序號)
查看-L列出所有規則
-n以數字形式顯示
-v詳細信息
--line(--line-numbers)顯示序號
刪除-D刪除一條(指定序號或內容)
-F清空所有
修改-R替換某條規則
設置默認-P設置默認規則
(1)添加新的規則(鏈的末尾可使用“-p 協議名”作匹配條件)
# 允許特定IP訪問SSH  
iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT  # 插入規則到鏈首(優先級最高)  
iptables -I INPUT 1 -p icmp -j DROP          # 禁止所有ping  # 設置端口轉發(需開啟ip_forward)  
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80  
(2)查看規則列表(可結合“-L”,“--line-numbers”)
# 查看filter表規則(默認表)  
iptables -L -n --line-numbers -v  # 查看nat表規則  
iptables -t nat -L -n  # 輸出解析:  
# num   pkts bytes target     prot opt in out source      destination  
# 1      200 12000 ACCEPT     tcp  --  *  *   192.168.1.100 0.0.0.0/0   tcp dpt:22  
(3)刪除、清空規則
# 按編號刪除  
iptables -D INPUT 2          # 刪除INPUT鏈第2條規則  # 按條件刪除  
iptables -D INPUT -s 192.168.1.100 -j ACCEPT  # 清空所有規則  
iptables -F                  # 清空當前表  默認filter表
iptables -t nat -F           # 清空nat表  
(4)設置默認策略
# 設置INPUT鏈默認拒絕所有入站  
iptables -P INPUT DROP  # 設置OUTPUT鏈默認允許所有出站  
iptables -P OUTPUT ACCEPT  # 注意:默認策略應在具體規則前設置!  

三、規則的匹配條件(分為三大類)

匹配條件是什么?有什么用?

1. 通用匹配(常規匹配,可直接使用)

(1)協議匹配

結合“ -p? 協議名 ”的形式指定,用來檢查數據包所使用的網絡協議(--protocol),可用協議類型在/etc/procotols 文件。

iptables -I INPUT -p icmp -j DROP   //丟棄通過 icmp 協議訪問防火墻本機的數據包iptables -A FORWARD ! -p icmp -j ACCEPT   //允許轉發經過防火墻的除 icmp 協議之外的數據包
(2)地址匹配

結合“-s 源地址” 或 “-d 目標地址 ”的形式指定,用來檢查數據包的源地址(--source)或目標地址(--destination)。

##拒接轉發源地址192.168.1.11的數據,允許轉發源地址位于192.168.7.0/24網段的數據
iptables -A FORWARD -s 192.168.1.11 -j REJECT
iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT#遭到小規模掃描和攻擊時(例如10.20.30.0/24),封鎖IP地址
iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP
(3)網絡接口匹配

結合“-i 接口名” 和 “-o 接口名?”的形式指定,用于檢查數據包從防火墻的哪一個接口進入或發出,分別對應入站網卡(--in-interface)、出站網卡(--out-interface)

##要丟棄從外網接口訪問防火墻本機且源地址為私有地址的數據包
iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i ens33 -s 172.16.0.0/16 -j DROP
iptables -A INPUT -i ens33 -s 192.168.0.0/16 DROP

2. 隱含匹配(指定的協議匹配為前提條件,無法單獨使用)

(1)端口匹配

結合“--sport 源端口” 或 “--dport 目標端口” 的形式,針對的協議為 TCP 或 UDP,用來檢查數據包的源端口或目標端口。單個端口號或以冒號“ : ”分隔,但多個端口不采用。

##允許為網段192.168.4.0/24 轉發 DNS 查詢數據包
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -p udp --sport 53 -j ACCEPT
(2)ICMP 類型匹配

結合“--icmp-type ICMP” 的形式,用于檢查ICMP數據包的類型(--icmp-type).

##禁止從其他主機ping本機,但是允許本機ping其他本機
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

3. 顯式匹配(要求額外的內核模塊提供支持,必須“-m 模塊名稱”形式調用)

(1)多端口匹配

結合“-m multiport --dports 端口列表”、“-m multiport --sports 端口列表”的形式,用于檢查數據包的源端口、目標端口、多個端口以逗號進行分隔。

iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT
(2)IP范圍匹配

結合“-m iprange --src-range IP 范圍”、“-m iprange --dst-range IP范圍”的形式,用于檢查數據包的源地址、目標地址。

iptables -A FORWARD -p tcp -m iprange --src-range192.168.4.21-192.168.4.28 -j DROP
(3)MAC 地址匹配

結合“-m mac --mac-source MAC地址”的形式,用于檢查數據包的源MAC地址。

iptables -A INPUT -m mac --mac-source MAC地址  -j DROP
(4)狀態匹配

結合“-m state --state 連接狀態”的形式,基于iptables 的狀態跟蹤機制用來檢查數據包的連接狀態(State)。

##禁止轉發與正常TCP連接無關的非--syn請求數據包
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP##只開放本機Web服務(80端口),但對發給本機的TCP應答數據包放行
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77318.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77318.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77318.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大數據 - 2. Hadoop - HDFS(分布式文件系統)

前言 為什么海量數據需要分布式存儲技術? 文件過大時,單臺服務器無法承擔,要靠數量來解決。數量的提升帶來的是網絡傳輸、磁盤讀寫、CPU、內存等各方面的提升。 眾多的服務器一起工作,如何保證高效且不出錯 ? 大數…

使用cursor進行原型圖設計

1.下載cursor 2.模式設置: 模型使用claude-3.7-sonnet的think模式 3.引導詞模板: 我想要開發一個中高考英語口語考試的模擬考試系統,我需要將上面的這個應用輸出成高保真的原型圖設計。請考慮以下的規范: 用戶體驗&#xff1…

極狐GitLab 功能標志詳解

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 功能標志 (BASIC ALL) 使用功能標志,您可以將應用程序的新功能小批量部署到生產環境中。您可以為部分用戶打開和…

AI與無人駕駛汽車:如何通過機器學習提升自動駕駛系統的安全性?

引言 想象一下,在高速公路上,一輛無人駕駛汽車正平穩行駛。突然,前方的車輛緊急剎車,而旁邊車道有一輛摩托車正快速接近。在這千鈞一發的瞬間,自動駕駛系統迅速分析路況,判斷最安全的避險方案,精…

【NLP 63、大模型應用 —— Agent】

人與人最大的差距就是勇氣和執行力,也是唯一的差距 —— 25.4.16 一、Agent 相關工作 二、Agent 特點 核心特征: 1.專有場景(針對某個垂直領域) 2.保留記憶(以一個特定順序做一些特定任務,記憶當前任務的前…

RAGFlow本地部署教程 :多模態檢索+動態生成,用AI重構企業知識生產力

RAGFlow是一款基于檢索增強生成(RAG)技術的智能工作流平臺,通過整合多源數據檢索與生成式AI模型,優化企業知識管理、智能問答及自動化報告生成,核心功能包括: 多源數據融合:支持數據庫、文檔庫、…

【C/C++】深入理解指針(二)

文章目錄 深入理解指針(二)1.const修飾指針1.1 const修飾變量1.2 const修飾指針變量 2.野指針2.1 野指針成因1.指針未初始化2. 指針越界訪問3.指針指向的空間釋放 2.2 如何規避野指針2.2.1 指針初始化2.2.2 小心指針越界2.2.3 指針變量不再使?時,及時置NULL&#x…

【verilog】在同一個 always 塊中寫了多個“看起來獨立”的 if / if-else,到底誰先誰后,怎么執行?會不會沖突?

🔍 問題本質 在一個 always (posedge clk) 塊中,所有的代碼都是順序執行的。但這不意味著它就像軟件一樣“一條一條執行”,因為最終是電路!電路是并行存在的! Verilog 是硬件描述語言(HDL)&am…

【React】什么是 Hook

useStateuseEffectuseRef 什么是hook?16.8版本出現的新特性。可以在不編寫class組件的情況下使用state以及其它的React特性 為什么有hook?class組件很難提取公共的重用的代碼,然后反復使用;不編寫類組件也可以使用類組件的狀態st…

如何查看自己抖音的IP屬地?詳細教程及如何修改

在當今互聯網時代,IP屬地信息已成為各大社交平臺(如抖音、微博、快手等)展示用戶真實網絡位置的重要功能。以下是關于如何查看抖音IP屬地的詳細教程及常見問題解答,幫助您快速了解相關信息: 一、如何查看抖音賬號的IP屬…

深度學習算力革新:AI服務器在運維工作中的智能化實踐

【導語】作為IT基礎設施服務領域的從業者,我們在日常工作中發現,AI服務器的智能化運維能力正在重塑傳統IDC的管理模式。本文將以DeepSeek系列服務器為例,分享智能算力設備在真實運維場景中的創新應用。 一、傳統服務器集群的運維痛點 在數據…

安裝部署RabbitMQ

一、RabbitMQ安裝部署 1、下載epel源 2、安裝RabbitMQ 3、啟動RabbitMQ web管理界面 啟用插件 rabbitmq數據目錄 創建rabbitmq用戶 設置為管理員角色 給用戶賦予權限 4、訪問rabbitmq

中間件--ClickHouse-4--向量化執行(什么是向量?為什么向量化執行的更快?)

1、向量(Vector)的概念 (1)、向量的定義 向量:在計算機科學中,向量是一組同類型數據的有序集合,例如一個包含多個數值的數組。在數據庫中,向量通常指批量數據(如一列數…

Python PDF 轉 Markdown 工具庫對比與推薦

根據最新評測及開源社區實踐,以下為綜合性能與適用場景的推薦方案: 1. ?Marker? ?特點?: 轉換速度快,支持表格、公式(轉為 LaTeX)、圖片提取,適配復雜排版文檔?。依賴 PyTorch&#xff0c…

Vue 和 Spring boot 和 Bean 不同生命周期

一、Vue 組件生命周期 父子組件生命周期順序: 創建時: 父 beforeCreate → 父 created → 父 beforeMount → 子組件生命周期 → 父 mounted 更新時: 父 beforeUpdate → 子組件更新 → 父 updated。 銷毀時: 父 beforeDestroy…

Microsoft Azure 基礎知識簡介

Microsoft Azure 基礎知識簡介 已完成100 XP 2 分鐘 Microsoft Azure 是一個云計算平臺,提供一系列不斷擴展的服務,可幫助你構建解決方案來滿足業務目標。 Azure 服務支持從簡單到復雜的一切內容。 Azure 具有簡單的 Web 服務,用于在云中托…

C語言鏈接數據庫

目錄 使用 yum 配置 mysqld 環境 查看 mysqld 服務的版本 創建 mysql 句柄 鏈接數據庫 使用數據庫 增加數據 修改數據 查詢數據 獲取查詢結果的行數 獲取查詢結果的列數 獲取查詢結果的列名 獲取查詢結果所有數據 斷開鏈接 C語言訪問mysql數據庫整體源碼 通過…

【Maven】手動安裝依賴到本地倉庫

【Maven】手動安裝依賴到本地倉庫 【一】下載依賴【二】安裝 JAR 文件到本地倉庫【三】驗證安裝【四】在項目中使用該依賴【1】注意事項【2】額外提示 【一】下載依賴 登錄到中央倉庫下載依賴,中央倉庫地址:https://mvnrepository.com/ 搜搜你的依賴的a…

騰訊云golang一面

go垃圾回收機制 參考自:https://zhuanlan.zhihu.com/p/334999060 go 1.3 標記清除法 缺點 go 1.5 三色標記法 屏障機制 插入屏障 但是如果棧不添加,當全部三色標記掃描之后,棧上有可能依然存在白色對象被引用的情況(如上圖的對象9). 所以要對棧重新進行三色標記掃…

跨平臺嵌入式音視頻開發指南:EasyRTC音視頻通話的多場景適配與AI擴展能力

在數字化通信技術飛速發展的今天,實時音視頻通信已成為眾多智能設備和應用的核心功能。從智能家居到遠程辦公,從在線教育到智能安防,音視頻通信技術的應用場景不斷拓展,對低延遲、高穩定性和跨平臺兼容性的需求也在持續增長。在這…