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

轉載:https://www.linuxidc.com/Linux/2018-11/155155.htm

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

FirewallD是一個完整的防火牆解決方案,用於管理系統的iptables規則,並提供用於對其進行操作的D-Bus接口。 從CentOS 7開始,FirewallD將替換iptables爲默認的防火牆管理工具。

在本教程中,我們將向您展示如何在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等應用程序,該怎麼辦?

【Plex Media Server進入Ubuntu和其他Linux發行版的Snap生態應用 見 https://www.linuxidc.com/Linux/2018-10/154783.htm

在這種情況下,您有兩種選擇。 您可以打開相應的端口或定義新的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服務。

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

轉載:https://www.linuxidc.com/Linux/2018-11/155155.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章