如何使用 FirewallD 配置防火牆

防火牆 是一個防火牆管理工具,充當 Linux 內核的 netfilter 框架的前端。 它是功能強大的基於區域的防火牆,可監控網絡流量並應用一組定義的規則來控制傳入/傳出流量。

Firewalld 是用 Python 編寫的,是 systemd 的一部分。 它支持 IPv4 和 IPv6 網絡。

主要好處是無需重啟服務即可完成更改,並且可以輕鬆管理 D-Bus 接口配置。

在本教程中,我們將學習如何 在 Linux 上配置 Firewalld 及其基本概念。

基本概念

Firewalld 包含兩層,命名為 總線 層。 核心層處理配置和後端。 D-Bus 層負責更改和創建防火牆配置。

防火牆支持 區域服務. 區域是一組預定義的規則,根據連接到服務器的網絡接口的信任級別,管理應該允許服務器的流量類型。 這意味著您可以將網絡接口分配給區域。 服務可以配置端口、模塊和目標地址。

firewall-cmd 是用於管理運行時和永久配置的命令行工具。

預定義的防火牆區域

默認區域 保存在名為 /usr/lib/firewalld/zones/ 的目錄中。 以下是 Firewalld 根據各種信任級別提供的一些預定義區域 – 從受信任到不受信任。

值得信賴:此區域接受所有連接並信任網絡上的所有計算機。

上市: 在不受信任的公共區域工作。 對其他計算機的信任度最低,但仍然可以允許選定的入站連接。

降低: 所有入站或入站流量都將被丟棄。 只允許出站流量。

外部的:當您的系統充當路由器並啟用 NAT 偽裝時,在外部網絡上實施。 只允許選定的入站連接。

內部的: 僅在內部網絡上實現,您的系統充當啟用了 NAT 偽裝的路由器。 其他 PC 是受信任的,只有少數入站連接被授予訪問權限。

堵塞:阻止區域拒絕所有傳入連接,其中包含 IPv4 的 icmp-host-prohibited 消息和 IPv6n 的 icmp6-adm-prohibited 消息。 在這裡,只允許傳出連接。

DMZ: 用於隔離區 (DMZ) 上的系統或 PC,對計算機網絡上的其餘系統的訪問受限。 默認情況下,它只允許 SSH 流量。

工作:工作區是為工作系統或 PC 實現的。 網絡上的所有其他計算機都有一般級別的信任,並且只允許選定的入站連接。

家: 家庭區是家庭系統使用的,和工作區一樣,一般都是信任所有的PC,只允許選定的傳入連接。

防火牆運行時和永久設置

實際運行配置是運行時配置。 它是暫時的,不會在重新啟動後繼續存在。 服務器重新啟動後,Firewalld 會加載永久配置,然後將其轉換為運行時配置。

當對 Firewalld 配置進行更改時,它們會直接應用於運行時配置。 要保持更改,請調用 --permanent 選項。

安裝和啟用 Firewalld

Firewalld 在 Red Hat、CentOS、 Fedora,Suse Linux。 在 Debian/Ubuntu 上,它在包存儲庫中可用。

紅帽/CentOS

如果發現沒有安裝 firewalld,請通過運行以下命令進行安裝:

$ sudo yum install firewalld

Debian/Ubuntu

$ sudo apt install firewalld

安裝後,可以驗證狀態:

$ sudo systemctl status firewalld

如果 Firewalld 已啟動並正在運行,輸出將指示活動(正在運行)。

或者,可以通過以下方式確認運行狀態:

$ sudo firewall-cmd state

安裝後,通過運行以下命令啟動並啟用 Firewalld:

$ sudo systemctl start firewalld

在系統啟動時啟用 Firewalld,鍵入:

$ sudo systemctl enable firewalld

要暫時停止 Firewalld,請鍵入:

$ sudo systemctl stop firewalld

要禁用 Firewalld 在啟動時啟動,請鍵入:

$ sudo systemctl disable firewalld

處理防火牆區域

讓我們來看看如何處理 Firewalld 區域。

1. 默認情況下,公共區域是默認的 Firewalld 區域。 要確認這一點,請執行以下命令:

$ sudo firewall-cmd --get-default-zone

輸出:

public

2. 要獲得所有區域的概覽,請運行以下命令:

$ sudo firewall-cmd --get-zones

這將列出所有區域。

輸出:

block dmz drop external home internal public trusted work

3. 默認情況下,網絡接口通常連接到默認區域。 要驗證網絡接口正在使用的區域,請運行​​以下命令。

$ sudo firewall-cmd --get-active-zones

在這種情況下,我有一個活動的網絡接口 – enp0s3 – 分配給默認區域。

列出分配給接口的 firewalld 區域

4. 要顯示區域的所有配置,

要查看公共區域的配置,請鍵入:

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

要顯示默認區域的概述,請鍵入:

$ sudo firewall-cmd --list-all

5. 要列出所有 Firewalld 區域的配置,請鍵入:

$ sudo firewall-cmd --list-all-zones

更改默認區域

分配給所有網絡接口的默認區域是 public. 您可以將其設置為不同的區域。

