搜尋
首頁電腦教學電腦知識Linux防火牆之Firewalld

Linux防火牆之Firewalld

Feb 19, 2024 pm 06:24 PM
防火牆client防火牆配置firewall

firewall 防火墙

firewalld服务有CLI和GUI两种工作模式。相较于iptables,firewall支持动态更新,并引入了区域(zone)的概念。

简而言之,区域是指防火墙预先定义的一组防火墙策略,使得防火墙之间可以快速切换这些策略,从而显著提高了防火墙的切换效率和应用速度。

区域 默认策略规则
trusted 允许所有数据包
home 拒绝流入流量,但是与ssh,mdns,ipp-client,dhcpv6-client服务则允许通过
internal 等同于home区域
work 拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过
public 拒绝流入流量,但是与ssh,ipp-client,dhcpv6-client服务则允许通过
external 拒绝流入流量,但是与ssh服务相关则允许通过
dmz 拒绝流入流量,但是与ssh服务相关则允许通过
block 拒绝流入流量,除非与流出的流量相关
drop 拒绝流入流量,除非与流出的流量相关

firewalld是Linux系統上的動態防火牆管理工具。它是Centos7系統預設的防火牆管理工具,取代了先前的iptables防火牆。

Firewalld主要在網路層工作,是一種套件過濾防火牆。與傳統的iptables相比,firewalld更加靈活易用,能實現更細緻的網路存取控制。

firewalld防火牆主要由區域(zone)和服務(Service)兩個面向組成。區域定義了不同部分的網絡,並為每個區域設定了一組規則集合。例如,public區域適用於公共網際網路環境下的主機,而internal區域適用於內部網路環境下的主機。另一方面,服務(Service)是一組預定義規則,用於控制對特定連接埠的存取權限。透過配置區域和服務規則,可以有效管理防火牆,確保網路安全。

firewalld是一個動態防火牆管理工具,支援網路區域、安全等級定義的網路連線和介面。它可配置IPv4、IPv6防火牆設置,以及乙太網路橋接器。提供運行時配置和永久配置兩種模式。

Linux防火牆之Firewalld

#防火牆狀態查詢指令:一些常用的防火牆狀態查詢指令,只需指定完整參數即可取得目前防火牆狀態。

[root@localhost ~]# firewall-cmd --state #显示运行状态
[root@localhost ~]# firewall-cmd --get-zones #显示所有zone区域
[root@localhost ~]# firewall-cmd --get-active-zones#显示当前使用的区域
[root@localhost ~]# firewall-cmd --get-default-zone#显示默认使用的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32 #查看ens32网口的区域
[root@localhost ~]# firewall-cmd --zone=public --list-ports#显示public区域所有开放的端口

防火牆服務放行指令: 首先我們透過參數--panic-on拒絕所有,並透過--add-service放行NFS服務所對應的連接埠號碼.

[root@localhost ~]# firewall-cmd --get-services #显示服务列表
[root@localhost ~]# firewall-cmd --list-service #查询当前放行服务

[root@localhost ~]# firewall-cmd --panic-on #拒绝所有包
[root@localhost ~]# firewall-cmd --panic-off#取消拒绝状态
[root@localhost ~]# firewall-cmd --query-panic#查看是否拒绝
[root@localhost ~]# firewall-cmd --reload #重新加载防火墙

[root@localhost ~]# firewall-cmd --add-service=nfs#临时允许nfs服务通过
[root@localhost ~]# firewall-cmd --add-service=nfs --permanent#永久允许nfs服务通过

#放行https服务数据包通过
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 service name=httpd accept'
[root@localhost ~]# firewall-cmd --list-rich-rule
rule family="ipv4" source address="192.168.1.0/24" service name="https" accept

防火牆埠放行指令: 我們可使用--add-port指令增加開啟某埠,也可使用--remove-port阻止某埠,使用埠號與服務名均可.

[root@localhost ~]# firewall-cmd --list-all #显示所有端口列表
[root@localhost ~]# firewall-cmd --list-services#查看开放的服务
[root@localhost ~]# firewall-cmd --list-ports #查看开放的端口

[root@localhost ~]# firewall-cmd --add-port=443/tcp #临时开启443端口
[root@localhost ~]# firewall-cmd --remove-port=443/tcp#删除443端口

[root@localhost ~]# firewall-cmd --add-service=mysql#开放mysql端口
[root@localhost ~]# firewall-cmd --remove-service=http#阻止http端口

[root@localhost ~]# firewall-cmd --add-port=3306/tcp#开放通过tcp访问3306
[root@localhost ~]# firewall-cmd --remove-port=80/tcp #阻止通过tcp访问3306

