【Linux筆記】防火墻firewall與相關實驗(iptables、firewall-cmd、firewalld)

一、概念

1、防火墻firewall

Linux 防火墻用于控制進出系統的網絡流量,保護系統免受未授權訪問。常見的防火墻工具包括?iptablesnftablesUFW?和?firewalld。


  1. 防火墻類型

    • 包過濾防火墻:基于網絡層(IP、端口、協議)過濾流量(如?iptables)。

    • 應用層防火墻:基于應用協議(如 HTTP、SSH)過濾流量(需結合代理或深度包檢測)。

  2. 關鍵術語

    • 表(Table):規則集合,如?filter(過濾)、nat(地址轉換)、mangle(包修改)。

    • 鏈(Chain):規則鏈,默認鏈包括?INPUT(入站)、OUTPUT(出站)、FORWARD(轉發)。

    • 規則(Rule):定義匹配條件和動作(如允許?ACCEPT、拒絕?DROP)。

    • 區域(Zone)firewalld?的概念,定義不同網絡環境(如?publichome)的安全級別。

  3. 狀態檢測

    • 跟蹤連接狀態(如?NEWESTABLISHED),允許響應流量自動放行。


2、iptables

iptables?是集成在 Linux 內核中的包過濾防火墻系統,它允許系統管理員配置規則集,以便控制網絡數據包的進出和轉發。iptables 通過定義一系列的規則來決定如何處理經過網絡接口的數據包。這些規則可以基于數據包的來源、目的地、協議類型等多種條件來設置。

二、命令

1、搭建實驗運行環境

(1)前提說明

防火墻命令相關實驗我們準備三個虛擬機,請先自行克隆出來三個,分別命名為F1、F2、F3

其中,F1與F3相互溝通,F2是它們溝通的橋梁

主機名ip網絡類型
F1192.168.76.10NAT
F2

192.168.76.20(NAT的)

192.168.194.20(Host-only的)

NAT + Host-only(僅主機)
F3192.168.194.30Host-only(僅主機)

ip項請務必清楚自己虛擬機在NAT和Host-only(僅主機) 這兩個網絡類型下的網段是什么,

這里說一下查看辦法:

按圖中步驟來:點擊實驗所需的三臺主機中的其中一臺,這里是F1;點編輯;點虛擬網絡編輯器;進去后即可查看:

僅主機時的ip網段

NAT時的ip網段:

這里的都是博主自己的,你們的都可以按照這個辦法來查詢


(2)設置三臺主機的網絡類型

1)對于F1

F1用NAT模式,默認應該就是NAT模式,但還是建議去查看一下:

2)對于F2

F2有兩個:

一個是默認自帶的NAT

另一個是Host-only(僅主機)

??

3)對于F3

F3是Host-only(僅主機)

(3)設置IP等基礎配置

IP地址的配置先前博客有講過,這里不再贅述,簡單過一遍。配置指令為nm-connection-editor

手動配置你們網段的IP地址即可,可以按照上面的表格:

來進行配置IP,注意,F2有兩個網卡,需要配置兩個。?

nm-connection-editor

示例?


主機F1、F3和F2的第二個網卡(為下圖F2的ens192)都不用配置網關,F2的第一個NAT類型網卡(圖中為ens160)需要配置網關

F2的第一個NAT類型網卡(圖中為ens160)需要配置網關

到這里就完成了實驗環境的搭建

(4)測試

F1能ping通F2的NAT網卡(192.168.76.20)

F2的僅主機網卡(192.168.194.20)能ping通F3

2、iptables命令

(1)安裝軟件

安裝需要搭建軟件倉庫,詳情請見之前博客

dnf install iptables-nft-services.noarch -y

示例


(2)關閉防火墻?

systemctl disable --now firewalld

示例?


systemctl mask firewalld

示例?


?(3)啟動服務

systemctl enable --now iptables.service

示例?


(4)iptables基本語法格式

iptables [-t 表名] 命令選項 [鏈名] [規則條件] -j 目標動作

(5)常用命令選項

