Linux Firewalld 基礎

来源:https://www.cnblogs.com/llife/archive/2019/10/17/11695912.html
-Advertisement-
Play Games

互聯網上提供了各種網路服務,而防火牆可以設置各種規則來限制訪問,保護伺服器。 ...


CentOS-Logo

互聯網上提供了各種網路服務,而防火牆可以設置各種規則來限制訪問,保護伺服器。


概述

Linux的防火牆體系主要工作在網路層,針對TCP/IP數據包實施過濾和限制,屬於典型的包過濾防火牆。

Linux系統的防火牆體系基於內核編碼實現,具有非常穩定的性能和極高的效率。

三種防火牆

netfilter

  • linux內核中實現包過濾防火牆的內部結構
  • 屬於內核態的防火牆功能體系

iptables

  • 指管理linux防火牆的命令程式
  • 屬於用戶態的防火牆管理體系

Firewalld

  • CentOS 7預設的防火牆管理工具,取代之前的iptables防火牆
  • 屬於用戶態
  • firewalldiptables內部結構都指向netfilter這個強大的網路過濾子系統,以實現包過濾防火牆功能
  • 支持動態更新、加入防火牆zone概念
  • 支持IPv4IPv6地址
  • 字元管理工具firewall-cmd和圖形化管理工具firewall-config

區別

名稱 Firewalld iptables
配置文件 /usr/lib/firewalld/和/etc/firewalld/ /etc/sysconfig/iptables
對規則的修改 不需要全部刷新策略,不丟失現行連接 需要全部刷新策略,丟失連接
防火牆類型 動態防火牆 靜態防火牆

網路區域

區域介紹

區域 描述
drop (丟棄) 任何接收的網路數據包都被丟棄,沒有任何回覆。僅能有發送出去的網路連接
block (限制) 任何接收的網路連接都被IPv4icmp-host-prohibited信息和IPv6icmp6-adm-prohibited信息所拒絕
public (公共) 在公共區域內使用,不能相信網路內的其他電腦不會對您的電腦造成危害,只能接收經過選取的連接
external (外部) 特別是為路由器啟用了偽裝功能的外部網。您不能信任來自網路的其他計算,不能相信它們不會對您的電腦造成危害,只能接收經過選擇的連接
dmz (非軍事區) 用於您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網路,僅僅接收經過選擇的連接
work (工作) 用於工作區。您可以基本相信網路內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接
home (家庭) 用於家庭網路。您可以基本信任網路內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接
internal (內部) 用於內部網路。您可以基本上信任網路內的其他電腦不會威脅您的電腦。僅僅接受經過選擇的連接
trusted (信任) 可接受所有的網路連接
  • 每個區域都具有不同限製程度的規則
  • 可以使用一個或多個區域,但是任何一個活躍區域至少需要關聯源地址或介面
  • 預設情況下,public區域是預設區域,包含所有介面(網卡)

數據處理流程

檢查數據來源的源地址

  • 若源地址關聯到特定的區域,則執行該區域所指定的規則
  • 若源地址未關聯到特定的區域,則使用傳入網路介面的區域並執行該區域所指定的規則
  • 若網路介面未關聯到特定的區域,則使用預設區域並執行該區域所指定的規則

配置方法

運行時配置

  • 實時生效,並持續至Firewalld重新啟動或重新載入配置
  • 不中斷現有連接
  • 不能修改服務配置

永久配置

  • 不立即生效,除非Firewalld重新啟動或重新載入配置
  • 中斷現有連接
  • 可以修改服務配置

配置文件

Firewalld會優先使用/etc/firewalld/中的配置,如果不存在配置文件,則使用/usr/ib/firewalld/中的配置

  • /etc/firewalld/:用戶自定義配置文件,需要時可通過從/usr/ib/firewalld/中拷貝

  • /usr/ib/firewalld/:預設配置文件,不建議修改,若恢復至預設配置,可直接刪除/etc/firewalld/中的配置

圖形工具

[root@localhost ~]# firewall-config

命令行工具

[root@localhost ~]# firewall-cmd 命令
  • 以下是整理的一些命令
--get-default-zone
顯示網路連接或介面的預設區域

--set-default-zone=<zone>
設置網路連接或介面的預設區域

--get-active-zones
顯示已激活的所有區域

--get-zone-of-interface=<interface>
顯示指定介面綁定的區域

--zone=<zone> --add-interface=<interface>
為指定介面綁定區域

--zone=<zone> --change-interface=<interface>
為指定的區域更改綁定的網路介面

--zone=<zone> --remove-interface=<interface>
為指定的區域刪除綁定的網路介面

--query-interface=<interface>
查詢區域中是否包含某介面

--list-all-zones
顯示所有區域及其規則

[--zone=<zone>] --list-all
顯示所有指定區域的所有規則
[--zone=<zone>] --list-services
顯示指定區域內允許訪問的所有服務

[--zone=<zone>] --add-service=<service>
為指定區域設置允許訪問的某項服務

