如何在 CentOS 8 上配置和管理防火牆

strivechao發表於2020-09-27

防火牆是一種用於監視和過濾傳入和傳出網路流量的工具。它透過定義一組安全規則來工作,這些安全規則確定是允許還是阻止特定流量。正確配置的防火牆是整個系統安全的最重要方面之一。

CentOS 8 附帶了一個名為   的防火牆守護程式。它是符合 D-Bus 介面的完整解決方案,可讓您動態管理系統的防火牆。

在本教程中,我們將討論如何在 CentOS 8 上配置和管理防火牆。我們還將說明基本的 FirewallD 概念。

先決條件

要配置防火牆服務,您必須以 root 使用者或   身份登入。

基本防火牆概念

Firewalld 使用區域和服務的概念。根據您將要配置的區域和服務,您可以控制允許或阻止與系統之間的流量。

可以使用  firewall-cmd 命令列實用程式配置和管理 Firewalld  。

在 CentOS 8 中, nftables 替代了 iptables,作為 firewalld 守護程式的預設防火牆後端。

防火牆區域

區域是預定義的規則集,用於指定計算機連線到的網路的信任級別。您可以將網路介面和源分配給區域。

以下是 FirewallD 提供的區域,根據區域的信任級別從不信任到信任:

  • drop刪除所有傳入連線,而無任何通知。僅允許傳出連線。
  • block:拒絕所有傳入連線,並帶有一條  icmp-host-prohibited 訊息  IPv4 和一條  icmp6-adm-prohibited 關於 IPv6n  的訊息。僅允許傳出連線。
  • public:用於不受信任的公共區域。您不信任網路上的其他計算機,但是可以允許選擇的傳入連線。
  • external:用於在系統充當閘道器或路由器時啟用 NAT 偽裝的外部網路。僅允許選擇的傳入連線。
  • internal:當系統充當閘道器或路由器時,用於內部網路。網路上的其他系統通常是受信任的。僅允許選擇的傳入連線。
  • dmz:用於非軍事區中訪問網路其餘部分的計算機。僅允許選擇的傳入連線。
  • work:用於工作機。網路上的其他計算機通常是受信任的。僅允許選擇的傳入連線。
  • home:用於家用機器。網路上的其他計算機通常是受信任的。僅允許選擇的傳入連線。
  • Trusted:接受所有網路連線。信任網路中的所有計算機。

防火牆服務

防火牆服務是預定義的規則,適用於區域,並定義必要的設定以允許特定服務的傳入流量。該服務使您可以輕鬆地在一個步驟中執行多個任務。

例如,服務可以包含有關開啟埠,轉發流量等的定義。

防火牆執行時和永久設定

Firewalld 使用兩個單獨的配置集,即執行時配置和永久配置。

執行時配置是實際的執行配置,並且不會在重新啟動後持續存在。當 firewalld 守護程式啟動時,它將載入永久配置,該配置將成為執行時配置。

預設情況下,使用  firewall-cmd 實用程式對 Firewalld 配置進行更改時,更改將應用於執行時配置。要使更改永久生效,請在命令後附加  --permanent 選項。

要在兩個配置集中應用更改,可以使用以下兩種方法之一:

  1. 更改執行時配置並將其永久化:

    sudo firewall-cmd <options> sudo firewall-cmd --runtime-to-permanent
  2. 更改永久配置並重新載入 firewald 守護程式:

    sudo firewall-cmd --permanent <options> sudo firewall-cmd --reload

啟用防火牆

在 CentOS 8 上,預設情況下已安裝並啟用 firewalld 。如果由於某種原因未在系統上安裝它,則可以透過鍵入以下內容來安裝並啟動守護程式:

sudo dnf install firewalld sudo systemctl enable firewalld --now

您可以使用以下方法檢查防火牆服務的狀態:

sudo firewall-cmd --state

如果啟用了防火牆,則命令應列印  running 。否則,您將看到  not running 。

