【我的Linux,我做主!】Linux防火牆核心概念全面解讀

目錄:
(一)tcpwraps的配置
(二)Firewalld的概念
(三)配置防火牆
(四)使用man firewalld.richlanguage


衆所周知,相較於企業內網,外部的公網環境更加惡劣,罪惡叢生。在公網與企業內網之間充當保護屏障的防火牆雖然有軟件和硬件之分,但主要功能都是依據策略對穿越防火牆自身的流量進行過濾。防火牆策略可以基於流量的源地址、目的地址、端口號、協議、應用等信息來定製,然後防火牆使用預先定製的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。這樣一來,就可以保證僅有合法的流量在企業內網和外部公網之間流動了。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(一)tcpwraps的配置
(1.1)在RHEL 7系統中有多種防火牆,其中一種是tcpwraps。Tcpwraps主要涉及到兩個配置文件:/etc/hosts.allow文件和/etc/hosts.deny配置文件。在配置文件中的配置語法主要爲:“daemon : 客戶端”,例如在我們系統中有sshd服務,當這個服務運行的時候,本質上是有一個程序在後臺一直在運行(圖1-3),如果在hosts.allow文件中進行配置,那麼就是允許指定的客戶端訪問這個服務,如果在hosts.deny文件中進行配置,那麼就是不允許指定的客戶端訪問這個服務。其中我們在指定客戶端的時候,如果是填寫子網掩碼,是不支持直接寫/24的表示方法的,必須要完整的寫成/255.255.255.0的表示方法(圖1-2)。
# ps aux | grep -v grep | grep sshd
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.2)接着我們看一下tcpwraps的匹配規則,首先到hosts.allow裏去匹配,如果匹配成功了則系統允許通過這個匹配的地址訪問,此後就不再到hosts.deny裏去匹配了;如果在hosts.allow裏沒有匹配成功,則纔會到hosts.deny裏去匹配,如果在hosts.deny裏匹配成功了,則系統會拒絕這個匹配的地址訪問;如果在hosts.deny裏也沒有匹配成功,則系統默認是允許通過這個地址進行訪問的,和沒有指定這個條目的效果是一致的。
(1.3)默認情況下,在沒有設置任何tcpwraps規則時,vms002主機是可以正常的使用ssh服務連接到vms001主機的。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.4)我們在vms001主機的hosts.allow中配置允許192.168.26.0網段中的所有主機可以訪問vms001主機的ssh服務,此時我們發現vms002主機仍然是可以訪問vms001主機的ssh服務的。
注意:hosts.allow配置文件中修改的條目在修改完後是立即自動生效的
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.5)我們在vms001主機的/etc/hosts.allow配置文件和/etc/hosts.deny配置文件中都添加上允許192.168.26.102主機的條目,此時由於系統中先通過了hosts.allow配置文件中的條目,所以hosts.deny配置文件中的條目便不會再執行了,所以vms002主機是可以正常的訪問vms001主機的ssh服務的。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.6)接着我們在vms001主機的/etc/hosts.allow配置文件中設置允許192.168.26.即26.0網段中所有的主機都允許通過,在/etc/hosts.deny配置文件中設置不允許192.168.26.102主機,此時由於是先執行了hosts.allow文件的比對,再執行hosts.deny文件的比對,所以vms002主機仍然是可以正常的訪問vms001主機的ssh服務的。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.7)下面的一種情況是,我們在vms001主機的/etc/hosts.allow配置文件中設置允許192.168.26.0網段中所有的主機,但是除了192.168.26.102,在/etc/hosts.deny配置文件中沒有做任何的配置,此時雖然排除了192.168.26.102主機允許通過,但是系統默認也是允許通過,所以此時vms002主機仍然是可以正常的訪問vms001主機的ssh服務的(圖1-9)。而當我們在/etc/hosts.deny配置文件中設置了192.168.26.102主機時,此時vms002主機就不可以訪問vms001主機的ssh服務了(圖1-10和圖1-11)。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.8)一般我們爲了保證安全性,在/etc/hosts.allow文件中指定了可以訪問的主機後,同時也應該在/etc/hosts.deny文件中指定其他的所有主機都不能訪問,從而提高系統的安全。此時我們在vms002主機上仍然可以正常的登錄到vms001主機的ssh服務,但是其他IP地址的主機就無法登錄vms001主機的ssh服務了。此時我們如果希望其他的主機也能夠訪問到vms001主機的ssh服務,可以先登錄到vms002主機,再通過vms002主機跳板登錄到vms001主機,此時vms002主機便實現了“堡壘機”的作用。
在/etc/hosts.allow中配置:
# sshd : 192.168.26.102/255.255.255.0
在/etc/hosts.deny中配置:
# sshd : ALL
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(1.9)tcpwraps可以很好的進行訪問控制的作用,我們使用ldd命令,可以查看tcpwraps是可以對sshd服務進行訪問控制的(圖1-14);我們安裝好vsftpd服務後,使用ldd命令查看,發現tcpwraps也是可以對vsftpd服務進行訪問控制的(圖1-15);安裝完httpd服務後發現,tcpwraps並不能對httpd服務進行訪問控制,因爲httpd服務並沒有鏈接到tcpwraps模塊(圖1-16)。
注意:如果我們想要知道關於hosts allow更詳細的用法,可以使用# man hosts.allow進行查詢。
# ldd which sshd | grep wrap
# yum install vsftpd -y
# ldd which vsftpd | grep wrap
# yum install httpd -y
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(二)Firewalld的概念
(2.1)在RHEL 7系列的系統中,firewalld防火牆取代了iptables防火牆。對於接觸Linux系統比較早或學習過RHEL 6系統的讀者來說,當他們發現曾經掌握的知識在RHEL 7中不再適用,需要全新學習firewalld時,難免會有牴觸心理。其實,iptables與firewalld都不是防火牆的真面目,它們都只是用來定義防火牆策略的的防火牆管理工具而已,或者說,它們只是一種服務。iptables服務會把配置好的防火牆策略交給內核層面的netfilter網絡過濾器來處理,而firewalld服務則是把配置好的防火牆策略交給內核層面的nftables包過濾框架來處理。換句話說,當前在Linux系統中其實存在多個防火牆管理工具,旨在方便運維人員管理Linux系統中的防火牆策略,我們只需要配置妥當其中的一個就足夠了。雖然這些工具各有優劣,但它們在防火牆策略的配置思路上是保持一致的。大家只要在多個防火牆管理工具中選擇一款並將其學透,就足以滿足日常的工作需求了。
(2.2)在RHEL 7系統中是同時存在多個防火牆的,例如firewalld、iptables、ebtables、ipv6tables等,但是RHEL 7系統默認是使用firewalld防火牆的。我們在使用Firewalld防火牆主要可以通過圖形化界面和命令行這兩種方式來進行配置,此處我們使用兩種方式配合使用。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(三)配置防火牆
(3.1)通過圖形化的界面我們發現,在區域部分展示的是防火牆所有的區域(zone)。在命令行,我們通過get-zones可以獲得防火牆所有區域的信息(圖1-19)。
# firewall-config &
# firewall-cmd --get-zones
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.2)我們知道每個網卡都會需要和某個zone進行關聯,如果某網卡沒有和任何的zone關聯,則會使用默認的zone,通過圖形化界面我們可以知道,默認的zone是trusted,默認情況下所有的數據包都是允許通過的。
# firewall-cmd --get-default-zone
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.3)而如果我們想修改防火牆的默認區域,可以通過“選項”--“改變默認區域”操作(圖1-22和圖1-23)。如果我們想要通過命令行的方式進行修改,則可以通過set-default-zone的參數進行設置,可以設置默認的區域爲public(圖1-24)
# firewall-cmd --set-default-zone=public
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.4)默認情況下,所有的網卡都是和默認的zone進行關聯的,此時我們默認的zone是public,所以網卡eno16777728顯示是和public關聯的;接着我們嘗試將默認的zone修改爲trusted,可以發現此時網卡eno16777728也會自動和修改爲默認zone的trusted進行關聯。
# firewall-cmd --get-zone-of-interface=eno16777728
# firewall-cmd --set-default-zone=trusted
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.5)如果我們想將默認的public區域中的接口網卡eno16777728更改爲和home區域的zone進行關聯,此時如果我們直接在home區域添加eno16777728網卡,那麼系統會彈出區域衝突的信息(圖1-26)。由於每張網卡只能和一個區域進行關聯,所以此時我們應該先將eno16777728從public區域中移除,然後再添加至home區域中,此時我們通過圖形化界面便可以正常的將網卡和home區域進行關聯了(圖1-27和圖1-28)。
# firewall-cmd --remove-interface=eno16777728---從public區域中移除網卡
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.6)如果我們使用remove-interface參數從區域中刪除網卡時,是從默認的區域中刪除網卡的,此時防火牆默認的區域是public,但是網卡關聯的是在home區域中,所以我們在刪除時也需要指定區域。如果我們使用add-interface添加eno16777728網卡,沒有指定區域時,那麼系統會在默認的區域public中添加網卡。
# firewall-cmd --remove-interface=eno16777728 --zone=home
# firewall-cmd --add-interface=eno16777728
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.7)現在我們的網卡eno16777728是在public區域中,如果我們想將網卡修改到其他的區域的zone中則可以使用change-interface,例如我們將網卡直接修改到home區域中。
# firewall-cmd --change-interface=eno16777728 --zone=home---將網卡直接修改到home區域中
# firewall-cmd --get-zone-of-interface=eno16777728
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.8)現在我們仍然設置網卡eno16777728是在public區域中,首先我們將httpd服務啓動起來,並設置主頁信息,此時我們在vms002主機上嘗試登錄vms001主機的主頁發現無法登錄(圖1-32)。接着我們在public區域中勾選http服務可以通過,此時便可以正常的登錄到vms001的主頁了(圖1-34)。接着我們通過命令行的方式實現,首先通過get-services獲取系統中所有的服務(圖1-35),接着我們查詢默認的public區域中http服務是否有勾選,並使用add-service添加http服務,使用remove-service去除http服務(圖1-36)。
# firewall-cmd --get-services | grep http---獲取系統中所有的服務並查詢http服務是否有包含
# firewall-cmd --query-service=http---查詢http服務是否有勾選
# firewall-cmd --add-service=http---將默認區域的http服務勾選
# firewall-cmd --remove-service=http---將默認區域的http服務去除
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.9)以上的防火牆的設置都只是臨時生效,如果將防火牆的服務重啓後,會發現http服務便沒有勾選了,此時就無法正常的訪問http服務了。通過圖形化界面設置,我們可以選擇永久生效,然後在public區域中將http服務勾選,此時防火牆服務重啓後,也仍然可以正常的訪問http服務了(圖1-38)。如果我們只是在永久配置中勾選了http服務,但是運行時配置中並沒有勾選http服務,由於永久配置必須要重啓後纔會生效,所以此時當前運行的環境中並沒有生效允許訪問http服務,通過命令行的方式,我們應該通過加上“--permanent”寫入持久態的參數處理(圖1-39)。
# firewall-cmd --query-service=http
# systemctl restart firewalld.service---將服務重啓一下
# firewall-cmd --add-service=http---設置防火牆允許http服務訪問
# firewall-cmd --add-service=http --permanent---將配置寫入持久態
# firewall-cmd --remove-service=http---刪除防火牆允許http服務訪問
# firewall-cmd --remove-service=http --permanent---將配置寫入持久態
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.10)有時候我們可能會使用非標準的端口去運行服務,第二個我們來了解“端口”,例如使用808端口運行http服務,此時我們在服務配置中勾上http會發現也是仍然不能正常的訪問到vms001主機的主頁。我們首先在http服務中開放808端口,並修改好端口的上下文,然後將httpd服務重啓後,我們會發現由於防火牆並沒有設置808端口允許通過,所以此時仍然是無法訪問vms001主頁的(圖1-42),此時我們可以使用端口解決這個問題,我們在端口中添加808端口,使用的協議是tcp,這樣我們便可以正常的訪問到vms001主機在808端口開放的主頁了(圖1-44)。接着我們還可以使用命令行的方式實現添加808端口的操作,同時要記住添加端口完畢後需要添加“--permanent”參數,可以實現配置在重啓後也仍然生效的效果。
# vim /etc/httpd/conf/httpd.conf
# vim /etc/ssh/sshd_config ---可以使用ssh配置文件中的修改端口上下文的模板
# semanage port -a -t http_port_t -p tcp 808---更改端口的上下文
# systemctl restart httpd.service
# firewall-cmd --query-port=808/tcp---查詢808端口在防火牆中是否有開啓
# firewall-cmd --remove-port=808/tcp---刪除防火牆中開啓的808端口,刪除端口
# firewall-cmd --add-port=808/tcp---添加808端口
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.11)第三個我們來了解“ICMP過濾器”,其中ICMP表示的是互聯網控制報文協議,主要用於在聯網的計算機之間發送出錯信息,但也發送類似ping請求及迴應等信息。此處ICMP過濾器和我們遇到的第一個“服務”在表示的時候是相反的,此處ICMP類型中的選項,如果勾上表示的是不允許通過,不打勾代表的是允許通過,而在“服務”中,勾上表示的是服務允許通過,而不打勾代表的是不允許通過。我們在ICMP過濾器中勾選上“echo-request”,此時vms001主機就不允許其他主機對自己發送ping的請求了,我們在vms002主機上向vms001主機發送ping的請求,發現並不能ping成功(圖1-47)。接着我們再使用命令行的方式操作,使用add-icmp-block參數,此時就可以實現禁止其他主機ping當前vms001主機的要求了(圖1-48)。不過需要注意的是有時候設置了ICMP後並不能禁止Windows類型的客戶端的ping請求,此時我們可以在內核參數中進行相關的設置,從而實現禁ping的需求,/proc/sys/net/ipv4/目錄下的icmp_echo_ignore_all內核參數默認是0,表示的允許其他主機ping的請求,此時任何類型的客戶端都是無法ping通vms001主機的(圖1-49和圖1-50)
# firewall-cmd --get-icmptypes---查詢當前防火牆中ICMP所有的類型
# firewall-cmd --add-icmp-block=echo-request---勾選ICMP請求的選項,拒絕其他機器的訪問禁ping
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.12)第四個我們來了解“來源”,由於我們的網卡是關聯在public區域的,而且http服務並沒有勾選,所以在vms002主機使用http://192.168.26.101 的方式訪問時是無法打開vms001主機的主頁的(圖1-51至圖1-53),我們在vms001主機的home區域中的來源添加192.168.26.0網段,同時在home區域的“服務”中添加了允許訪問http服務後,此時雖然是在public區域中,但是仍然可以正常的訪問vms001主機的主頁(圖1-54至圖1-56)。這是由於我們在home區域的的“來源”設置了允許192.168.26.0網段後,那麼訪問的客戶端IP地址只要是包含在這個網段中,那麼即使此時使用的是public區域,但是仍然可以匹配到home區域中服務的設置規則,而home區域中允許了http服務,所以vms002主機可以正常的訪問到vms001主機的主頁。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.13)如果我們想了解當前的防火牆中包含有哪些的“來源”,我們可以使用query-source參數來驗證指定的區域是否包含來源的信息,例如我們測試出在home區域中包含192.168.26.0網段的“來源”信息(圖1-57)。不過我們還是可以通過“list-all”參數來查詢未知網段的情況下設置“來源”的區域信息(圖1-58)。我們可以通過命令行的方式對區域中的“來源”網段進行添加和刪除操作。
# firewall-cmd --query-source=192.168.26.0/24
# firewall-cmd --query-source=192.168.26.0/24 --zone=home
# firewall-cmd --list-all---查詢public區域是否有包含“來源”信息
# firewall-cmd --list-all --zone=home---查詢home區域是否有包含“來源”信息
# firewall-cmd --remove-source=192.168.26.0/24 --zone=home---刪除home區域的“來源”信息
# firewall-cmd --add-source=192.168.26.0/24 --zone=home---在home區域添加“來源”信息
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.14)第五個是“僞裝”,第六個是“端口轉發”。目前IPv4的地址出現了資源短缺不夠用,我們的解決方案除了使用IPv6以外,還可以使用NAT方案來進行緩解。在我們的環境中存在內網,內網中存在一個交換機,這個交換機會連接到一個對外訪問的路由器,這個路由器連接到外部互聯網的某主機(2.2.2.2),我們內網的主機IP地址是內網私有地址(10.0.0.2),而私有地址的網關是10.0.0.1在路由器的一個接口上,路由器的公網地址是1.1.1.1,現在我們內網的主機(10.0.0.2)需要發送一個數據包到外部互聯網的某主機上(2.2.2.2),此時發送的源地址:10.0.0.2,目的地址:2.2.2.2,到達路由器後,會進行網絡地址轉換,此時源地址:1.1.1.1,目的地址:2.2.2.2,這種轉換就稱之爲SNAT(source nat)。而有時候我們內網會有一個主機對外提供服務,此時我們內網的IP地址是10.0.0.3,而外部互聯網主機希望訪問內部的Web服務器時,首先是通過源地址:2.2.2.2,目的地址:1.1.1.1,通過路由器後,會進行網絡地址轉換,此時源地址:2.2.2.2,目的地址:10.0.0.3,這種轉換就稱之爲DNAT(destination nat)。而對應到防火牆中SNAT就是“僞裝”,而DNAT就是“端口轉發”。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.15)現在我們的系統的環境是有三臺主機,其中server主機的IP地址是10.0.0.2,vms002主機的IP地址是192.168.26.102,vms001主機的IP地址是192.168.26.101。其中vms001主機的網卡是eno16777728,而vms002主機的網卡其中一塊是eno16777728對應的IP地址是192.168.26.102,接着我們在vms002主機上添加一塊新的網卡eno33554968,此網卡對應的IP地址是10.0.0.1。我們在vms002主機上進行防火牆的設置,我們先將vms002主機的第二張網卡eno33554968添加我們自己設置的LAN區段中,接着我們在網卡eno33554968上配置相應的IP地址和子網掩碼信息,最後將網絡重啓一下。
# nmcli connection---查詢網卡的連接情況
# systemctl restart network---將網絡重啓一下
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.16)接着我們將server主機的網卡添加到LAN區段aa網段中,在server主機中,我們編輯網卡ens32,同時注意需要設置自動連接網絡的選項,我們在server主機上設置好IP地址10.0.0.2,掩碼和網關的信息,其中網關指向vms002主機eno33554968網卡的IP地址10.0.0.1,並將服務重啓一下。我們在server主機上ping向vms002主機的網卡地址10.0.0.1時,是可以正常ping通的,我們使用server主機ping向vms002主機的網卡地址192.168.26.102時也是可以正常ping通的。
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.17)而我們嘗試從server主機ping向vms001主機的時候,發現是無法ping通的(圖1-72),這是由於server主機向vms001主機通信的時候會需要vms002主機開啓轉發的功能,但是此時vms002主機的轉發功能並沒有開啓,我們設置ip_forward的值爲1(圖1-73至圖1-75)。
# cat /proc/sys/net/ipv4/ip_forward---查詢vms002主機的轉發功能是否有開啓
# echo 1 > /proc/sys/net/ipv4/ip_forward---將vms002主機的轉發功能開啓
# sysctl -a | grep forward---查詢系統中關於轉發的所有功能
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf---將轉發功能寫入到配置文件中
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.18)如果我們希望server主機能夠訪問成功vms001主機,此時有兩種方案可以實現,第一種是配置路由的方式,我們設置vms001主機的網關是指向vms002主機的IP地址192.168.26.102,並重啓網絡服務,在vms001主機設置完路由信息後,此時server主機可以正常的ping通vms001主機了,但是vms001主機在抓包過程中是可以看到server主機的IP地址信息的(圖1-76至圖1-79);第二種方式是通過配置NAT的方式來進行操作,我們在vms002主機上開啓防火牆,然後設置默認的區域爲public並將“僞裝區域”勾選起來,此時server主機是可以正常的訪問vms001主機的IP地址的,此時由於我們在vms002主機上設置了NAT,所以此時可以接收到server主機發送的信息,但是隻能看到是vms002.example.com,無法獲取具體的IP地址信息,從而起到了僞裝的作用(圖1-80至圖1-82)。
# systemctl restart network---重啓網絡服務
# tcpdump -i eno16777728 icmp---查詢抓包信息
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.19)接着我們來了解第六個“端口轉發”,我們首先在內網的server主機上搭建一個Web服務器,此時我們需求是vms001主機可以訪問訪問server主機提供的Web服務,此時我們的做法就是設置端口轉發,當訪問到vms002主機的80端口的時候,自動轉發到server主機的80端口,所以可以正確的看到server主機的Web主頁(圖1-86)。我們也可以通過命令行的方式來實現,我們在vms002主機上操作,我們在vms002主機上查詢發現端口轉發並沒有任何的設置,此時我們在vms002主機上設置端口port爲80,協議proto爲tcp,轉發的地址toaddr爲10.0.0.2,轉發的端口爲80,此時我們從vms001主機訪問192.168.26.102主機的80端口的時候,會轉發到server主機的80端口(圖1-88)。
# firewall-cmd --list-all---查詢當前防火牆默認區域的所有配置信息
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(3.20)我們還可以設置如果訪問本機端口80的時候,會轉發到本機的22端口的條目(圖1-89和圖1-90)。我們也可以設置如果訪問本機的80端口會轉發到10.0.0.2主機的22端口(圖1-91和圖1-92)。
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"---刪除端口轉發的條目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toport=22"---添加轉發端口的條目,如果訪問本機端口80的時候,會轉發到本機的22端口
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toport=22"---刪除端口轉發的條目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=22"---添加轉發端口的條目,如果訪問本機的80端口會轉發到10.0.0.2主機的22端口
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(四)使用man firewalld.richlanguage
(4.1)第七個我們來了解“富規則”,首先我們在vms002主機安裝http服務,然後我們將“端口轉發”中的轉發配置刪除後,在“服務”中將http服務勾選,此時我們會發現此時如果允許http服務通過,那麼所有主機都是可以訪問,如果禁止http服務通過,那麼所有主機都是無法進行訪問,無法按照我們的需求進行精確控制(圖4-3)。
# echo vms002 > /var/www/html/index.html---設置主頁信息
# systemctl start httpd
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.2)有時候很我們的需求是某些客戶端可以訪問vms002主機的主頁,但同時也會拒絕某些客戶端訪問vms002主機的主頁,此時我們可以使用設置富規則的方式處理,不過如果我們啓用富規則進行Web網頁的控制,那麼“服務”和“端口”我們就不能做任何的勾選控制。如果我們想要以圖形化界面進行配置,我們需要選用英文版的比較好,我們選擇“Rich_Rules”,選擇對ipv4進行控制,選的service服務是http,選擇accept表示允許訪問的客戶端,其中Source源允許的客戶端我們填寫的是192.168.26.1(圖4-4)。此時我們的192.168.26.1客戶端是可以正常的訪問vms002主機的主頁的(圖4-6),而vms001主機的客戶端的IP地址爲192.168.26.101,不符合富規則的要求,是無法訪問vms002主機的主頁的(圖4-7)。
# LANG=C firewall-config &
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.3)如果以上的操作我們希望通過命令行的方式實現,則首先使用man -k命令查詢所有符合firewall的條目,然後進入到firewalld.richlanguage條目中,在firewalld.richlanguage條目中,我們可以關注Example 3和Example 5。首先我們通過service進行訪問控制,我們在vms002主機設置只允許192.168.26.1主機可以訪問http服務,此時192.168.26.1主機可以正常的訪問vms002主機的主頁了(圖4-10至圖4-12)。
# man -k firewall---查詢所有符合firewall的條目
# man firewalld.richlanguage---查詢這個條目的具體解釋
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.26.1/24" service name="http" accept'---在vms002主機設置只允許192.168.26.1主機可以訪問http服務
# firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.26.1" service name="http" accept'---刪除vms002主機設置只允許192.168.26.1主機可以訪問http服務
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.4)然後我們嘗試使用port端口進行訪問控制,我們指定地址爲192.168.26.101主機,訪問本機vms002主機的80端口時可以通過,此時我們發現使用192.168.26.1主機訪問vms001主機的Web服務時無法正常的訪問主頁,而使用192.168.26.101主機可以正常的訪問vms001主機的主頁(圖4-14和圖4-15)。
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept'---指定當地址爲192.168.26.101主機,訪問本機vms002主機的80端口的時候可以通過
# firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept'---將指定的地址爲192.168.26.101主機,端口爲80端口的訪問可以通過的條目刪除
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.5)現在我們的需求是當192.168.26.101主機訪問vms002主機的88端口時會自動轉發到server主機的22端口。我們先使用圖形化的界面進行操作,我們選擇forward-port,當訪問本機的88端口時,自動轉發到10.0.0.2主機的22端口上,同時填寫允許訪問的主機地址,此時我們發現只有vms001主機可以正常的ssh連接到10.0.0.2主機上。
# ssh 192.168.26.102 -p 88---在vms001主機上連接,其中-p指明端口
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.6)如果我們想用命令行的方式實現當192.168.26.1主機訪問vms002主機的88端口時會自動轉發到server主機的22端口,我們可以使用man firewalld.richlanguage查詢到Example 5的示例,此時我們就可以正常的連接到server主機的22端口了(圖4-21和圖4-22)。
# firewall-cmd --list-all
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.26.1" forward-port to-addr="10.0.0.2" to-port="22" protocol="tcp" port="88"'---其中port表示本機的端口,to-port表示轉發的端口
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
(4.7)有時候我們在企業內部可能需要對特定的網段開放NAT地址轉換,例如我們只允許公司市場部網段的主機可以訪問外網,但是開發部和財務部的網段主機不能訪問外網,此時我們就可以在vms002主機上使用富規則(Rich Rules)的僞裝(masquerade)功能,同時我們需要保證在第三欄僞裝(masquerading)沒有勾選。我們的server主機的IP是10.0.0.2,此時我們使用server主機ping向vms001主機的時候是無法ping通的(圖4-24),接着我們修改server主機的IP地址和默認網關,使其符合富規則中主機IP的要求,默認的網關指向vms002主機eno33554968網卡(10.0.0.1),此時我們便可以正常的使用NAT實現內網IP訪問外部主機的需求了(圖4-25)。
# ifconfig ens32 10.0.0.3 netmask 255.255.255.0;route add default gw 10.0.0.1---修改IP地址爲10.0.0.3,修改掩碼爲255.255.255.0,修改默認網關爲10.0.0.1
# route delete default gw 10.0.0.1---刪除默認的網關
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀
【我的Linux,我做主!】Linux防火牆核心概念全面解讀

—————— 本文至此結束,感謝閱讀 ——————

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