文、猛鬼小紀
一、防火牆知識概要
在現今網路連線設備中,防火牆(Firewall)已經是家家戶戶必備的工具之一。從內建防火牆的家用型IP分享器、無線路由器,至企業所使用的專業防火牆設備,沒有任何一種設備可以取代它的地位。
防火牆的種類,從其安裝型態可分為主機式防火牆(host-based firewall)、網路型防火牆(network-based firewall)。
若依其運作狀態來分類,亦可分成有態式防火牆(stateful firewall)、無態式防火牆(stateless firewall)。
若以運用於網路 OSI 模型的層級來看,有所謂的應用層防火牆(application firewall)、網路層防火牆(network firewall),就看所需要的功能與防禦緃深的規劃與安排。
本文所要提及的防火牆是 Red Hat Enterprise Linux 9上預設安裝的Firewalld防火牆服務。Firewalld防火牆服務,分類上雖然是屬於主機式防火牆,但其功能卻可以涵蓋部份網路型防火牆功能,就運作狀態而言,除了一般可作為單純的無態式防火牆,亦可以進行有態式防火牆的運作,針對網路封包的運行狀態,進行過濾,如果配合適當的軟體套件,亦可從網路層防火牆,一路晉升為應用層級的防火牆,可謂是窮人最佳的免費防火牆。
接下來,本文將從 Firewalld 服務的操作方式出發,進行簡單的網路層防火牆設定與配置。
二、Firewalld防火牆簡單操作
在設定防火牆之前,首先需要將 Red Hat Enterprise Linux 9安裝好,另外,在主機上需要準備兩張網路卡,一張網路卡對外連上網際網路,另一張則是對內連上內部網路,相關的設定,如下圖所示。
利用ip addr show這個指令,查看目前所有網路卡的設定,很顯然的,ens1這張網卡是對外連線至網際網路,而enp1s0這張網路卡則是連接內部網路,內部網路假設是使用192.168.1.0/24這個網段,而位於內部網路上的主機群,如果要利用這個防火牆對網際網路連線,將需要指定192.168.1.123這個IP位址為網路閘道,當然,這些網路相關的指令操作,通常也都只有root才有足夠的權限進行操作,一般的使用者身份是無法操作的。

接下來,可以利用systemctl這個系統服務管理指令,查詢firewalld防火牆服務的運作情況,如下圖所示:

另外,利用firewall-cmd這個指令,可以輕易地操作防火牆設定與查詢,例如:要查詢目前防火牆的設定,可以使用firewall-cmd --list-all這個指令參數組合,如下圖所示:

很明顯的,這裡有些項目是等一下會用到的,需要事前先解釋:
▶ public(active):
表示目前預設的防火牆規則區域(zone)是名為 public這個領域名稱。active表示其狀態為運作中。
▶ target: default:
表示這個區域是防火牆設定的預設區域,只要執行 firewall-cmd 這個指令沒有指定要使用哪個區域,就表示是針對這個區域進行設定。
▶ interfaces:
表示這個區域內的規則,可以套用在哪些網路卡上。主機上的每一張網路卡,只能加入到一個區域內,不可以跨多個區域。
▶ services:
表示允許哪些服務,可以進入該主機系統。
▶ ports:
表示開放哪些通訊埠可以進行通訊連結。
▶ masquerade:
表示是否開放 IP 偽裝的功能,這對於要實作 NAT(Network Address Translation,網路位址轉址)功能,十分重要。
▶ forward-ports:
表示有哪些通訊埠,可以轉送到指定的IP或是通訊埠。
了解這些簡單的操作之後,接下來就是要進行防火牆服務的規則設定。
三、Firewalld網路型防火牆基本設定
首先,先使用下列指令,將對外的網路卡 ens1,移動至專門處理對外連線的 external 區域,並且取消 external 上所有對外的服務通道:
▶ # firewall-cmd --change-interface=ens1 --zone=external
▶ # firewall-cmd --remove-service=ssh --zone=external
接著,我們指定 external 為預設的區域:
▶ #firewall-cmd --set-default-zone=external
結果如下圖所示:

接下來,再將enp1s0網路卡,移至 internal 這個區域內,專門用於處理內陪網路,並且開放ssh連線,可連入這一部防火牆,方便遠端管理與維護:
▶ # firewall-cmd --change-interface=enp1s0 --zone=internal
結果如下圖所示:

完成以上的設定之後,一個網路層的網路型防火牆,就這樣輕鬆的完成了。這裡會建議使用下列規則,來進行規則的儲存,方便在開機時,可直接導入:
▶ # firewall-cmd --runtime-to-permanent
接下來,就是要如何開通服務,將網路的流量導入至內部網路的站台。
😮:欸欸聽說有一門課程可以學習 Red Hat Enterprise Linux 9,能夠設定防火牆,增加安全性!
🤔:真的嗎?那也可以學到Red Hat Linux-RH294 和 AWS 雲端運算技能嗎?
😮:對啊!這門課程可以讓我們成為百大企業追逐的 Linux 人才!趕快填表領取限時優惠吧!
四、Firewalld防火牆設定規則
假設內部網路中,有一部主機位址是 192.168.1.30 為對外提供 Web 服務的站台,需要將網路流量從防火牆導入至該主機上,並且回程的流量也應該被允許。這樣的設定要求,可如下操作指令:
▶ # firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.30
▶ # firewall-cmd --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.30
以上的指令,是讓外部的流量,通過防火牆至指定的內部網路主機.而以下的指令,則是讓內部網路的主機通過防火牆,前往網際網路:
▶ firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o ens1 -j MASQUERADE
▶ [root@dlp ~]# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o ens1 -j ACCEPT
▶ [root@dlp ~]# firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i ens1 -o enp1s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
完成以上的項目操作,即可讓內部網路的Web站台,提供HTTP/HTTPS服務給網際網路使用者存取,並且擋掉其它意圖非法的連結通訊埠。
最後,再進行儲存規則的動作,以利開機時導入系統:
▶ # firewall-cmd --runtime-to-permanent
五、結語
就以上的設定流程而言,利用RHEL9要架設一個網路型防火牆,並不是件十分困難的事,只要對於網路概念有基礎,再加對於 RHEL9 有熟悉的觀念與操作技巧,均可輕鬆以對。
想要好好學好 Red Hat Enterprise Linux 9安全防護機制與相關的操作技巧,建議洽詢Red Hat官方授權教育訓練中心—聯成電腦教育訓練中心,有優良的環境、完整的訓練體制與經驗豐富的講師,不管再如何困難的資安知識,都可以輕易的迎刃而解,並且應用於日常。
FB粉絲團:https://www.facebook.com/lccnetzone
YouTube頻道:https://www.youtube.com/user/LccnetTaiwan
痞客邦Blog:http://lccnetvip.pixnet.net/blog

