2021-05-12 14:32:11
CentOS 7上安裝設定FirewallD防火牆詳解
正確設定的防火牆是整個系統安全性中最重要的方面之一。
FirewallD是一個完整的防火牆解決方案,用於管理系統的iptables規則,並提供用於對其進行操作的D-Bus介面。 從CentOS 7開始,FirewallD將替換iptables為預設的防火牆管理工具。
在本教學中,我們將向您展示如何在CentOS 7系統上使用FirewallD設定防火牆,並向您解釋基本的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
如下圖:
使用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:
以上命令截圖如下:
從上面的輸出中,我們可以看到公共區域處於活動狀態並設定為預設值,由ens33介面使用。還允許與DHCP用戶端和SSH相關的連線。
如果要檢查所有可用區域的設定,請鍵入:
sudo firewall-cmd --list-all-zones
該命令將列印一個巨大的列表,將所有可用區域的設定。
如下圖:
更改介面區域
您可以使用--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
您可以通過在/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服務。
確保允許系統正常執行所需的所有傳入連線,同時限制所有不必要的連線。
相關文章