周莉
(蘇州市職業大學計算機工程學院,江蘇 蘇州 215000)
互聯網的出現和普及為人們的生活和工作帶來了很多便利,但與此同時,網絡信息安全問題也頻繁出現,構建防火墻是構筑安全網絡的最基本手段之一,防火墻簡單易行、工作可靠、適應性強,正得到越來越廣泛的應用。Red Hat于2019年9月發布CentOS 8正式版,包含更大的可伸縮性和虛擬化特性,并全面改進系統資源分配和節能。在CentOS 8系統中,Fire?walld防火墻取代了iptables防火墻,Firewalld提供了支持網絡/防火墻區域定義網絡鏈接,以及接口安全等級的動態防火墻管理工具,支持IPv4、IPv6防火墻設置以及以太網橋接,并且擁有運行時配置和永久配置選項[1]。
計算機防火墻技術是計算機安全發展中必不可少的部分。在信息安全的基礎上,計算機防火墻技術能夠有效防止計算機網絡節點受到攻擊,從而避免數據被篡改與盜竊。在現有的計算機網絡安全中,防火墻技術能夠幫計算機與互聯網之間構建一道安全屏障,合理運用防火墻技術能夠保障計算機網絡正常安全運行,計算機防火墻技術能夠對計算機內部與外部運行的各個模塊進行安全控制,在內網與外網中發揮管控作用,有效地杜絕了計算機網絡中信息數據的混淆,從而為提高網絡安全性創造有利條件[2]。
Firewalld基于Linux Netfilter機制,也是CentOS 8 Stream默認的一款防火墻管理工具,它提供在特定防火墻區域定義接口安全等級和網絡鏈接的管理功能,也支持允許服務或者應用程序直接添加防火墻規則接口的功能。
Firewalld支持動態更新技術并引入了區域的概念,區域是firewalld預先準備的防火墻策略模板,區域(Zone)定義了網絡連接的可信等級,數據包要進入到內核必須通過這些zone中的一個、而不同的zone里定義的規則不一樣,即信任度不一樣,過濾的強度也不一樣。不同區域之間是對待數據包的默認行為不同。用戶可以根據不同的聯網場景選擇加入對應的區域,網絡管理員也可將網絡劃分成不同的區域,制定不同區域之間訪問控制策略來控制不同區域間傳送的數據流。可以根據網卡所連接的網絡安全性來判斷到底使用哪個zone,一張網卡同時只能綁定到一個zone。firewalld配置方法主要有3種:圖形化工具firewallconfig、命令行工具firewall-cmd和直接編輯xml文件。例如Web服務器不再使用默認端口80,而使用自定義的8080端口,可以通過service的配置文件進行修改:
#cp/usr/lib/firewalld/services/http.xml/etc/firewalld/services///復制模板
#vi/etc/firewalld/services/http.xml//編制配置文件
本文以中小型企業的防火墻部署為項目,分析中小型企業的網絡需求主要是內部網絡的普通主機能夠安全運行并安全地訪問Internet,系統管理員在內部網絡中對構建企業網站的Web服務器可安全訪問實現運維,企業的Web能夠服務器對外開放,企業的網絡結構和IP地址的分配對外保密,外部網絡主機不能隨意訪問企業網絡并無法得知企業的網絡結構和IP地址分配等信息。本文部署設計主要考慮以下幾個方面。
本文部署方案包括企業內網,企業DMZ區域和外網三種典型的網絡,DMZ中搭建一臺Web服務器代表企業官網,外網搭建一臺Web服務器代表Internet上的常見服務器,三個網絡通過網關相連接,網關上使用Firewalld架設企業防火墻,Firewalld選擇三個區域分別對應三個網絡,隔離區域、外部區域和信任區域。拓撲結構如圖1所示。隔離區域又可稱為非軍事訪問區,此區域內可公開訪問,可以有限地進入內部網絡,僅僅接收經過選擇的連接,可以在隔離區域中定義特定的服務才允許被外部訪問;外部區域為路由器啟用了偽裝功能的外部網,不能信任來自網絡的其他計算,只接收經過選擇的連接;信任區域允許所有網絡通信通過,是最被信任的,即使沒有設置任何服務,通信也是被允許的。