防火牆區域

預設的區域設定為  public ,並且所有網路介面都分配給該區域,當然您可以根據自己的需要修改預設區域。

預設區域是用於所有未明確分配給另一個區域的區域。

您可以透過鍵入以下內容檢視預設區域:

sudo firewall-cmd --get-default-zone
public

要獲取所有可用區域的列表,請輸入:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

要檢視活動區域和分配給它們的網路介面,請執行以下操作:

sudo firewall-cmd --get-active-zones

以下輸出顯示介面  eth0 和  eth1 已分配給  public 區域:

public   interfaces: eth0 eth1

您可以使用以下命令列印區域配置設定:

sudo firewall-cmd --zone=public --list-all
public (active)   target: default   icmp-block-inversion: no   interfaces: eth0 eth1   sources:   services: ssh dhcpv6-client   ports:   protocols:   masquerade: no   forward-ports:   source-ports:   icmp-blocks:   rich rules:

從上面的輸出中,我們可以看到公共區域處於活動狀態並使用預設的 target ?️( REJECT)。輸出還顯示該區域由  eth0 和  eth1 介面使用,並允許 DHCP 客戶端和 SSH 通訊。

如果要檢查所有可用區域的配置,請輸入:

sudo firewall-cmd --list-all-zones

該命令將顯示包含所有可用區域設定的巨大列表。

更改區域目標

target 為未指定的傳入流量定義區域的預設行為。它可以設定為下列選項之一:  default ,  ACCEPT ,  REJECT ,和  DROP 。

要設定區域的目標,請使用  --zone 選項指定區域,並使用選項指定目標  --set-target 。

例如,要將  public 區域的目標更改為  DROP 您將執行:

sudo firewall-cmd --zone=public --set-target=DROP

將介面分配給其他區域

您可以為不同區域建立特定的規則集,併為其分配不同的介面。當您在計算機上有多個介面時,這特別有用。

要將介面分配給其他區域,請使用  --zone 選項指定區域,並使用選項指定介面  --change-interface 。

例如,以下命令將  eth1 介面分配給  work 區域:

sudo firewall-cmd --zone=work --change-interface=eth1

透過鍵入以下內容來驗證更改:

sudo firewall-cmd --get-active-zones
work   interfaces: eth1 public   interfaces: eth0

更改預設區域

要更改預設區域,請使用  --set-default-zone 選項,後跟要設為預設區域的名稱。

例如,要將預設區域更改為  home 您將執行以下命令:

sudo firewall-cmd --set-default-zone=home

使用以下命令驗證更改:

sudo firewall-cmd --get-default-zone
home

防火牆服務

使用防火牆,您可以基於稱為服務的預定義規則允許特定埠和/或源的流量。

要獲取所有預設可用服務的列表,請輸入:

sudo firewall-cmd --get-services

透過開啟  /usr/lib/firewalld/services 目錄中的相關 .xml 檔案,可以找到有關每個服務的更多資訊。例如, HTTP 服務的定義如下:

/usr/lib/firewalld/services/http.xml

<?xml version="1.0" encoding="utf-8"?> <service>   <short>WWW (HTTP)</short>   <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description>   <port protocol="tcp" port="80"/> </service>

要僅對當前會話(執行時配置)允許公共區域中的介面允許傳入的 HTTP 通訊(埠 80) ,請輸入:

sudo firewall-cmd --zone=public --add-service=http

如果要修改預設區域,則可以省略該  --zone 標誌。

要驗證是否已成功新增服務,請使用  --list-services 標誌:

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

如果要在重新啟動後將埠 80 保持開啟狀態,則需要再次鍵入相同的命令,但這一次帶有  --permanent 標誌:

sudo firewall-cmd --permanent --zone=public --add-service=http

使用  --list-services 和  --permanent 標記一起驗證您的更改:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

刪除服務的語法與新增服務時的語法相同。只需使用  --remove-service 標誌:

sudo firewall-cmd --zone=public --remove-service=http --permanent

上面的命令從公共區域永久配置中刪除  http 服務。

建立一個新的 FirewallD 服務

如前所述,預設服務儲存在  /usr/lib/firewalld/services 目錄中。建立新服務的最簡單方法是將現有服務檔案複製到  /etc/firewalld/services 目錄(該目錄是使用者建立的服務的位置)並修改檔案設定。

例如,要為 Plex Media Server 建立服務定義,可以使用 SSH 服務檔案:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

開啟新建立的  plexmediaserver.xml 檔案,然後在  <short> 和  <description> 標記中更改服務的簡稱和描述。您需要更改的最重要標籤是  port 標籤,該標籤定義了要開啟的埠號和協議。

在下面的示例中,我們開啟 UDP 埠  1900 和 TCP 埠  32400

編輯檔案:  /etc/firewalld/services/plexmediaserver.xml

<?xml version="1.0" encoding="utf-8"?> <service version="1.0"> <short>plexmediaserver</short> <description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description> <port protocol="udp" port="1900"/> <port protocol="tcp" port="32400"/> </service>

儲存檔案並重新載入 FirewallD 服務:

sudo firewall-cmd --reload

現在,您可以  plexmediaserver 像其他任何服務一樣在您的區域中使用該服務。

開啟埠和來源 IP

Firewalld 還允許您快速啟用來自受信任 IP 地址或特定埠上的所有流量,而無需建立服務定義。

來源 IP

要允許來自特定 IP 地址(或範圍)的所有傳入流量,請使用  --zone 選項指定區域,並使用  --add-source 選項指定源 IP。

例如,要允許來自  public 區域的 192.168.1.10 的所有傳入流量,請執行:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

使新規則持久化:

sudo firewall-cmd --runtime-to-permanent

使用以下命令驗證更改:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

刪除源 IP 的語法與新增源 IP 的語法相同,只需使用  --remove-source 選項:

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

開啟源埠

要允許給定埠上的所有傳入流量,請使用  --zone 選項指定區域,並使用  --add-port 選項指定埠和協議。

例如,要為當前會話在公共區域中開啟  8080 埠,請執行:

sudo firewall-cmd --zone=public --add-port=8080/tcp

該協議可以是  tcp ,  udp ,  sctp ,或  dccp 。

驗證更改:

sudo firewall-cmd --zone=public --list-ports
8080

如果重啟後還要埠保持開啟狀態,請透過使用  --permanent 標誌執行相同的命令或執行以下命令,將規則新增到永久設定中:

sudo firewall-cmd --runtime-to-permanent

刪除埠的語法與新增埠時的語法相同,只是使用  --remove-port 選項。

sudo firewall-cmd --zone=public --remove-port=8080/tcp

轉發埠

要將流量從一個埠轉發到另一個埠,請首先使用  --add-masquerade 選項啟用對所需區域的偽裝。例如,要啟用  external 區域的偽裝,請鍵入:

sudo firewall-cmd --zone=external --add-masquerade

將流量從一個埠轉發到相同 IP 地址上的另一個埠

在以下示例中,我們將流量從埠轉發  80 到  8080 同一伺服器上的埠:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

將流量轉發到另一個 IP 地址

在下面的例子中,我們從一個埠轉發流量  80 到埠  80 與伺服器 IP 地址  10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

將流量轉發到另一臺伺服器的其他埠上

在下面的例子中,我們從一個  80 埠轉發流量到 IP 地址為  10.10.10.2伺服器 的埠  8080 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

要使轉發規則持久化,請使用:

sudo firewall-cmd --runtime-to-permanent

結論

您已經瞭解瞭如何在 CentOS 8 系統上配置和管理防火牆服務。請確保允許系統正常執行所必需的所有傳入連線,同時限制所有不必要的連線。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25469263/viewspace-2724581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章