6. 要將默認區域更改為另一個區域,請鍵入:

$ sudo firewall-cmd --set-default-zone=trusted

在這裡,我們將默認區域更改為 trusted 區。

更改分配給接口的區域

要將網絡接口的區域更改為另一個使用 --zone 選項。

7. 更改界面區域 enp0s3trusted, 類型:

$ sudo firewall-cmd --zone=home --change-interface=enp0s3

防火牆服務

Firewalld 服務文件位於 /usr/lib/firewalld/services xml 文件格式的路徑。 有數百個,使用 ls 命令列出。

$ ls /usr/lib/firewalld/services

為了 example MongoDB 服務文件需要:

$ sudo vim /usr/lib/firewalld/services/mongodb.xml

MongoDB xml 服務文件MongoDB xml 服務文件

默認情況下,防火牆允許 dhcp-client 和 ssh 服務。 從輸出中,請注意 https 也已被允許。

要創建新的 Firewalld 服務,只需複制現有的服務文件並指定新的服務名稱。 然後定義那個 xml 文件。

防火牆最廣泛使用的功能之一是打開端口並允許通過服務器。 Firewalld 有預定義的服務。

8. 要顯示所有服務,請鍵入:

$ sudo firewall-cmd --get-services

9. 允許入站流量

要允許 mssql 服務的入站流量,請鍵入:

$ sudo firewall-cmd --zone=public --add-service=mssql

10. 要驗證添加的服務:

$ sudo firewall-cmd --zone=public --list-services

輸出:

dhcpv6-client mssql ssh

11. 要在重新啟動後保持更改,請調用 --permanent 選項如下。

$ sudo firewall-cmd --zone=public --add-service=https --permanent

12. 要使更改生效,請重新加載 firewalld

$ sudo firewall-cmd --reload

13. 要從防火牆中刪除服務,請使用 --remove 選項

$ sudo firewall-cmd --zone=public --remove-service=https --permanent

從 Firewalld 配置中刪除服務從 Firewalld 配置中刪除服務

上述命令從公共區域中永久刪除 HTTPS 服務。

14. 打開firewalld上的端口

例如,允許用戶遠程連接到遠程系統桌面的 Xrdp 服務與 TCP 端口 3389 相關聯。

要在公共區域打開端口,請鍵入:

$ sudo firewall-cmd --zone=public --add-port=3389/tcp

允許端口跨防火牆配置打開一個端口

不要忘記重新加載 Firewalld 以使更改生效。

使用 Firewalld 進行端口轉發

15. 為公共區域啟用偽裝

要將流量從一個端口轉發到下一個端口或地址,首先通過調用 --add-masquerade 選項。

$ sudo firewall-cmd --zone=public --add-masquerade

16. 將流量從一個端口轉發到同一服務器上的另一個端口

以這樣一種方式配置 Firewalld,將到達某個端口的傳入流量重定向到同一服務器上的另一個端口。

要將到達端口 80 的流量轉發到公共區域上的端口 6000,請鍵入:

$ sudo firewall-cmd --zone=public--add-forward-port=port=80:proto=tcp:toport=6000

17. 將流量轉發到另一台服務器上的不同端口

或者,從一個端口傳遞的流量可以重定向到位於不同服務器上的不同端口。

要將流量通過端口 80 重定向到另一台 IP 地址為 192.168.10.10 的服務器上的端口 8080,請鍵入:

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

設置規則以管理傳入流量

允許來自特定來源的流量傳入流量使用 --add-source 選項。

要允許來自受信任區域中的 192.168.10.0/24 的所有傳入流量,請鍵入:

$ sudo firewall-cmd --zone=trusted --add-source=192.168.10.0/24 --permanent

創建一個新區域

您可以創建自己的區域並添加規則集。 大多數情況下,預定義的區域就足夠了。 讓我們為 Web 服務器創建一個新區域並允許特定的服務/接口。

創建一個名為 webzone 的新區域:

$ sudo firewall-cmd --permanent --new-zone=webzone

通過列出永久區域進行驗證,鍵入:

$ sudo firewall-cmd --permanent --get-zones

輸出:

block dmz drop external home internal public trusted webzone work

要有效進入活動配置,請鍵入:

$ sudo firewall-cmd --reload

要在 webzone 上打開 ssh、http、https 服務並分配接口,請運行以下命令:

$ sudo firewall-cmd --zone=webzone --add-service=ssh
$ sudo firewall-cmd --zone=webzone --add-service=http
$ sudo firewall-cmd --zone=webzone --add-service=https
$ sudo firewall-cmd --zone=webzone --add-interface=eth0

要顯示 webzone 的配置,請鍵入:

$ sudo firewall-cmd --zone=webzone --list-all

輸出:

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

豐富的規則

豐富的規則有助於設置更複雜的防火牆規則。

例如,要啟用對源地址 ip 地址和特定端口的訪問,請鍵入:

$ sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="23.92.31.51/32" port port=21 protocol="tcp" accept"

概括

在本教程中,我們學習瞭如何在 Linux 上配置 Firewalld 及其基本概念。

如果您有任何反饋和建議,請在下方評論。