1. 程式人生 > >CentOS 7上安裝配置FirewallD防火牆詳解

CentOS 7上安裝配置FirewallD防火牆詳解

正確配置的防火牆是整個系統安全性中最重要的方面之一。

在本教程中,我們將向您展示如何在CentOS 7系統上使用FirewallD設定防火牆,並向您解釋基本的FirewallD概念。

CentOS 7上安裝配置FirewallD防火牆詳解

必要條件

在開始本教程之前,請確保使用具有sudo許可權的使用者帳戶或root使用者登入伺服器。最佳做法是將管理命令作為sudo使用者而不是root使用者執行,如果您的CentOS系統上沒有sudo使用者,則可以按照這些說明建立一個。

Firewalld基本概念

FirewallD使用區域和服務的概念,而不是iptables鏈和規則。根據您要配置的區域和服務,您可以控制允許或禁止進出系統的流量。

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

Firewalld區域

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

  • Bellow是FirewallD提供的區域,根據區域的信任級別從不信任到可信:
  • drop:刪除所有傳入連線而不發出任何通知。僅允許傳出連線。
  • block:所有傳入連線都被拒絕,其中包含用於IPv4的icmp-host-prohibited訊息和用於IPv6n的icmp6-adm-prohibited。僅允許傳出連線。
  • 公眾:用於不受信任的公共場所。您不信任網路上的其他計算機,但您可以允許選定的傳入連線。
  • external:用於在系統充當閘道器或路由器時啟用NAT偽裝的外部網路。僅允許選定的傳入連線。
  • internal:用於在系統充當閘道器或路由器時在內部網路上使用。網路上的其他系統通常是可信的。僅允許選定的傳入連線。
  • dmz:用於位於非軍事區的計算機,該計算機對網路其餘部分的訪問許可權有限。僅允許選定的傳入連線。
  • 工作:用於工作機器。網路上的其他計算機通常是可信的。僅允許選定的傳入連線。
  • home:用於家用機器。網路上的其他計算機通常是可信的。僅允許選定的傳入連線。
  • trusted:接受所有網路連線。信任網路中的所有計算機。

防火牆服務

Firewalld服務是在區域內應用的預定義規則,並定義必要的設定以允許特定服務的傳入流量。

Firewalld執行時和永久設定

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

執行時配置是實際執行的配置,並且在重新啟動時不會持久。 當Firewalld服務啟動時,它會載入永久配置,從而成為執行時配置。

預設情況下,使用firewall-cmd實用程式更改Firewalld配置時,更改將應用於執行時配置,以使更改成為永久性,您需要使用--permanent標誌。

安裝並啟用FirewallD

01、安裝FirewallD

預設情況下,Firewalld安裝在CentOS 7上,但如果系統上未安裝,則可以通過鍵入以下命令安裝軟體包:

sudo yum install firewalld

02、檢查防火牆狀態。

預設情況下禁用Firewalld服務。 您可以使用以下命令檢查防火牆狀態

sudo firewall-cmd --state

如果您剛剛安裝或從未啟用過,則該命令將列印不執行,否則您將看到正在執行。

03、啟用FirewallD

要啟動FirewallD服務並在引導型別上啟用它:

sudo systemctl start firewalld
sudo systemctl enable firewalld

如下圖:

如何在CentOS 7上安裝配置FirewallD防火牆詳解

使用Firewalld區域

首次啟用FirewallD服務後,公共區域將設定為預設區域。 您可以鍵入以下內容來檢視預設區域:

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

輸出:

public
  interfaces: ens33

上面的輸出告訴我們,介面ens33分配給public區域。

您可以使用以下方式列印區域配置設定:

sudo firewall-cmd --zone=public --list-all

輸出:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: ssh dhcpv6-client
  ports: 3389/tcp 21/tcp 60000-65535/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

以上命令截圖如下:

如何在CentOS 7上安裝配置FirewallD防火牆詳解

從上面的輸出中,我們可以看到公共區域處於活動狀態並設定為預設值,由ens33介面使用。還允許與DHCP客戶端和SSH相關的連線。

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

sudo firewall-cmd --list-all-zones

該命令將列印一個巨大的列表,將所有可用區域的設定。

如下圖:

如何在CentOS 7上安裝配置FirewallD防火牆詳解

更改介面區域

您可以使用--zone標誌結合--change-interface標誌輕鬆更改介面區域。 以下命令將eth1介面分配給工作區:

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

開放埠或服務

使用FirewallD,您可以根據稱為服務的預定義規則允許特定埠的流量。

要獲取所有預設可用服務型別的列表:

sudo firewall-cmd --get-services

如何在CentOS 7上安裝配置FirewallD防火牆

您可以通過在/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而不是--add-service標誌:

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

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

如果您正在執行沒有適當服務的Plex Media Server等應用程式,該怎麼辦?

在這種情況下,您有兩種選擇。 您可以開啟相應的埠或定義新的FirewallD服務。

例如,Plex伺服器偵聽埠32400並使用TCP,使用--add-port =標誌開啟當前會話的公共區域中的埠:

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

協議可以是tcp或udp。

要驗證埠是否已成功新增,請使用--list-ports標誌:

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

32400/tcp

要在重新啟動後保持埠32400開啟,請通過使用--permanent標誌執行相同的命令將規則新增到永久設定。

刪除埠的語法與新增埠時的語法相同。 只需使用--remove-port而不是--add-port標誌。

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

建立新的FirewallD服務

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

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

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

開啟新建立的plexmediaserver.xml檔案,並在<short>和<description>標記內更改服務的短名稱和描述。 您需要更改的最重要標記是埠標記,用於定義要開啟的埠號和協議。 在以下示例中,我們將開啟1900個UDP和32400個TCP埠。

/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服務,與任何其他服務相同。

使用Firewalld轉發埠

要將流量從一個埠轉發到另一個埠或地址,請首先使用--add-masquerade開關為所需區域啟用偽裝。 例如,要為外部區域型別啟用偽裝:

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

在同一伺服器上將流量從一個埠轉發到另一個埠

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

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

將流量轉發到其他伺服器

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

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

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

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

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

如果你想使前鋒永久性只是附加--permanent標誌。

使用FirewallD建立規則集

在以下示例中,我們將向您展示如果您執行Web伺服器時如何配置防火牆。 我們假設您的伺服器只有一個介面eth0,並且您希望僅在SSH,HTTP和HTTPS埠上允許傳入流量。

01、將預設區域更改為dmz

我們將使用dmz(非軍事化或隔離區)區域,因為預設情況下它只允許SSH流量。 要將預設區域更改為dmz並將其分配給eth0介面,請執行以下命令:

sudo firewall-cmd --set-default-zone=dmz
sudo firewall-cmd --zone=dmz --add-interface=eth0

02、開啟HTTP和HTTPS埠:

要開啟HTTP和HTTPS埠,請向dmz區域新增永久服務規則:

sudo firewall-cmd --permanent --zone=dmz --add-service=http
sudo firewall-cmd --permanent --zone=dmz --add-service=https

通過重新載入防火牆立即使更改生效:

03、驗證更改

要檢查dmz區域配置設定,請鍵入:

sudo firewall-cmd --zone=dmz --list-all

輸出:

dmz (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

上面的輸出告訴我們dmz是預設區域,應用於eth0介面,ssh(22)http(80)和https(443)埠開啟。

總結

您已經學習瞭如何在CentOS系統上配置和管理FirewallD服務。

確保允許系統正常執行所需的所有傳入連線,同時限制所有不必要的連線。