圖1 firewalld防火墻部署拓撲結構圖
管理員通過SSH進行管理,SSH為Secure Shell Client的縮寫,是一種基于傳輸層和應用層上的安全協議,由于SSH對遠程傳輸過程中的信息進行了數據加密,因此SSH可以解決數據在網絡上明文傳輸的問題,有效地避免數據在傳輸過程中被監聽或截取,客戶端可安全地遠程管理網絡設備或服務器。管理員通過SSH來遠程管理,通過切換SSH偵聽端口是保護Linux服務器上遠程登錄的一種簡單而有效方法[3],可將SSH的默認端口22改為30000。
在設置防火墻規則時考慮企業網絡的安全需求,主要包括禁止網絡上的主機ping防火墻,DMZ中的Web服務器拒絕ping,安裝SSL模塊,Web服務器只支持https訪問,過濾未加密的HTTP流量;內網主機通過網關訪問外網,同時網關防火墻對內網數據進行地址轉換,NAT是指為了實現內外網絡之間的通信而將IP數據報中的一個IP地址轉換為另一個IP地址的過程[4].NAT技術在客觀上屏蔽了企業內部網絡的真實IP地址,一定程度上保護了內部網絡不受到外部網絡的主動攻擊[5],CentOS 8中firewalld自動進行源地址轉換,將內網地址轉換為外網地址,實現隱藏內部IP的作用;firewalld也可以實現目的地址替換,當外網主機訪問DMZ中主機時,瀏覽器中輸入的IP地址是網關的外網地址,網關防火墻會將目標地址替換為DMZ中的Web服務器,從而實現隱藏DMZ中服務器IP地址的作用。
通過VMware Workstations工具搭建網絡環境,創建三個虛擬網絡,以模擬企業網絡環境,三個網絡通過網關相連,創建4臺虛擬機,安裝CentOS 8 Stream系統,其中作為網關的虛擬機是一臺三網卡主機,為這4臺虛擬機配置如表1所示的靜態IP地址。