參數說明
-A?或?--append在鏈末尾添加規則(如?-A INPUT)。
-I?或?--insert在鏈的指定位置插入規則(如?-I INPUT 1?插入為第一條)。
-D?或?--delete刪除指定規則(如?-D INPUT 2?或按規則內容刪除)。
-L?或?--list列出鏈中的規則(配合?-n?禁用DNS解析,-v?顯示詳細信息)。
-F?或?--flush清空鏈中的所有規則(如?-F INPUT)。
-P?或?--policy設置鏈的默認策略(如?-P INPUT DROP)。
-N?或?--new-chain創建自定義鏈(如?-N MY_CHAIN)。
-X?或?--delete-chain刪除自定義空鏈。
-Z?或?--zero重置計數器(數據包和字節計數)。
參數說明
-p?或?--protocol指定協議(如?tcpudpicmpall)。
-s?或?--source源IP地址或網段(如?-s 192.168.1.0/24)。
-d?或?--destination目標IP地址或網段。
-i?或?--in-interface指定數據包進入的網絡接口(如?-i eth0)。
-o?或?--out-interface指定數據包離開的網絡接口。
- j 或 -- jump指定目標,即滿足某條件時該執行什么樣的動作,如ACCPET。
參數說明
--dport目標端口(如?--dport 80)。
--sport源端口。
--multiport多端口匹配(需加載?multiport?模塊,如?--dports 80,443)。

(6) 各種命令選項的常用命令

就是上面的表中的部分常用的詳解

1)iptables? -nL

查看當前iptables策略

iptables? -nL

示例

下面的三行:INPUT、FORWARD、OUTPUT,即為-A后面接的東西(規則)


2)iptables -t 表名
iptables -t

示例

輸入-t后,我們連按table鍵,可以看到彈出來的這些就是表名,分別為:filter ?mangle ?nat


以下是各個表的詳解?

filter表

  • 默認表:若未指定?-t?參數,默認使用?filter?表。

  • 核心功能:過濾數據包,決定是否允許數據包通過。

  • 內置鏈

    鏈名觸發時機常見用途
    INPUT處理目標是本機的數據包(入站)控制進入本機的流量(如開放 SSH 端口)。
    OUTPUT處理本機產生的數據包(出站)限制本機程序對外訪問(如禁止某些 IP)。
    FORWARD處理經過本機轉發的數據包(路由)配置 NAT 網關或防火墻路由規則。

nat 表:

  • 核心功能:網絡地址轉換(Network Address Translation),用于修改數據包的源或目標地址。

  • 內置鏈

    鏈名觸發時機常見用途
    PREROUTING數據包進入路由決策之前(剛到達網卡)DNAT(目標地址轉換,如端口轉發)。
    POSTROUTING數據包離開本機之前(即將發送到網卡)SNAT/MASQUERADE(源地址轉換,如共享上網)。
    OUTPUT本機產生的數據包在路由決策之后對本機出站流量做 NAT(較少使用)

mangle 表:

  • 核心功能:修改數據包內容(如 TTL、TOS 字段)或標記數據包(MARK),用于高級流量控制。

  • 內置鏈

    鏈名觸發時機
    PREROUTING數據包進入路由決策之前
    POSTROUTING數據包離開本機之前
    INPUT處理目標是本機的數據包
    OUTPUT處理本機產生的數據包
    FORWARD處理經過本機轉發的數據包

?拓展:清空指定表中的策略

iptables -t filter(這里填你想清理的表名,這里以filter舉例) -F

示例

?


3)拒絕某條流量的訪問

iptables -t? 表名? -p? 協議? --dport? 80? -s? ip地址? -j? 功能?

1))命令解析與添加規則

我們以一個實例來舉例理解,比如:我們想讓F1的tcp協議的訪問數據不能到達F2,即拒絕F1的tcp流量,所以我們的命令可以寫成:

iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.76.10 -j REJECT

這一項命令很長,但把其拆解就不復雜了:

所以,整條命令的意思即為:通過iptables寫入一條規則 ——?拒絕訪問(-j REJECT)表頭為filter(-t filter)、端口為80(--dport 80)的tcp協議(-p tcp),并且還是來自(-A INPUT)192.168.76.10(-s 192.168.76.10)的流量