[root@localhost ~]# firewall-cmd --add-port=233/udp #开放通过udp访问233

#临时放行8080端口,和8081端口
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

#放行本地的3260端口
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 port port=3260 protocol=tcp accept'

防火牆設定連接埠轉送: 連接埠轉送功能當使用者存取本機80連接埠是自動轉送至本機或目標主機的某個連接埠上.

#将80端口的流量转发至8080
[root@localhost ~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080

#将80端口的流量转发至192.168.1.1
[root@localhost ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1.1

#将80端口的流量转发至192.168.1.1的8080端口上
[root@localhost ~]# firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1:toport=8080

查詢與設定預設區域: 查詢firewall服務目前所使用的區域,同時設定服務新的預設區域為external區域.

#查询firewall服务当前所使用的区域
[root@localhost ~]# firewall-cmd --get-default-zone
public

#查看ens32网卡的所在区域信息
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public

#设置默认区域为external
[root@localhost ~]# firewall-cmd --set-default-zone=external
success
[root@localhost ~]# firewall-cmd --get-default-zone
external

修改預設區域到新區域: 修改ens32網口的public#區域到external區域,並永久生效.

[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public

[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32
[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32 --permanent
success

[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
external

設定某區域服務狀態: 設定某個區域是否允許請求SSH和HTTPS協定的流量

#查询public区域内是否放行了ssh,https服务
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no

#把public区域的https请求,永久允许通过
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success

#把public区域的https请求,设置为永久拒绝.
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https --permanent
success

設定連接埠轉送策略: 在192.168.1.0/24網路中的系統,存取本機連接埠5423將被轉送至本機的80連接埠.

[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=5423 protocol=tcp to-port=80' --permanent

允許/移除存取連接埠: 批次允許或移除某個區域內某個主機的連接埠策略.

# 允许/移除 192.168.1.10 所有访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" drop' --permanent

# 允许192.168.2.0/24所有访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.2.0/24" accept' --permanent

# 允许192.168.10访问22端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent

# 移除192.168.10访问22端口
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent

# 允许192.168.1.0/24访问22端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" port port=22 protocol=tcp accept'

防火牆技術種類:

(1)套件過濾防火牆(packet filtering)

(2)應用程式代理防火牆(application proxy)

(3)狀態偵測防火牆(stateful inspection)

(firewalld是套件過濾防火牆,所以這裡只講套件過濾防火牆)

套件過濾防火牆概述:

(1)netfilter:位於Linux核心中的套件過濾功能體系,成為Linux防火牆的「核心態」。

(2)firewalld:CentOS7預設的管理防火牆規則的工具,成為Linux防火牆的「使用者狀態」。

————上面的兩種稱呼都可以表示為Linux防火牆。

套件過濾的工作層次:

(1)主要是網路層,針對IP封包、檢查來源IP。

(2)體現在對包內的IP位址、連接埠等資訊的處理。

網路區域:

Firewalld預先定義的九種網路區域:

①trusted②public③work④home⑤internal⑥external⑦dmz⑧block⑨drop

————預設情況就有一些有效的區域,由firewalld提供的區域按照從不信任到信任的順序排序。

(1)丟棄區域(Drop Zone):如果使用丟棄區域,任何進入的封包將被丟棄,這個類似於Centos6上的 iptables -j drop ,使用丟棄規則意味著將不存在相應。

(2)阻塞區域(Block Zone):阻塞區域會拒絕進入的網路連接,返回icmp-host-prohibited,只有伺服器已經建立的連接會被通過,即只允許由該系統初始化的網路連接。

(3)公共區域(Public Zone):只接受那些被選中的連接,預設只允許ssh和dhcpv6-client,這個zone是缺省zone(缺省就是預設的意思,所以公共區域也是預設區域,在沒有任何配置的情況下走的是公共區域)。

(4)外部區域(External Zone):這個區域相當於路由器的啟動偽裝(masquerading)選項,只有指定的連接會被接受,即ssh,而其他的連接將被丟棄或不被接受。

###(5)隔離區域(DMZ Zone):如果想要只允許給部分服務能被外部訪問,可以在DMZ區域中定義,它也擁有隻通過被選中連接的特性,即ssh, 這個區域又叫做非軍事化區域。 ###

(6)工作区域(Work Zone):在这个区域中,我们只能定义内部网络,比如私有网络通信才被允许, 只允许ssh、ipp-client和dhcpv6-client。

(7)家庭区域(Home Zone):这个区域专门用于家庭环境,它同样只允许被选中的连接, 即ssh、ipp-client、mdns、samba-client和dhcpv6-client。

(8)内部区域(Internal Zone):这个区域和 工作区域(Work Zone) 类似,只允许通过被选中的连接,与 家庭区域(Home Zone) 相同。

(9)信任区域(Trusted Zone):信任区域允许所有网络通信通过,因为 信任区域(Trusted Zone)是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为 信任区域(Trusted Zone)是允许所有连接的。

————以上是系统定义的所有的区域(Zone),但是,不是所有的区域(Zone)都在使用,只有活跃的区域(Zone)才有实际操作意义。

注意:因为默认区域只允许ssh和dhcp,所以在没有任何配置的情况下默认是拒绝ping包的。

常用命令

# 查看所有放行端口
firewall-cmd --zone=public --list-ports
 
# 禁止IP访问机器
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="192.168.0.1" drop'
 
# 禁止一个IP段,比如禁止192.168.*.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="192.168.0.1/16" drop'
 
# 禁止一个IP段,比如禁止192.168.0.*
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="192.168.0.1/24" drop'
 
# 禁止机器IP从防火墙中删除
firewall-cmd --permanent --remove-rich-rule='rule family=ipv4 source address="192.168.0.1" drop'
 
# 允许http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --add-service=http
 
# 关闭http服务(对应服务策略目录:/usr/lib/firewalld/services/)
firewall-cmd --permanent --remove-service=http
 
# 允许端口:3306
firewall-cmd --permanent --add-port=3306/tcp
 
# 允许端口:1-3306
firewall-cmd --permanent --add-port=1-3306/tcp
 
# 关闭放行中端口:3306
firewall-cmd --permanent --remove-port=3306/tcp
 
# 查看firewall的状态
firewall-cmd --state
 
# 查看防火墙规则(只显示/etc/firewalld/zones/public.xml中防火墙策略)
firewall-cmd --list-all
 
# 查看所有的防火墙策略(即显示/etc/firewalld/zones/下的所有策略)
firewall-cmd --list-all-zones
 
# 重新加载配置文件
firewall-cmd --reload
 
# 更改配置后一定要重新加载配置文件
firewall-cmd --reload

# Postgresql端口设置。允许192.168.142.166访问5432端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port port="5432" protocol="tcp" accept"

# redis端口设置。允许192.168.142.166访问6379端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port port="6379" protocol="tcp" accept"

# beanstalkd端口设置。允许192.168.142.166访问11300端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port port="11300" protocol="tcp" accept"

# 查看防火墙端口列表
firewall-cmd --list-ports

# 添加指定端口tcp
firewall-cmd --zone=public --add-port=8080/tcp --permanent# 开放8080/tcp端口 
firewall-cmd --zone=public --add-port=10002-10010/tcp --permanent# 开放10002-10010/tcp端口范围

# 添加指定端口udp
firewall-cmd --zone=public --add-port=9200/udp --permanent # 开放9200/udp端口
firewall-cmd --zone=public --add-port=20015-20020/udp --permanent# 开放20015-20020/udp端口范围

# 删除指定端口
firewall-cmd --zone= public --remove-port=19800/tcp --permanent # 删除已开放的19880/tcp端口
firewall-cmd --zone= public --remove-port=9200-9300/udp --permanent# 删除已开放的9200-9300/udp 端口范围

# 热加载防火墙,使之生效
firewall-cmd --reload

# 指定某IP访问某端口
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.107" port protocol="tcp" port="3306" accept"

# 删除策略
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.107" port protocol="tcp" port="3306" accept"

# 指定某个网段访问某个端口范围
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="11.76.168.0/24" port protocol="udp" port="1-65535" accept"

# 删除策略
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="11.76.168.0/24" port protocol="tcp" port="1-65535" accept"

# 禁止指定ip 访问某个端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.200" port protocol="tcp" port="80" reject"
 
# 禁止某个段的ip 访问某个端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject"
 
# 允许指定ip 访问所有端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.100" port protocol="tcp" accept"

# 允许指定ip段 访问所有端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" accept"

# 允许192.168.1.10所有访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent

# 移除192.168.1.10所有访问所有端口
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" accept' --permanent

# 允许192.168.2.0/24(0-255)所有访问所有端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.2.0/24" accept' --permanent

# 允许192.168.1.10所有访问TCP协议的22端口
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent

# 移除192.168.1.10所有访问TCP协议的22端口
firewall-cmd --zone=public --remove-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' --permanent

# 防火墙重新载入(必须重新载入后才能生效)
firewall-cmd --reload

# 查看rich-rules(富规则)
firewall-cmd --list-rich-rules

# 查看防火墙服务规则
firewall-cmd --list-services

# 查看防火墙所有规则
firewall-cmd --list-all

# 查看防火墙所有区域的配置规则
firewall-cmd --list-all-zones

# 查看默认区域
firewall-cmd --get-default-zone

# 查看网络接口使用区域
firewall-cmd --get-active-zones

# 查看默认的可用服务
firewall-cmd --get-services

# 要启用或禁用HTTP服务
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --remove-service=http --permanent





# 移除现有规则(此步骤相当重要,很多文章和博客都没提及到)
firewall-cmd --permanent --zone=public --remove-port=80/tcp
firewall-cmd --reload
 
# 在192.168.100.100102上测试访问
curl192.168.100.101
发现均无法再访问101的80端口

# 设置规则
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.102" port protocol="tcp" port="80" accept"
firewall-cmd --reload

# 测试访问
curl 192.168.100.101
# 100无法访问102可以访问
至此实现了通过防火墙firewalld设置规则,指定ip访问指定端口

以上是Linux防火牆之Firewalld的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:每日运维。如有侵權,請聯絡admin@php.cn刪除
修復:Windows更新可能自動替換AMD -Minitool修復:Windows更新可能自動替換AMD -MinitoolApr 18, 2025 am 12:51 AM

如果您的PC在AMD芯片組上運行,則可能會在使用時收到“ Windows Update可能自動替換AMD”的錯誤消息。不用擔心! PHP.CN的這篇文章為您提供了一些解決方案。

Microsoft Sway vs PowerPoint-選擇哪一個?Microsoft Sway vs PowerPoint-選擇哪一個?Apr 18, 2025 am 12:50 AM

什麼是Microsoft Sway,什麼是PowerPoint?這兩個是不同的演示工具,可以促進人們的工作和學習。因此,它們之間有什麼區別以及它們之間的選擇。 php.cn網站上的這篇文章將為您提供一些

[必須知道]贏得10個離線安裝程序:安裝贏得10 22H2離線[必須知道]贏得10個離線安裝程序:安裝贏得10 22H2離線Apr 18, 2025 am 12:49 AM

是否有Windows 10離線安裝程序供您安裝最新的Windows 10離線或沒有Internet?當然,是的。 php.cn軟件向您展示瞭如何在這篇文章中獲取Windows 10離線安裝程序。

指南 - 如何停止已過期的Windows Server自動駛入?指南 - 如何停止已過期的Windows Server自動駛入?Apr 18, 2025 am 12:48 AM

一些用戶報告說,許可證到期後,他們符合Windows Server自動駛入問題。來自PHP.CN的這篇文章會教您如何停止過期的Windows Server自動檢查。現在,繼續閱讀。

該文件無法在OneDrive中顯示 - 如何解決該文件?該文件無法在OneDrive中顯示 - 如何解決該文件?Apr 18, 2025 am 12:47 AM

訪問特定文件夾時,您是否正在努力處理“無法顯示該文件”錯誤?一些用戶抱怨這種麻煩並尋找有用的措施。有關該文件的本文無法從php.cn Wil中顯示

Street Fighter 6系統要求 - 您準備好了嗎? -  MinitoolStreet Fighter 6系統要求 - 您準備好了嗎? - MinitoolApr 18, 2025 am 12:46 AM

Street Fighter 6是Capcom出版的格鬥遊戲,屬於街頭霸王專營權,吸引了許多遊戲迷。有些人希望在PC上玩這個遊戲。為此,您需要滿足一些街頭霸王6系統要求

如何在驅動器名稱Windows 10/11之前顯示驅動器字母-Minitool如何在驅動器名稱Windows 10/11之前顯示驅動器字母-MinitoolApr 18, 2025 am 12:45 AM

在Windows中默認情況下,在驅動器字母之前顯示驅動名稱(音量標籤)。您知道如何在驅動名稱之前顯示驅動字母嗎?來自PHP.CN的這篇文章告訴您如何在文件資源管理器中首先顯示驅動器字母。

確切的步驟可以關閉/在Windows 10/11中的語言欄上確切的步驟可以關閉/在Windows 10/11中的語言欄上Apr 18, 2025 am 12:44 AM

語言欄對於多語言Windows用戶很有用。您可以通過單擊來更改語言。有些人想關閉任務欄上的語言欄。你知道該怎麼做嗎?如果您不知道,請閱讀此php.cn帖子以查找P

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器