[--zone=<zone>] --remove-service=<service>
刪除指定區域已設置的允許訪問的某項服務

[--zone=<zone>] --query-service=<service>
查詢指定區域中是否啟用了某項服務
[--zone=<zone>] --list-ports
顯示指定區域內允許訪問的所有埠號

[--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
啟用區域埠和協議組合,可選配置超時時間

[--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
禁用區域埠和協議組合

[--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
查詢區域中是否啟用了埠和協議組合
[--zone=<zone>] --list-icmp-blocks
顯示指定區域內阻塞的所有ICMP類型

[--zone=<zone>] --add-icmp-block=<icmptype>
為指定區域設置阻塞的某項ICMP類型

[--zone=<zone>] --remove-icmp-block=<icmptype>
刪除指定區域已阻塞的某項ICMP類型

[--zone=<zone>] --query-icmp-block=<icmptype>
查詢指定區域的ICMP阻塞功能

firewall-cmd

狀態操作

  • 停止、啟動
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl start firewalld
  • 禁止/允許開機啟動
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl enable firewalld
  • 查看狀態
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# firewall-cmd --state
running

獲取預定義信息

預定義信息主要包括三種:可用的區域、可用的服務以及可用的ICMP阻塞類型

  • 顯示預定義的區域
[root@localhost ~]# firewall-cmd --get-zones 
block dmz drop external home internal public trusted work
  • 顯示預定義的服務
[root@localhost ~]# firewall-cmd --get-services 
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
  • 顯示預定義的icmp阻塞類型
[root@localhost ~]# firewall-cmd --get-icmptypes 
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
  • 各種阻塞類型的含義分別如下所示:

destination-unreachable:目的地址不可達。
echo-reply:應答回應(pong)。
parameter-problem:參數問題。
redirect:重新定向。
router-advertisement:路由器通告。
router-solicitation:路由器徵尋。
source-quench:源端抑制。
time-exceeded:超時。
timestamp-reply:時間戳應答回應。
timestamp-request:時間戳請求。

區域管理

使用firewall-cmd命令可以實現獲取和管理區域,為指定區域綁定網路介面等功能。

--get-default-zone
顯示網路連接或介面的預設區域

--set-default-zone=<zone>
設置網路連接或介面的預設區域

--get-active-zones
顯示已激活的所有區域

--get-zone-of-interface=<interface>
顯示指定介面綁定的區域

--zone=<zone> --add-interface=<interface>
為指定介面綁定區域

--zone=<zone> --change-interface=<interface>
為指定的區域更改綁定的網路介面

--zone=<zone> --remove-interface=<interface>
為指定的區域刪除綁定的網路介面

--list-all-zones
顯示所有區域及其規則

[--zone=<zone>] --list-all
顯示所有指定區域的所有規則,省略--zone=<zone>時表示僅對預設區域操作
  • 顯示當前系統中的預設區域
[root@localhost ~]# firewall-cmd --get-default-zone 
public
  • 顯示預設區域的所有規則
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
  • 顯示網路介面ens33對應的區域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33 
public
  • 將網路介面ens33對應區域改為internal區域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33 
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33 
internal
  • 顯示internal區域下有哪些網路介面
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces 
ens33
  • 顯示所有已激活的區域
[root@localhost ~]# firewall-cmd --get-active-zones 
internal
  interfaces: ens33

服務管理

為了方便管理,firewalld預先定義了很多服務,存放在/usr/lib/firewalld/services/目錄中,服務通過單個的XML配置文件來指定。

這些配置文件則按以下格式命名:service-name.xml,每個文件對應一項具體的網路服務,如ssh服務等。

與之對應的配置文件中記錄了各項服務所使用的tcp/udp埠。在最新版本的firewalld中預設已經定義了70多種服務供我們使用,對於每個網路區域,均可以配置允許訪問的服務。

當預設提供的服務不適用或者需要自定義某項服務的埠時,我們需要將service配置文件放置在/etc/firewalld/services/目錄中。

service配置具有以下優點。

  • 通過服務名字來管理規則更加人性化。
  • 通過服務來組織埠分組的模式更加高效,如果一個服務使用了若幹個網路埠,則服務的配置文件就相當於提供了到這些埠的規則管理的批量操作快捷方式。
[--zone=<zone>] --list-services
顯示指定區域內允許訪問的所有服務

[--zone=<zone>] --add-service=<service>
為指定區域設置允許訪問的某項服務

[--zone=<zone>] --remove-service=<service>
刪除指定區域已設置的允許訪問的某項服務

[--zone=<zone>] --list-ports
顯示指定區域內允許訪問的所有埠號

[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol>
為指定區域設置允許訪問的某個/某段埠號(包括協議名)

[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol>
刪除指定區域已設置的允許訪問的埠號(包括協議名)

[--zone=<zone>] --list-icmp-blocks
顯示指定區域內拒絕訪問的所有 ICMP 類型

[--zone=<zone>] --add-icmp-block=<icmptype>
為指定區域設置拒絕訪問的某項 ICMP 類型

[--zone=<zone>] --remove-icmp-block=<icmptype>
刪除指定區域已設置的拒絕訪問的某項 ICMP 類型,省略--zone=<zone>時表示對預設區域操作
  • 顯示預設區域允許訪問的所有服務
[root@localhost ~]# firewall-cmd --list-services 
ssh dhcpv6-client
  • 設置預設區域允許訪問http服務
[root@localhost ~]# firewall-cmd --add-service=http 
success
  • 設置預設區域允許訪問https服務
[root@localhost ~]# firewall-cmd --add-service=https 
success
  • 顯示預設區域允許訪問的所有服務
[root@localhost ~]# firewall-cmd --list-services 
ssh dhcpv6-client http https
  • 顯示internal區域內允許訪問的所有服務
[root@localhost ~]# firewall-cmd --zone=internal --list-services 
ssh mdns samba-client dhcpv6-client
  • 設置internal區域允許訪問mysql服務
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql 
success
  • 設置internal區域不允許訪問samba-client服務
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=samba-client 
success
  • 顯示internal區域內允許訪問的所有服務
[root@localhost ~]# firewall-cmd --zone=internal --list-services 
ssh mdns dhcpv6-client mysql

埠管理

在進行服務配置時,預定義的網路服務可以使用服務名配置,服務所涉及的埠就會自動打開。

但是,對於非預定義的服務只能手動為指定的區域添加埠。

  • internal區域打開443/TCP
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
  • internal區域禁止443/TCP埠訪問
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success

兩種配置模式

前面提到firewall-cmd命令工具有兩種配置模式:

  • 運行時模式Runtime mode表示當前記憶體中運行的防火牆配置,在系統或firewalld服務重啟、停止時配置將失效。
  • 永久模式Permanent mode表示重啟防火牆或重新載入防火牆時的規則配置,是永久存儲在配置文件中的。

firewall-cmd命令工具與配置模式相關的選項有三個。

  • --reload:重新載入防火牆規則並保持狀態信息,即將永久配置應用為運行時配置。

  • --permanent:帶有此選項的命令用於設置永久性規則,這些規則只有在重新啟動firewalld或重新載入防火牆規則時才會生效;若不帶有此選項,表示用於設置運行時規則。

  • --runtime-to-permanent:將當前的運行時配置寫入規則配置文件中,使之成為永久性。

[root@localhost ~]# firewall-cmd --runtime-to-permanent
success

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET和c#: .NET是一個框架,一般稱.net Framework。 c#是一個.NET框架下的編程語言。 縮寫: 程式集: CIL(Common Intermediate Language,公共中間語言):程式集里的執行代碼。其他術語:IL(Intermediate Language)和MS ...
  • #region 添加有效性 DataTable dt = LAbll.LogisticsAccounts(DeptId); //查數據 if (dt.Rows.Count < 20) //有效性字元限制255,一組字元12加分割符=13 { string[] strs = {}; for (int ...
  • 在日常開發過程中,難免有這樣一種需求:就是你所建的每一個類文件或者介面文件都需要標註下作者姓名以及類的用途。如果我們每次創建文件的時候都需要寫一遍這些信息是很煩神的。還好Visual Studio給我們提供了模板註釋的功能來自動幫我們生成類似的註釋代碼。今天趁著中午休息的時間就讓我們一起來操作下吧。 ...
  • 上節中,我們初步的介紹了一下NetCore的一些基礎知識,為了控制篇幅(其實也是因為偷懶),我將NetCore 基礎分為兩部分來寫。 0.WebAPI 項目的建立 1..NetCore 項目執行(載入)過程 2.中間件的執行過程 3.WebAPI 的路由 4.依賴註入 5.非同步編程 上一節中,我把0 ...
  • 這是我在面試過程中遇到的一個小測試,很可惜,當天未能圓滿完成,雖然第二天經過實際測試已經OK 了,但學無止境,繼續努力吧,特將此代碼貼在這裡,供以後學習使用; 窗體界面如下: ...
  • 該轉換器是印度開發團隊推出的,推出時間也挺長,僅支持C#和VB.net代碼轉換。代碼轉換地址: C# -> VB.NET http://www.dotnetspider.com/convert/Csharp-To-Vb.aspx VB.NET -> C# http://www.dotnetspide ...
  • 從篇 abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI前端頁面框架 (十八) 至abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI之貨物管理三 (二十一) 為止,我們已經通過EasyUI完成了貨物信息管理的前端與後臺功能。現在... ...
  • 當我的本地沒有安裝任何資料庫服務的時候,可以直接通過我本地的埠訪問遠程機器上的資料庫服務,實現這樣的效果就可以使用本地轉發功能 實際測試本地埠轉發,把本地的9006埠轉發給遠程伺服器的115.159.28.111的3306埠,當然需要輸入遠程機器的用戶名和密碼 執行完成後,可以在另一個終端中 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...