我們再次通過iptables? -nL查看一下當前的規則,可以看到在INPUT行我們剛剛新寫入的規則:

iptables? -nL


2))測試規則的存在與生效

我們在F2主機安裝nginx來進行測試,看看我們剛剛設置的規則是否存在且生效:

dnf install nginx -y

示例

啟動nginx服務:

systemctl enable --now nginx.service

?示例

往F2的nginx里的默認index.html寫入一個內容,方便我們后續測試,內容即為F2的NAT網卡ip本身:

echo 192.168.76.20 > /usr/share/nginx/html/index.html

示例?

接下來我們分別到F1主機和F3主機進行測試,看看在F2寫的規則是否生效:

我們剛剛寫的規則是,F2拒絕F1的tcp協議訪問流量,F3的訪問流量不拒絕

  • 在F1端對F2進行訪問:

  • 在F3端對F2進行訪問:


?3))總結?

這就是火墻,通過iptables命令設置規則,規定誰能訪問,誰不能訪問?


4)只允許某條流量訪問

有了上面的基礎,這一條就好理解了:

同樣在F2進行配置

iptables -t filter -A INPUT -p tcp --dport 80 ! -s 192.168.194.30 -j REJECT

示例?

這里與上面不同的是-s前面的“!”感嘆號,感嘆號表示反選,-s本來是表示指定192.168.194.30這條流量,加了“!”感嘆號后,就表示除了192.168.194.30這條之外的所有ip地址,所以這條命令也就變成了:

除了192.168.194.30,之外的其他所有ip全部都被拒絕訪問F2,即——只允許ip為192.168.194.30的tcp訪問流量來訪問F2

而在默認不設置的情況下,策略都為ACCEPT,即允許,所以192.168.194.30的流量能夠訪問


5)刪除filter表中的第X條策略
iptables -D INPUT  3

各項解釋:

INPUT —— (指定為INPUT鏈,想刪哪條鏈的策略就寫哪條鏈名)?

3 ——?(3為第三條策略,想刪哪條寫哪個數字)


3、firewalld命令

(1)概念

Firewalld?是 Linux 系統(尤其是 RHEL/CentOS/Fedora)中動態管理防火墻規則的工具,基于?firewall-cmd?命令行工具和?zone(區域)概念,支持動態更新規則而無需重啟服務。


1)核心概念?

區域(Zone)

  • 定義:預定義的網絡信任級別,每個區域關聯一組規則(允許的服務、端口等)。

  • 默認區域:通常為?public(未明確指定時使用)。

  • 常見區域

    區域名用途
    public公共網絡(默認,僅開放明確允許的服務)。
    trusted完全信任所有連接。
    internal內部網絡(類似?home)。
    dmz非軍事區(僅允許部分服務)。
    block拒絕所有入站流量(出站允許)。
    drop丟棄所有入站流量(無響應,出站允許)。
