Linux防火牆之Firewalld
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防火牆設置,以及乙太網路橋接器。提供運行時配置和永久配置兩種模式。
#防火牆狀態查詢指令:一些常用的防火牆狀態查詢指令,只需指定完整參數即可取得目前防火牆狀態。
[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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

很多朋友在設定防火牆的時候,發現自己的win11防火牆高級設定灰色了,無法點擊。這可能是由於沒有添加控制單元導致的,也可能是沒有透過正確的方法打開高級設置,下面一起來看看怎麼解決吧。 win11防火牆進階設定灰色方法一:1、先點選下方開始選單,在上方搜尋並開啟「控制台」2、接著開啟其中的「Windowsdefender防火牆」3、進入後,在左邊欄就可以開啟「進階設定」了。方法二:1、如果上面方法也打不開,可以右鍵“開始選單”,打開“運行”2、然後輸入“mmc”回車確定打開。 3.打開後,點選左上

在AlpineLinux上,你可以使用iptables工具來設定和管理防火牆規則。以下是在AlpineLinux上啟用或停用防火牆的基本步驟:檢查防火牆狀態:sudoiptables-L如果輸出結果中顯示有規則(例如,有一些INPUT、OUTPUT或FORWARD規則),則表示防火牆已啟用。如果輸出結果為空,則表示防火牆目前處於停用狀態。啟用防火牆:sudoiptables-PINPUTACCEPTsudoiptables-POUTPUTACCEPTsudoiptables-PFORWARDAC

無法在 Windows 7 上下載 Google Chrome 的原因:作業系統版本過低;安全協定過時;缺少必要元件;防火牆或安全軟體封鎖;網路連線問題。解決方法:升級作業系統、啟用 TLS 1.2、安裝必要元件、檢查防火牆、檢查網路連線。

UFW,又稱Uncomplex防火牆,被許多Linux發行版採用作為其防火牆系統。 UFW的設計讓新手使用者能夠輕鬆透過命令列介面和圖形使用者介面來管理防火牆設定。 UFW防火牆是一種能根據設定規則監控網路流量的系統,以保護網路免受網路嗅探和其他攻擊的影響。如果您在Linux系統上安裝了UFW但其狀態顯示為非活動狀態,可能有多種原因。在這篇指南中,我將分享如何解決Linux系統上UFW防火牆處於非活動狀態的問題。為什麼UFW在Linux上顯示不活動狀態為什麼UFW在Linux上預設不活動如何在Linu

很多使用win10系統的小伙伴發現,電腦桌面的圖標上有防火牆的標誌,這是什麼情況呢?這讓很多有強迫症的小伙伴特別難受,其實我們只要打開控制面板,在用戶帳戶中的“更改使用者帳號控制設定」變更就可以解決了,具體的教學一起來看看吧。 win10桌面圖示有防火牆標誌怎麼取消1、首先,透過滑鼠右鍵點選電腦開機畫面旁的開始功能表按鈕,然後從彈出的選單中選取控制面板功能。 2.緊接著選擇其中的「使用者帳戶」選項,從接下來出現的新介面中選擇「更改使用者帳戶控制設定」此項目。 3.調整視窗中的滑桿至底部之後,點選確認退出

Windows 11 控制台無法開啟的原因可能包括:進程衝突損壞的檔案病毒或惡意軟體感染登錄錯誤權限問題Windows 更新硬體問題其他原因(損壞的系統檔案、衝突的驅動程式或防火牆設定)

Edge瀏覽器被防火牆阻止了怎麼解決? Edge瀏覽器是微軟自帶的瀏覽器,有一部分用戶在使用的過程中發現這款瀏覽器被防火牆攔截了,那麼這是怎麼回事?以下就讓本站來為用戶們來仔細的介紹一下Edge瀏覽器被防火牆阻止了怎麼恢復吧。 Edge瀏覽器被防火牆阻止了怎麼恢復? 1、檢查防火牆設定: -點選Windows工作列上的「開始」按鈕,然後開啟「設定」。 -在「設定」視窗中,選擇「更新與安全性」。 -在

雖然Windows11中的截圖工具背後的概念很棒,但它的主要功能之一,即錄製視頻,確實令人失望。螢幕錄製功能仍然相對較新,因此可能會因故障而難以通過。儘管如此,讓我們來看看這個問題並嘗試找到解決方案。那麼為什麼截圖工具錄製影片功能不起作用?您可能沒有安裝最新版本的Windows11。截圖工具可能已損壞或損壞。防毒軟體等第三方軟體可能會阻止它錄製您的螢幕。您的電腦沒有足夠的RAM或硬碟空間來儲存螢幕記錄。電腦上的病毒或惡意軟體幹擾了程式的工作方式。如何讓截圖工具在Windows11中錄製我的螢幕