表1 Firewalld防火墻部署主機配置表
在本實驗中使用yum軟件倉庫安裝軟件,yum安裝可以使用本地yum源或者網絡源,本地訪問CentOS官方網站速度較為緩慢,通過互聯網搜索得知國內較為常用的鏡像站[6]:mirrors.163.com,但為了保證yum倉庫源的穩定和可靠,采用配置本地yum倉庫源的方式解決問題,CentOS 8以上附帶2個軟件存儲庫:BaseOS和AppStream(應用程序流),其中BaseOS存儲庫由存在最小操作系統所需的必需軟件包組成,App?Stream包括其余的軟件包,這兩個軟件存儲庫存放在光盤根目錄的BaseOS和AppStream目錄中,為了保證需要的軟件包能正確安裝我們配置了兩個yum源,這兩部分內容你可以放到一個文件里,也可以分別放在兩個文件中,配置yum軟件倉庫的步驟如下。
第1步:使用【cd/etc/yum.repos.d/】命令進入yum軟件倉庫的配置文件目錄;
第2步:備份默認Yum配置文件,在修改配置文件之前,先備份要修改的文件;
第3步:使用【vim centos8.repo】命令創建一個名為centos8.repo的新配置文件,新建的文件必須以.repo為后綴,逐項寫入以下配置參數并保存退出:
[cs-media-BaseOS]#yum軟件倉庫唯一標識符,避免與其他倉庫沖突
name=BaseOS#yum軟件倉庫的名稱描述,存放最小操作系統所需的必需軟件
baseurl=file:///mnt/cdrom/BaseOS
//提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///),指定本地yum源
gpgcheck=0
enabled=1
[cs-media-AppStream]#yum軟件倉庫唯一標識符,避免與其他倉庫沖突
name=AppStream #yum軟件倉庫的名稱描述,其他軟件
baseurl=file:///mnt/cdrom/AppStream
//提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///),指定本地有
gpgcheck=0 #設置此源是否校驗文件,1為校驗,0為不校驗。
enabled=1#設置此源是否可用,1為可用,0為禁用
第4步:按配置參數的路徑掛載光盤,使用【mount/dev/cdrom//media/cdrom/】命令。掛載成功后可以通過【ls/mnt/】命令在/mnt目錄下看到光盤中的文件。
第5步:使用【yum list】命令查看當前的yum源。
在DMZ-Web主機上安裝Apache用以搭建Web服務器,安裝SSL模塊并強制要求使用HTTPS訪問Web,HTTPS是超文本傳輸協議HTTP和SSL/TLS協議的組合,它提供了web網站的安全通信需求,目前各大瀏覽器產商、搜索引擎公司以及相關研究組織的一系列項目與決策都推動著HTTPS的快速發展[7]。本實驗中將Apache和SSL設置開機啟動,編輯網站測試頁,在瀏覽器地址欄中輸入localhost或127.0.0.1測試Web服務器是否正常工作,SSH默認端口為22,更改SSH的監聽端口為30000,具體步驟如下。
首先,使用軟件倉庫安裝Apache服務器和SSL模塊,通過systemctl的enable設置Web服務器開機自啟動,使用systemclt命令啟動httpd服務,設置網站測試頁index.html的內容,確認SSL模塊已安裝正確并能正常使用。
# yum-y install httpd mod_ssl//安 裝httpd和mod_ssl
#systemctl start httpd//啟動httpd服務
#systemctl enable httpd//設置為開機自啟動
#vim/var/www/html/index.html//網站測試首頁
//apachectl-M|grep ssl#確定安裝的mod_ssl已經被啟用了
ssl_module(shared)
其次,SELinux相關設置。SELinux的全稱Secu?rity Enhance Linux,是一個集成在linux內核中的一個安全模塊,可以根據需要啟用或關閉它,SELinux是基于MAC強制訪問機制的安全模型,也就是一個進程對具體文件訪問權限是由SELinux安全策略庫文件中完成定義,當一個用戶運行一個程序訪問文件系統資源時,通過系統資源的上下文進行區分,只有進程主體的上下文與訪問對象的上下文匹配時,才能訪問此資源,它適用于應用服務要求較高的Linux環境,能夠防止黑客通過應用程序的漏洞來破壞操作系統環境[8]。SELinux在策略中允許SSH使用22號端口,本文將SSH的工作端口從22號端口改為30000號端口需要使用SELinux管理配置工具semanage來修改SE?Linux設置以允許SSH使用端口30000。
#yum provides semanage
#yum-y install policycoreutils-python//安 裝se?manage工具
# semanage port-l|grep ssh查看登記在SE?Linux中是否登記SSH端口
ssh_port_t tcp 22
//可知SELinux目前僅允許SSH使用22號端口
semanage port-a-t ssh_port_t-p tcp 30000
//在Selinux中設置允許SSH使用端口30000
semanage port-l|grep ssh//再次查看登記在SELinux中是否登記SSH端口
ssh_port_t tcp 30000,22
//在SELinux中已登記SSH使用30000號tcp端口
再次,修改配置文件/etc/ssh/sshd_config,設置SSH的工作端口;
# vim/etc/ssh/sshd_config #更改SSH的偵聽端口:
Port 30000//將改行前的注釋符號’#‘去掉,將SSH的偵聽端口改為30000
#systemctl restart sshd//重新啟動SSH服務
防火墻規則配置主要包括設置默認區域為dmz,開啟https服務,開放ssh所在的30000端口,拒絕ping,配置如下:
# firewall-cmd--set-default-zone=dmz//設置默認區域
#firewall-cmd--zone=dmz--add-service=https–permanent
//在DMZ區域上允許https服務通過
#firewall-cmd--zone=dmz--add-port=30000/tcp–permanent
//防火墻允許對tcp 30000端口的訪問通過
#firewall-cmd --add-icmp-block=echo-request--zone=dmz–permanent
//防火墻禁止ping命令通過
防火墻配置后,需要重新加載firewalld配置,并查看所有的配置是否生效,配置如下:
#firewall-cmd–reload
為網關主機添加三張網卡ens36、ens33和ens37,分別連接外網、內網和DMZ區域,在防火墻中設置三張網卡對應的區域并進行保存,配置如下:
#firewall-cmd--set-default-zone=external//設置默認區域為external
#firewall-cmd--change-interface=ens33--zone=trusted
//將ens33添加到external區域
#firewall-cmd--change-interface=ens37--zone=dmz//將ens37添加到dmz區域
#firewall-cmd--runtime-to-permanent//將當前配置保存到文件中
區域配置完成后,更改SSH的偵聽端口,設置Se?linux策略,并重啟服務,將新的SSH服務端口加入防火墻配置中,將原來定義的ssh服務規則從防火墻配置中刪除:
#firewall-cmd--zone=external--add-port=30000/tcp--permanent
//防火墻允許對tcp 30000端口的訪問通過
#firewall-cmd--zone=external--remove-service=ssh–permanent/
/在防火墻中將SSH服務使用的22號端口禁用
配置external區域禁止ping操作,重新加載防火墻配置,使所有的防火墻配置生效,配置如下:
#firewall-cmd--zone=external--add-icmp-block=echo-request–permanent
設置源地址替換,外網主機通過訪問HTTPS訪問網關地址,能夠訪問到DMZ中的Web服務器:
#firewall-cmd--zone=external--add-forwardport=port=443:proto=tcp:toaddr=192.168.31.252
//對網關外網網卡的443(HTTPS)的訪問重新定向到192.168.31.252
重新加載防火墻規則,核查規則是否都添加成功
#firewall-cmd--reload//重新加載
#firewall-cmd--list-all//顯示重新加載后的防火墻規則
在外網主機上使用yum工具安裝Web服務器和抓包工具wireshark,配置如下:
#yum install-y httpd//安裝Web服務器
#yum install-y wireshark//安裝抓包工具wire?shark
首先,內網主機在終端中通過SSH命令行訪問DMZ-Web,測試Web服務器是否正常工作;
#ssh-p30000 alice@192.168.31.252 #使用ssh命令登錄192.168.31.252的30000端口,用戶名為alice
alice@192.168.31.252's password:#輸入alice的密碼
hello,this is alice #登錄成功,可以執行文件傳輸、下載等多種服務
Activate the web console with:systemctl enable--now cockpit.socket
Last login:Thu Mar 24 08:59:42 2022 from 192.168.30.10
$exit
logout
Connection to 192.168.31.252 closed.
其次,在內網主機和外網主機上打開瀏覽器用http協議訪問web站點,此時失敗,之后改用https成功訪問,說明內網主機和外網主機必須使用HTTPS才能訪問DMZ-Web站點的部署目標已實現;
再次,在外網主機上打開瀏覽器用https訪問網關的外網地址,可以訪問到DMZ中的Web服務器,說明瀏覽器NAT目的地址成功;
最后,觀察網關NAT處理,在外網主機上安裝抓包軟件wireshark,啟動并選擇抓獲tcp報文,在內網主機上訪問外網web,通過wireshark抓獲的tcp報文分析可以看到,內網IP報文的源地址192.168.30.10替換為202.3.3.254,說明內網隱藏網絡架構的目標已實現。
綜上所述,在互聯網高速發展的時代,網絡安全的重要性日益突出,防火墻作為一項基本的網絡安全基礎得到越來越廣泛的應用,本文重點分析開源軟件CentOS 8平臺上的firewalld防火墻,結合中小企業典型應用提出部署方案,對Linux運維人員具有一定參考價值。