2)服務(Service)
  • 預定義的端口和協議組合(如?sshhttphttps),簡化規則配置。

  • 服務定義文件路徑:/usr/lib/firewalld/services/*.xml

?3)運行時與永久配置
  • 運行時(Runtime):臨時生效,重啟后失效。

  • 永久(Permanent):持久化配置,需?--permanent?參數,重啟或重載后生效。


(2)常用命令

1)firewall-cmd命令表

狀態與基本信息

命令說明示例
firewall-cmd --state查看防火墻運行狀態。-
firewall-cmd --reload重新加載配置(應用永久規則)。sudo firewall-cmd --reload
firewall-cmd --complete-reload完全重啟防火墻服務(斷開現有連接)。sudo firewall-cmd --complete-reload
firewall-cmd --version查看 firewalld 版本。-

區域(Zone)管理

命令說明示例
firewall-cmd --get-default-zone查看默認區域。-
firewall-cmd --set-default-zone=<zone>設置默認區域(需?--permanent)。sudo firewall-cmd --set-default-zone=internal --permanent
firewall-cmd --get-active-zones查看所有活動區域及綁定的接口。-
firewall-cmd --get-zones列出所有可用區域。-
firewall-cmd --zone=<zone> --list-all查看指定區域的詳細配置。firewall-cmd --zone=public --list-all
firewall-cmd --zone=<zone> --change-interface=<iface>為接口綁定區域(需?--permanent)。sudo firewall-cmd --zone=work --change-interface=eth0 --permanent

服務(Service)與端口(Port)管理

命令說明示例
firewall-cmd --list-services查看當前區域允許的服務。firewall-cmd --list-services
firewall-cmd --add-service=<service>允許服務(默認運行時,加?--permanent?永久生效)。sudo firewall-cmd --add-service=http
firewall-cmd --remove-service=<service>移除服務。sudo firewall-cmd --remove-service=ftp
firewall-cmd --list-ports查看當前區域開放的端口。firewall-cmd --list-ports
firewall-cmd --add-port=<port>/<protocol>開放端口(如?80/tcp)。sudo firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --remove-port=<port>/<protocol>移除端口。

?高級規則(Rich Rules)

命令說明示例
firewall-cmd --add-rich-rule='<rule>'添加富規則(支持 IP、端口、協議等復雜條件)。sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --remove-rich-rule='<rule>'移除富規則。sudo firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
firewall-cmd --list-rich-rules列出所有富規則。

應急模式與連接追蹤

命令說明示例
firewall-cmd --panic-on進入應急模式(拒絕所有流量,立即生效)。sudo firewall-cmd --panic-on
firewall-cmd --panic-off退出應急模式。sudo firewall-cmd --panic-off
firewall-cmd --query-panic檢查應急模式狀態。firewall-cmd --query-panic

2)?火墻信息查看
firewall-cmd --state

示例?


firewall-cmd --list-all

示例?

?

3)管理域
firewall-cmd --get-default-zonefirewall-cmd --set-default-zone=trustedfirewall-cmd  --get-zonesfirewall-cmd  --get-active-zones

?示例

4)管理服務
firewall-cmd --get-servicesfirewall-cmd --list-services --zone=publicfirewall-cmd --permanent --add-service=http --zone=publicfirewall-cmd --permanent --remove-service=http

示例?

5)管理ip
firewall-cmd --add-source=192.168.76.20 --zone=trustedfirewall-cmd --remove-source=192.168.76.20 --zone=trusted

示例

6)管理port接口
firewall-cmd --add-port=80/tcpfirewall-cmd --remove-port=80/tcp

示例?

(3)firewalld高級規則?

Firewalld 的高級規則(Rich Rules)允許管理員基于復雜條件(如源/目標 IP、端口、協議、連接狀態等)定義精細化的防火墻策略。

1)核心參數與功能:
匹配條件
參數說明
`family="ipv4ipv6"`指定協議族(IPv4 或 IPv6)。
source address="CIDR"匹配源 IP 或網段(如?192.168.1.0/24)。
destination address="CIDR"匹配目標 IP 或網段。
`port port="端口" protocol="tcpudp"`匹配目標端口和協議(如?port="80" protocol="tcp")。
service name="服務名"匹配預定義的服務(如?sshhttp)。
protocol value="協議"匹配 IP 協議號或名稱(如?icmpgre)。
動作與日志
參數說明
accept允許數據包。
reject拒絕數據包并返回錯誤(默認?icmp-port-unreachable)。
drop丟棄數據包(無響應)。
log記錄日志(可選?prefix?和?level)。
audit生成審計日志(需審計子系統支持)。
mark set="標記值"為數據包設置標記(需結合?tc?等工具實現 QoS 或策略路由)。
?2)規則優先級與執行順序
  1. 富規則優先級

    • 富規則優先于普通服務/端口規則執行。

    • 規則按添加順序匹配,首條匹配的規則生效

  2. 規則順序調整

    • 默認無法直接調整順序,需先刪除再重新添加。

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

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

相關文章

el-date-picker 前端時間范圍選擇器

控制臺參數&#xff1a; 前端代碼&#xff1a;用數組去接受&#xff0c;同時用 value-format"YYYY-MM-DD" 格式化值為&#xff1a;年月日格式 <!-- 查詢區域 --><transition name"fade"><div class"search" v-show"showSe…

在 macOS 上安裝 jenv 管理 JDK 版本

在 macOS 上安裝 jenv 并管理 JDK 版本 在開發 Java 應用程序時&#xff0c;你可能需要在不同的項目中使用不同版本的 JDK。手動切換 JDK 版本可能會很繁瑣&#xff0c;但幸運的是&#xff0c;有一個工具可以簡化這個過程&#xff1a;jenv。jenv 是一個流行的 Java 版本管理工…

2025年全國青少年信息素養大賽復賽C++集訓(16):吃糖果2(題目及解析)

2025年全國青少年信息素養大賽復賽C集訓&#xff08;16&#xff09;&#xff1a;吃糖果2&#xff08;題目及解析&#xff09; 題目描述 現有n(50 > n > 0)個糖果,每天只能吃2個或者3個&#xff0c;請計算共有多少種不同的吃法吃完糖果。 時間限制&#xff1a;1000 內存…

ARM筆記-嵌入式系統基礎

第一章 嵌入式系統基礎 1.1嵌入式系統簡介 1.1.1嵌入式系統定義 嵌入式系統定義&#xff1a; 嵌入式系統是以應用為中心&#xff0c;以計算機技術為基礎&#xff0c;軟硬件可剪裁&#xff0c;對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統 ------Any devic…

大語言模型(LLM)入門項目推薦

推薦大語言模型(LLM)的入門項目 TiaoYu-1。 https://github.com/tiaoyu1122/TiaoYu-1 項目優點&#xff1a; 幾乎每一行代碼(一些重復的代碼除外)都添加了注釋&#xff0c;詳細介紹了代碼的作用&#xff0c;方便閱讀與理解。基本上覆蓋了常見 LLM 模型的全部訓練流程&#x…

Linux里more 和 less的區別

在 Linux/Unix 系統中&#xff0c;more 和 less 都是用于分頁查看文本文件的命令&#xff0c;但 less 是 more 的增強版&#xff0c;功能更強大。以下是它們的核心區別和用法對比&#xff1a; 1. 基礎功能對比 特性moreless&#xff08;更強大&#xff09;向前翻頁? 僅支持向…

基于PDF流式渲染的Word文檔在線預覽技術

一、背景介紹 在系統開發中&#xff0c;實現在線文檔預覽與編輯功能是許多項目的核心需求&#xff0c;但在實際的開發過程中&#xff0c;我們經常會面臨以下難點&#xff1a; 1&#xff09;格式兼容性問題&#xff1a;瀏覽器原生不支持解析Word二進制格式&#xff0c;直接渲染會…

ai學習--python部分-1.變量名及命名空間的存儲

初學代碼時總有一個問題困擾我&#xff1a;a 10 # a指向地址0x1234&#xff08;存儲10&#xff09; 變量a的值10存儲在0x1234&#xff0c;那么變量a需要存儲嗎&#xff1f;a又存儲在什么地址呢 目錄 1. ??命名空間的本質?? 2. ??命名空間的內存占用?? 3. ??…

Leetcode 3563. Lexicographically Smallest String After Adjacent Removals

Leetcode 3563. Lexicographically Smallest String After Adjacent Removals 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3563. Lexicographically Smallest String After Adjacent Removals 1. 解題思路 這次的最后一題同樣沒有自力搞定&#xff0c;簡直了…… 這道題還…

微信小程序之Promise-Promise初始用

我們來嘗試使用Promise。 1、需求&#xff0c;做個抽獎的按鈕&#xff0c; 抽獎規則&#xff1a; 30%的幾率中獎&#xff0c;中獎會提示恭喜恭喜&#xff0c;獎品為10萬 RMB 勞斯萊斯優惠券&#xff0c;沒中獎會提示再接再厲。 2、先搭界面&#xff1a; <view class&qu…

spring-boot-starter-data-redis應用詳解

一、依賴引入與基礎配置 添加依賴 在 pom.xml 中引入 Spring Data Redis 的 Starter 依賴&#xff0c;默認使用 Lettuce 客戶端&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<…

全能郵箱全能郵箱:實現郵件管理的自動化!

全能郵箱全能郵箱&#xff1a;實現郵件管理的自動化&#xff01; 全能郵箱全能郵箱的配置教程&#xff1f;如何注冊烽火域名郵箱&#xff1f; 全能郵箱全能郵箱作為一種創新的郵件管理解決方案&#xff0c;正逐漸改變我們處理郵件的方式。蜂郵EDM將圍繞全能郵箱全能郵箱&…

Real2Render2Real:無需動力學仿真或機器人硬件即可擴展機器人數據

25年5月來自UC Berkeley 和 TRI 的論文“Real2Render2Real: Scaling Robot Data Without Dynamics Simulation or Robot Hardware”。 擴展機器人學習需要大量且多樣化的數據集。然而&#xff0c;現行的數據收集范式——人類遙操作——仍然成本高昂&#xff0c;且受到手動操作…

Cadence學習筆記之---PCB的布線與鋪銅

目錄 01 | 引 言 02 | 環境描述 03 | 布 線 04 | 鋪 銅 05 | 總 結 01 | 引 言 在上一篇文章中介紹了Cadence元件放置和布局相關的操作方法和步驟&#xff0c;當完成全部的器件布局后&#xff0c;就可以進行下一步&#xff1b; 本篇文章主要介紹Cadence中布線和鋪銅相關的…

redis-7.4.2 通過 systemd管理,rpmbuild spec文件參考

redis-7 和 redis 5 版本在配置為systemd 方式管理時&#xff0c;配置關于有些許區別&#xff0c;否則會報systemctl status redis 如下錯誤&#xff1a; redis.service: control process exited, codeexited status1 Failed to start Redis persistent key-value database. Un…

2025-05-26 什么是“AI 全棧”

AI全棧&#xff1a;模型 表示學習 向量庫 API UI 一句話定義&#xff1a; ? AI 全棧開發&#xff0c;是指開發者從原始文本/語音/圖像開始&#xff0c;結合大模型能力&#xff0c;構建完整應用閉環的技術能力棧。 AI全棧應用的過程 AI應用 ≠ 一個GPT接口&#xff0c;…

康師傅的“價值戰”答卷:一碗面的創新與擔當

低價策略、口味雷同、營銷跟風……方便面行業曾長期陷于同質化競爭的泥潭&#xff0c;不過近年來&#xff0c;行業競爭邏輯已悄然改變。 一方面來源于宏觀環境的變化&#xff0c;想要在縮量市場下保住大盤&#xff0c;一定要保持逆向思維的能力&#xff0c;另一方面&#xff0…

高性能管線式HTTP請求

高性能管線式HTTP請求:原理、實現與實踐 目錄 高性能管線式HTTP請求:原理、實現與實踐 1. HTTP管線化的原理與優勢 1.1 HTTP管線化的基本概念 關鍵特性: 1.2 管線化的優勢 1.3 管線化的挑戰 2. 高性能管線式HTTP請求的實現方案 2.1 技術選型與工具 2.2 Java實現:…

傳輸線上的信號速度與阻抗無關,主要由頻率決定

阻抗與傳播速度無關 通過計算我們可以知道&#xff0c;導體流過電流時&#xff0c;電子實際上的速度只有1cm/s。是很慢的。 導線的電阻對傳輸線上信號的傳播速度幾乎沒有任何影響。只在一些極端的情況下&#xff0c;互連的電阻才會影響信號的傳播速度&#xff0c;并且這個影響…

YOLOv1 詳解:單階段目標檢測算法的里程碑

在目標檢測領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法憑借其高效性和實用性&#xff0c;成為了行業內的明星算法。其中&#xff0c;YOLOv1 作為 YOLO 系列的開山之作&#xff0c;首次提出了單階段目標檢測的思想&#xff0c;徹底改變了目標檢測算…