目錄:
(一)tcpwraps的配置
(二)Firewalld的概念
(三)配置防火墻
(四)使用man firewalld.richlanguage
眾所周知,相較于企業(yè)內(nèi)網(wǎng),外部的公網(wǎng)環(huán)境更加惡劣,罪惡叢生。在公網(wǎng)與企業(yè)內(nèi)網(wǎng)之間充當(dāng)保護(hù)屏障的防火墻雖然有軟件和硬件之分,但主要功能都是依據(jù)策略對(duì)穿越防火墻自身的流量進(jìn)行過濾。防火墻策略可以基于流量的源地址、目的地址、端口號(hào)、協(xié)議、應(yīng)用等信息來定制,然后防火墻使用預(yù)先定制的策略規(guī)則監(jiān)控出入的流量,若流量與某一條策略規(guī)則相匹配,則執(zhí)行相應(yīng)的處理,反之則丟棄。這樣一來,就可以保證僅有合法的流量在企業(yè)內(nèi)網(wǎng)和外部公網(wǎng)之間流動(dòng)了。
(一)tcpwraps的配置
(1.1)在RHEL 7系統(tǒng)中有多種防火墻,其中一種是tcpwraps。Tcpwraps主要涉及到兩個(gè)配置文件:/etc/hosts.allow文件和/etc/hosts.deny配置文件。在配置文件中的配置語法主要為:“daemon : 客戶端”,例如在我們系統(tǒng)中有sshd服務(wù),當(dāng)這個(gè)服務(wù)運(yùn)行的時(shí)候,本質(zhì)上是有一個(gè)程序在后臺(tái)一直在運(yùn)行(圖1-3),如果在hosts.allow文件中進(jìn)行配置,那么就是允許指定的客戶端訪問這個(gè)服務(wù),如果在hosts.deny文件中進(jìn)行配置,那么就是不允許指定的客戶端訪問這個(gè)服務(wù)。其中我們?cè)谥付蛻舳说臅r(shí)候,如果是填寫子網(wǎng)掩碼,是不支持直接寫/24的表示方法的,必須要完整的寫成/255.255.255.0的表示方法(圖1-2)。
# ps aux | grep -v grep | grep sshd
(1.2)接著我們看一下tcpwraps的匹配規(guī)則,首先到hosts.allow里去匹配,如果匹配成功了則系統(tǒng)允許通過這個(gè)匹配的地址訪問,此后就不再到hosts.deny里去匹配了;如果在hosts.allow里沒有匹配成功,則才會(huì)到hosts.deny里去匹配,如果在hosts.deny里匹配成功了,則系統(tǒng)會(huì)拒絕這個(gè)匹配的地址訪問;如果在hosts.deny里也沒有匹配成功,則系統(tǒng)默認(rèn)是允許通過這個(gè)地址進(jìn)行訪問的,和沒有指定這個(gè)條目的效果是一致的。
(1.3)默認(rèn)情況下,在沒有設(shè)置任何tcpwraps規(guī)則時(shí),vms002主機(jī)是可以正常的使用ssh服務(wù)連接到vms001主機(jī)的。
(1.4)我們?cè)趘ms001主機(jī)的hosts.allow中配置允許192.168.26.0網(wǎng)段中的所有主機(jī)可以訪問vms001主機(jī)的ssh服務(wù),此時(shí)我們發(fā)現(xiàn)vms002主機(jī)仍然是可以訪問vms001主機(jī)的ssh服務(wù)的。
注意:hosts.allow配置文件中修改的條目在修改完后是立即自動(dòng)生效的
(1.5)我們?cè)趘ms001主機(jī)的/etc/hosts.allow配置文件和/etc/hosts.deny配置文件中都添加上允許192.168.26.102主機(jī)的條目,此時(shí)由于系統(tǒng)中先通過了hosts.allow配置文件中的條目,所以hosts.deny配置文件中的條目便不會(huì)再執(zhí)行了,所以vms002主機(jī)是可以正常的訪問vms001主機(jī)的ssh服務(wù)的。
(1.6)接著我們?cè)趘ms001主機(jī)的/etc/hosts.allow配置文件中設(shè)置允許192.168.26.即26.0網(wǎng)段中所有的主機(jī)都允許通過,在/etc/hosts.deny配置文件中設(shè)置不允許192.168.26.102主機(jī),此時(shí)由于是先執(zhí)行了hosts.allow文件的比對(duì),再執(zhí)行hosts.deny文件的比對(duì),所以vms002主機(jī)仍然是可以正常的訪問vms001主機(jī)的ssh服務(wù)的。
(1.7)下面的一種情況是,我們?cè)趘ms001主機(jī)的/etc/hosts.allow配置文件中設(shè)置允許192.168.26.0網(wǎng)段中所有的主機(jī),但是除了192.168.26.102,在/etc/hosts.deny配置文件中沒有做任何的配置,此時(shí)雖然排除了192.168.26.102主機(jī)允許通過,但是系統(tǒng)默認(rèn)也是允許通過,所以此時(shí)vms002主機(jī)仍然是可以正常的訪問vms001主機(jī)的ssh服務(wù)的(圖1-9)。而當(dāng)我們?cè)?etc/hosts.deny配置文件中設(shè)置了192.168.26.102主機(jī)時(shí),此時(shí)vms002主機(jī)就不可以訪問vms001主機(jī)的ssh服務(wù)了(圖1-10和圖1-11)。
(1.8)一般我們?yōu)榱吮WC安全性,在/etc/hosts.allow文件中指定了可以訪問的主機(jī)后,同時(shí)也應(yīng)該在/etc/hosts.deny文件中指定其他的所有主機(jī)都不能訪問,從而提高系統(tǒng)的安全。此時(shí)我們?cè)趘ms002主機(jī)上仍然可以正常的登錄到vms001主機(jī)的ssh服務(wù),但是其他IP地址的主機(jī)就無法登錄vms001主機(jī)的ssh服務(wù)了。此時(shí)我們?nèi)绻M渌闹鳈C(jī)也能夠訪問到vms001主機(jī)的ssh服務(wù),可以先登錄到vms002主機(jī),再通過vms002主機(jī)跳板登錄到vms001主機(jī),此時(shí)vms002主機(jī)便實(shí)現(xiàn)了“堡壘機(jī)”的作用。
在/etc/hosts.allow中配置:
# sshd : 192.168.26.102/255.255.255.0
在/etc/hosts.deny中配置:
# sshd : ALL
(1.9)tcpwraps可以很好的進(jìn)行訪問控制的作用,我們使用ldd命令,可以查看tcpwraps是可以對(duì)sshd服務(wù)進(jìn)行訪問控制的(圖1-14);我們安裝好vsftpd服務(wù)后,使用ldd命令查看,發(fā)現(xiàn)tcpwraps也是可以對(duì)vsftpd服務(wù)進(jìn)行訪問控制的(圖1-15);安裝完httpd服務(wù)后發(fā)現(xiàn),tcpwraps并不能對(duì)httpd服務(wù)進(jìn)行訪問控制,因?yàn)閔ttpd服務(wù)并沒有鏈接到tcpwraps模塊(圖1-16)。
注意:如果我們想要知道關(guān)于hosts allow更詳細(xì)的用法,可以使用# man hosts.allow進(jìn)行查詢。
# ldd which sshd
| grep wrap
# yum install vsftpd -y
# ldd which vsftpd
| grep wrap
# yum install httpd -y
(二)Firewalld的概念
(2.1)在RHEL 7系列的系統(tǒng)中,firewalld防火墻取代了iptables防火墻。對(duì)于接觸Linux系統(tǒng)比較早或?qū)W習(xí)過RHEL 6系統(tǒng)的讀者來說,當(dāng)他們發(fā)現(xiàn)曾經(jīng)掌握的知識(shí)在RHEL 7中不再適用,需要全新學(xué)習(xí)firewalld時(shí),難免會(huì)有抵觸心理。其實(shí),iptables與firewalld都不是防火墻的真面目,它們都只是用來定義防火墻策略的的防火墻管理工具而已,或者說,它們只是一種服務(wù)。iptables服務(wù)會(huì)把配置好的防火墻策略交給內(nèi)核層面的netfilter網(wǎng)絡(luò)過濾器來處理,而firewalld服務(wù)則是把配置好的防火墻策略交給內(nèi)核層面的nftables包過濾框架來處理。換句話說,當(dāng)前在Linux系統(tǒng)中其實(shí)存在多個(gè)防火墻管理工具,旨在方便運(yùn)維人員管理Linux系統(tǒng)中的防火墻策略,我們只需要配置妥當(dāng)其中的一個(gè)就足夠了。雖然這些工具各有優(yōu)劣,但它們?cè)诜阑饓Σ呗缘呐渲盟悸飞鲜潜3忠恢碌?。大家只要在多個(gè)防火墻管理工具中選擇一款并將其學(xué)透,就足以滿足日常的工作需求了。
(2.2)在RHEL 7系統(tǒng)中是同時(shí)存在多個(gè)防火墻的,例如firewalld、iptables、ebtables、ipv6tables等,但是RHEL 7系統(tǒng)默認(rèn)是使用firewalld防火墻的。我們?cè)谑褂肍irewalld防火墻主要可以通過圖形化界面和命令行這兩種方式來進(jìn)行配置,此處我們使用兩種方式配合使用。
(三)配置防火墻
(3.1)通過圖形化的界面我們發(fā)現(xiàn),在區(qū)域部分展示的是防火墻所有的區(qū)域(zone)。在命令行,我們通過get-zones可以獲得防火墻所有區(qū)域的信息(圖1-19)。
# firewall-config &
# firewall-cmd --get-zones
(3.2)我們知道每個(gè)網(wǎng)卡都會(huì)需要和某個(gè)zone進(jìn)行關(guān)聯(lián),如果某網(wǎng)卡沒有和任何的zone關(guān)聯(lián),則會(huì)使用默認(rèn)的zone,通過圖形化界面我們可以知道,默認(rèn)的zone是trusted,默認(rèn)情況下所有的數(shù)據(jù)包都是允許通過的。
# firewall-cmd --get-default-zone
(3.3)而如果我們想修改防火墻的默認(rèn)區(qū)域,可以通過“選項(xiàng)”--“改變默認(rèn)區(qū)域”操作(圖1-22和圖1-23)。如果我們想要通過命令行的方式進(jìn)行修改,則可以通過set-default-zone的參數(shù)進(jìn)行設(shè)置,可以設(shè)置默認(rèn)的區(qū)域?yàn)閜ublic(圖1-24)
# firewall-cmd --set-default-zone=public
(3.4)默認(rèn)情況下,所有的網(wǎng)卡都是和默認(rèn)的zone進(jìn)行關(guān)聯(lián)的,此時(shí)我們默認(rèn)的zone是public,所以網(wǎng)卡eno16777728顯示是和public關(guān)聯(lián)的;接著我們嘗試將默認(rèn)的zone修改為trusted,可以發(fā)現(xiàn)此時(shí)網(wǎng)卡eno16777728也會(huì)自動(dòng)和修改為默認(rèn)zone的trusted進(jìn)行關(guān)聯(lián)。
# firewall-cmd --get-zone-of-interface=eno16777728
# firewall-cmd --set-default-zone=trusted
(3.5)如果我們想將默認(rèn)的public區(qū)域中的接口網(wǎng)卡eno16777728更改為和home區(qū)域的zone進(jìn)行關(guān)聯(lián),此時(shí)如果我們直接在home區(qū)域添加eno16777728網(wǎng)卡,那么系統(tǒng)會(huì)彈出區(qū)域沖突的信息(圖1-26)。由于每張網(wǎng)卡只能和一個(gè)區(qū)域進(jìn)行關(guān)聯(lián),所以此時(shí)我們應(yīng)該先將eno16777728從public區(qū)域中移除,然后再添加至home區(qū)域中,此時(shí)我們通過圖形化界面便可以正常的將網(wǎng)卡和home區(qū)域進(jìn)行關(guān)聯(lián)了(圖1-27和圖1-28)。
# firewall-cmd --remove-interface=eno16777728---從public區(qū)域中移除網(wǎng)卡
(3.6)如果我們使用remove-interface參數(shù)從區(qū)域中刪除網(wǎng)卡時(shí),是從默認(rèn)的區(qū)域中刪除網(wǎng)卡的,此時(shí)防火墻默認(rèn)的區(qū)域是public,但是網(wǎng)卡關(guān)聯(lián)的是在home區(qū)域中,所以我們?cè)趧h除時(shí)也需要指定區(qū)域。如果我們使用add-interface添加eno16777728網(wǎng)卡,沒有指定區(qū)域時(shí),那么系統(tǒng)會(huì)在默認(rèn)的區(qū)域public中添加網(wǎng)卡。
# firewall-cmd --remove-interface=eno16777728 --zone=home
# firewall-cmd --add-interface=eno16777728
(3.7)現(xiàn)在我們的網(wǎng)卡eno16777728是在public區(qū)域中,如果我們想將網(wǎng)卡修改到其他的區(qū)域的zone中則可以使用change-interface,例如我們將網(wǎng)卡直接修改到home區(qū)域中。
# firewall-cmd --change-interface=eno16777728 --zone=home---將網(wǎng)卡直接修改到home區(qū)域中
# firewall-cmd --get-zone-of-interface=eno16777728
(3.8)現(xiàn)在我們?nèi)匀辉O(shè)置網(wǎng)卡eno16777728是在public區(qū)域中,首先我們將httpd服務(wù)啟動(dòng)起來,并設(shè)置主頁信息,此時(shí)我們?cè)趘ms002主機(jī)上嘗試登錄vms001主機(jī)的主頁發(fā)現(xiàn)無法登錄(圖1-32)。接著我們?cè)趐ublic區(qū)域中勾選http服務(wù)可以通過,此時(shí)便可以正常的登錄到vms001的主頁了(圖1-34)。接著我們通過命令行的方式實(shí)現(xiàn),首先通過get-services獲取系統(tǒng)中所有的服務(wù)(圖1-35),接著我們查詢默認(rèn)的public區(qū)域中http服務(wù)是否有勾選,并使用add-service添加http服務(wù),使用remove-service去除http服務(wù)(圖1-36)。
# firewall-cmd --get-services | grep http---獲取系統(tǒng)中所有的服務(wù)并查詢http服務(wù)是否有包含
# firewall-cmd --query-service=http---查詢http服務(wù)是否有勾選
# firewall-cmd --add-service=http---將默認(rèn)區(qū)域的http服務(wù)勾選
# firewall-cmd --remove-service=http---將默認(rèn)區(qū)域的http服務(wù)去除
(3.9)以上的防火墻的設(shè)置都只是臨時(shí)生效,如果將防火墻的服務(wù)重啟后,會(huì)發(fā)現(xiàn)http服務(wù)便沒有勾選了,此時(shí)就無法正常的訪問http服務(wù)了。通過圖形化界面設(shè)置,我們可以選擇永久生效,然后在public區(qū)域中將http服務(wù)勾選,此時(shí)防火墻服務(wù)重啟后,也仍然可以正常的訪問http服務(wù)了(圖1-38)。如果我們只是在永久配置中勾選了http服務(wù),但是運(yùn)行時(shí)配置中并沒有勾選http服務(wù),由于永久配置必須要重啟后才會(huì)生效,所以此時(shí)當(dāng)前運(yùn)行的環(huán)境中并沒有生效允許訪問http服務(wù),通過命令行的方式,我們應(yīng)該通過加上“--permanent”寫入持久態(tài)的參數(shù)處理(圖1-39)。
# firewall-cmd --query-service=http
# systemctl restart firewalld.service---將服務(wù)重啟一下
# firewall-cmd --add-service=http---設(shè)置防火墻允許http服務(wù)訪問
# firewall-cmd --add-service=http --permanent---將配置寫入持久態(tài)
# firewall-cmd --remove-service=http---刪除防火墻允許http服務(wù)訪問
# firewall-cmd --remove-service=http --permanent---將配置寫入持久態(tài)
(3.10)有時(shí)候我們可能會(huì)使用非標(biāo)準(zhǔn)的端口去運(yùn)行服務(wù),第二個(gè)我們來了解“端口”,例如使用808端口運(yùn)行http服務(wù),此時(shí)我們?cè)诜?wù)配置中勾上http會(huì)發(fā)現(xiàn)也是仍然不能正常的訪問到vms001主機(jī)的主頁。我們首先在http服務(wù)中開放808端口,并修改好端口的上下文,然后將httpd服務(wù)重啟后,我們會(huì)發(fā)現(xiàn)由于防火墻并沒有設(shè)置808端口允許通過,所以此時(shí)仍然是無法訪問vms001主頁的(圖1-42),此時(shí)我們可以使用端口解決這個(gè)問題,我們?cè)诙丝谥刑砑?08端口,使用的協(xié)議是tcp,這樣我們便可以正常的訪問到vms001主機(jī)在808端口開放的主頁了(圖1-44)。接著我們還可以使用命令行的方式實(shí)現(xiàn)添加808端口的操作,同時(shí)要記住添加端口完畢后需要添加“--permanent”參數(shù),可以實(shí)現(xiàn)配置在重啟后也仍然生效的效果。
# 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端口
(3.11)第三個(gè)我們來了解“ICMP過濾器”,其中ICMP表示的是互聯(lián)網(wǎng)控制報(bào)文協(xié)議,主要用于在聯(lián)網(wǎng)的計(jì)算機(jī)之間發(fā)送出錯(cuò)信息,但也發(fā)送類似ping請(qǐng)求及回應(yīng)等信息。此處ICMP過濾器和我們遇到的第一個(gè)“服務(wù)”在表示的時(shí)候是相反的,此處ICMP類型中的選項(xiàng),如果勾上表示的是不允許通過,不打勾代表的是允許通過,而在“服務(wù)”中,勾上表示的是服務(wù)允許通過,而不打勾代表的是不允許通過。我們?cè)贗CMP過濾器中勾選上“echo-request”,此時(shí)vms001主機(jī)就不允許其他主機(jī)對(duì)自己發(fā)送ping的請(qǐng)求了,我們?cè)趘ms002主機(jī)上向vms001主機(jī)發(fā)送ping的請(qǐng)求,發(fā)現(xiàn)并不能ping成功(圖1-47)。接著我們?cè)偈褂妹钚械姆绞讲僮鳎褂胊dd-icmp-block參數(shù),此時(shí)就可以實(shí)現(xiàn)禁止其他主機(jī)ping當(dāng)前vms001主機(jī)的要求了(圖1-48)。不過需要注意的是有時(shí)候設(shè)置了ICMP后并不能禁止Windows類型的客戶端的ping請(qǐng)求,此時(shí)我們可以在內(nèi)核參數(shù)中進(jìn)行相關(guān)的設(shè)置,從而實(shí)現(xiàn)禁ping的需求,/proc/sys/net/ipv4/目錄下的icmp_echo_ignore_all內(nèi)核參數(shù)默認(rèn)是0,表示的允許其他主機(jī)ping的請(qǐng)求,此時(shí)任何類型的客戶端都是無法ping通vms001主機(jī)的(圖1-49和圖1-50)
# firewall-cmd --get-icmptypes---查詢當(dāng)前防火墻中ICMP所有的類型
# firewall-cmd --add-icmp-block=echo-request---勾選ICMP請(qǐng)求的選項(xiàng),拒絕其他機(jī)器的訪問禁ping
(3.12)第四個(gè)我們來了解“來源”,由于我們的網(wǎng)卡是關(guān)聯(lián)在public區(qū)域的,而且http服務(wù)并沒有勾選,所以在vms002主機(jī)使用http://192.168.26.101 的方式訪問時(shí)是無法打開vms001主機(jī)的主頁的(圖1-51至圖1-53),我們?cè)趘ms001主機(jī)的home區(qū)域中的來源添加192.168.26.0網(wǎng)段,同時(shí)在home區(qū)域的“服務(wù)”中添加了允許訪問http服務(wù)后,此時(shí)雖然是在public區(qū)域中,但是仍然可以正常的訪問vms001主機(jī)的主頁(圖1-54至圖1-56)。這是由于我們?cè)趆ome區(qū)域的的“來源”設(shè)置了允許192.168.26.0網(wǎng)段后,那么訪問的客戶端IP地址只要是包含在這個(gè)網(wǎng)段中,那么即使此時(shí)使用的是public區(qū)域,但是仍然可以匹配到home區(qū)域中服務(wù)的設(shè)置規(guī)則,而home區(qū)域中允許了http服務(wù),所以vms002主機(jī)可以正常的訪問到vms001主機(jī)的主頁。
(3.13)如果我們想了解當(dāng)前的防火墻中包含有哪些的“來源”,我們可以使用query-source參數(shù)來驗(yàn)證指定的區(qū)域是否包含來源的信息,例如我們測(cè)試出在home區(qū)域中包含192.168.26.0網(wǎng)段的“來源”信息(圖1-57)。不過我們還是可以通過“l(fā)ist-all”參數(shù)來查詢未知網(wǎng)段的情況下設(shè)置“來源”的區(qū)域信息(圖1-58)。我們可以通過命令行的方式對(duì)區(qū)域中的“來源”網(wǎng)段進(jìn)行添加和刪除操作。
# 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區(qū)域是否有包含“來源”信息
# firewall-cmd --list-all --zone=home---查詢home區(qū)域是否有包含“來源”信息
# firewall-cmd --remove-source=192.168.26.0/24 --zone=home---刪除home區(qū)域的“來源”信息
# firewall-cmd --add-source=192.168.26.0/24 --zone=home---在home區(qū)域添加“來源”信息
(3.14)第五個(gè)是“偽裝”,第六個(gè)是“端口轉(zhuǎn)發(fā)”。目前IPv4的地址出現(xiàn)了資源短缺不夠用,我們的解決方案除了使用IPv6以外,還可以使用NAT方案來進(jìn)行緩解。在我們的環(huán)境中存在內(nèi)網(wǎng),內(nèi)網(wǎng)中存在一個(gè)交換機(jī),這個(gè)交換機(jī)會(huì)連接到一個(gè)對(duì)外訪問的路由器,這個(gè)路由器連接到外部互聯(lián)網(wǎng)的某主機(jī)(2.2.2.2),我們內(nèi)網(wǎng)的主機(jī)IP地址是內(nèi)網(wǎng)私有地址(10.0.0.2),而私有地址的網(wǎng)關(guān)是10.0.0.1在路由器的一個(gè)接口上,路由器的公網(wǎng)地址是1.1.1.1,現(xiàn)在我們內(nèi)網(wǎng)的主機(jī)(10.0.0.2)需要發(fā)送一個(gè)數(shù)據(jù)包到外部互聯(lián)網(wǎng)的某主機(jī)上(2.2.2.2),此時(shí)發(fā)送的源地址:10.0.0.2,目的地址:2.2.2.2,到達(dá)路由器后,會(huì)進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換,此時(shí)源地址:1.1.1.1,目的地址:2.2.2.2,這種轉(zhuǎn)換就稱之為SNAT(source nat)。而有時(shí)候我們內(nèi)網(wǎng)會(huì)有一個(gè)主機(jī)對(duì)外提供服務(wù),此時(shí)我們內(nèi)網(wǎng)的IP地址是10.0.0.3,而外部互聯(lián)網(wǎng)主機(jī)希望訪問內(nèi)部的Web服務(wù)器時(shí),首先是通過源地址:2.2.2.2,目的地址:1.1.1.1,通過路由器后,會(huì)進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換,此時(shí)源地址:2.2.2.2,目的地址:10.0.0.3,這種轉(zhuǎn)換就稱之為DNAT(destination nat)。而對(duì)應(yīng)到防火墻中SNAT就是“偽裝”,而DNAT就是“端口轉(zhuǎn)發(fā)”。
(3.15)現(xiàn)在我們的系統(tǒng)的環(huán)境是有三臺(tái)主機(jī),其中server主機(jī)的IP地址是10.0.0.2,vms002主機(jī)的IP地址是192.168.26.102,vms001主機(jī)的IP地址是192.168.26.101。其中vms001主機(jī)的網(wǎng)卡是eno16777728,而vms002主機(jī)的網(wǎng)卡其中一塊是eno16777728對(duì)應(yīng)的IP地址是192.168.26.102,接著我們?cè)趘ms002主機(jī)上添加一塊新的網(wǎng)卡eno33554968,此網(wǎng)卡對(duì)應(yīng)的IP地址是10.0.0.1。我們?cè)趘ms002主機(jī)上進(jìn)行防火墻的設(shè)置,我們先將vms002主機(jī)的第二張網(wǎng)卡eno33554968添加我們自己設(shè)置的LAN區(qū)段中,接著我們?cè)诰W(wǎng)卡eno33554968上配置相應(yīng)的IP地址和子網(wǎng)掩碼信息,最后將網(wǎng)絡(luò)重啟一下。
# nmcli connection---查詢網(wǎng)卡的連接情況
# systemctl restart network---將網(wǎng)絡(luò)重啟一下
(3.16)接著我們將server主機(jī)的網(wǎng)卡添加到LAN區(qū)段aa網(wǎng)段中,在server主機(jī)中,我們編輯網(wǎng)卡ens32,同時(shí)注意需要設(shè)置自動(dòng)連接網(wǎng)絡(luò)的選項(xiàng),我們?cè)趕erver主機(jī)上設(shè)置好IP地址10.0.0.2,掩碼和網(wǎng)關(guān)的信息,其中網(wǎng)關(guān)指向vms002主機(jī)eno33554968網(wǎng)卡的IP地址10.0.0.1,并將服務(wù)重啟一下。我們?cè)趕erver主機(jī)上ping向vms002主機(jī)的網(wǎng)卡地址10.0.0.1時(shí),是可以正常ping通的,我們使用server主機(jī)ping向vms002主機(jī)的網(wǎng)卡地址192.168.26.102時(shí)也是可以正常ping通的。
(3.17)而我們嘗試從server主機(jī)ping向vms001主機(jī)的時(shí)候,發(fā)現(xiàn)是無法ping通的(圖1-72),這是由于server主機(jī)向vms001主機(jī)通信的時(shí)候會(huì)需要vms002主機(jī)開啟轉(zhuǎn)發(fā)的功能,但是此時(shí)vms002主機(jī)的轉(zhuǎn)發(fā)功能并沒有開啟,我們?cè)O(shè)置ip_forward的值為1(圖1-73至圖1-75)。
# cat /proc/sys/net/ipv4/ip_forward---查詢vms002主機(jī)的轉(zhuǎn)發(fā)功能是否有開啟
# echo 1 > /proc/sys/net/ipv4/ip_forward---將vms002主機(jī)的轉(zhuǎn)發(fā)功能開啟
# sysctl -a | grep forward---查詢系統(tǒng)中關(guān)于轉(zhuǎn)發(fā)的所有功能
# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf---將轉(zhuǎn)發(fā)功能寫入到配置文件中
(3.18)如果我們希望server主機(jī)能夠訪問成功vms001主機(jī),此時(shí)有兩種方案可以實(shí)現(xiàn),第一種是配置路由的方式,我們?cè)O(shè)置vms001主機(jī)的網(wǎng)關(guān)是指向vms002主機(jī)的IP地址192.168.26.102,并重啟網(wǎng)絡(luò)服務(wù),在vms001主機(jī)設(shè)置完路由信息后,此時(shí)server主機(jī)可以正常的ping通vms001主機(jī)了,但是vms001主機(jī)在抓包過程中是可以看到server主機(jī)的IP地址信息的(圖1-76至圖1-79);第二種方式是通過配置NAT的方式來進(jìn)行操作,我們?cè)趘ms002主機(jī)上開啟防火墻,然后設(shè)置默認(rèn)的區(qū)域?yàn)閜ublic并將“偽裝區(qū)域”勾選起來,此時(shí)server主機(jī)是可以正常的訪問vms001主機(jī)的IP地址的,此時(shí)由于我們?cè)趘ms002主機(jī)上設(shè)置了NAT,所以此時(shí)可以接收到server主機(jī)發(fā)送的信息,但是只能看到是vms002.example.com,無法獲取具體的IP地址信息,從而起到了偽裝的作用(圖1-80至圖1-82)。
# systemctl restart network---重啟網(wǎng)絡(luò)服務(wù)
# tcpdump -i eno16777728 icmp---查詢抓包信息
(3.19)接著我們來了解第六個(gè)“端口轉(zhuǎn)發(fā)”,我們首先在內(nèi)網(wǎng)的server主機(jī)上搭建一個(gè)Web服務(wù)器,此時(shí)我們需求是vms001主機(jī)可以訪問訪問server主機(jī)提供的Web服務(wù),此時(shí)我們的做法就是設(shè)置端口轉(zhuǎn)發(fā),當(dāng)訪問到vms002主機(jī)的80端口的時(shí)候,自動(dòng)轉(zhuǎn)發(fā)到server主機(jī)的80端口,所以可以正確的看到server主機(jī)的Web主頁(圖1-86)。我們也可以通過命令行的方式來實(shí)現(xiàn),我們?cè)趘ms002主機(jī)上操作,我們?cè)趘ms002主機(jī)上查詢發(fā)現(xiàn)端口轉(zhuǎn)發(fā)并沒有任何的設(shè)置,此時(shí)我們?cè)趘ms002主機(jī)上設(shè)置端口port為80,協(xié)議proto為tcp,轉(zhuǎn)發(fā)的地址toaddr為10.0.0.2,轉(zhuǎn)發(fā)的端口為80,此時(shí)我們從vms001主機(jī)訪問192.168.26.102主機(jī)的80端口的時(shí)候,會(huì)轉(zhuǎn)發(fā)到server主機(jī)的80端口(圖1-88)。
# firewall-cmd --list-all---查詢當(dāng)前防火墻默認(rèn)區(qū)域的所有配置信息
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"
(3.20)我們還可以設(shè)置如果訪問本機(jī)端口80的時(shí)候,會(huì)轉(zhuǎn)發(fā)到本機(jī)的22端口的條目(圖1-89和圖1-90)。我們也可以設(shè)置如果訪問本機(jī)的80端口會(huì)轉(zhuǎn)發(fā)到10.0.0.2主機(jī)的22端口(圖1-91和圖1-92)。
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=80"---刪除端口轉(zhuǎn)發(fā)的條目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toport=22"---添加轉(zhuǎn)發(fā)端口的條目,如果訪問本機(jī)端口80的時(shí)候,會(huì)轉(zhuǎn)發(fā)到本機(jī)的22端口
# firewall-cmd --remove-forward-port="port=80:proto=tcp:toport=22"---刪除端口轉(zhuǎn)發(fā)的條目
# firewall-cmd --add-forward-port="port=80:proto=tcp:toaddr=10.0.0.2:toport=22"---添加轉(zhuǎn)發(fā)端口的條目,如果訪問本機(jī)的80端口會(huì)轉(zhuǎn)發(fā)到10.0.0.2主機(jī)的22端口
(四)使用man firewalld.richlanguage
(4.1)第七個(gè)我們來了解“富規(guī)則”,首先我們?cè)趘ms002主機(jī)安裝http服務(wù),然后我們將“端口轉(zhuǎn)發(fā)”中的轉(zhuǎn)發(fā)配置刪除后,在“服務(wù)”中將http服務(wù)勾選,此時(shí)我們會(huì)發(fā)現(xiàn)此時(shí)如果允許http服務(wù)通過,那么所有主機(jī)都是可以訪問,如果禁止http服務(wù)通過,那么所有主機(jī)都是無法進(jìn)行訪問,無法按照我們的需求進(jìn)行精確控制(圖4-3)。
# echo vms002 > /var/www/html/index.html---設(shè)置主頁信息
# systemctl start httpd
(4.2)有時(shí)候很我們的需求是某些客戶端可以訪問vms002主機(jī)的主頁,但同時(shí)也會(huì)拒絕某些客戶端訪問vms002主機(jī)的主頁,此時(shí)我們可以使用設(shè)置富規(guī)則的方式處理,不過如果我們啟用富規(guī)則進(jìn)行Web網(wǎng)頁的控制,那么“服務(wù)”和“端口”我們就不能做任何的勾選控制。如果我們想要以圖形化界面進(jìn)行配置,我們需要選用英文版的比較好,我們選擇“Rich_Rules”,選擇對(duì)ipv4進(jìn)行控制,選的service服務(wù)是http,選擇accept表示允許訪問的客戶端,其中Source源允許的客戶端我們填寫的是192.168.26.1(圖4-4)。此時(shí)我們的192.168.26.1客戶端是可以正常的訪問vms002主機(jī)的主頁的(圖4-6),而vms001主機(jī)的客戶端的IP地址為192.168.26.101,不符合富規(guī)則的要求,是無法訪問vms002主機(jī)的主頁的(圖4-7)。
# LANG=C firewall-config &
(4.3)如果以上的操作我們希望通過命令行的方式實(shí)現(xiàn),則首先使用man -k命令查詢所有符合firewall的條目,然后進(jìn)入到firewalld.richlanguage條目中,在firewalld.richlanguage條目中,我們可以關(guān)注Example 3和Example 5。首先我們通過service進(jìn)行訪問控制,我們?cè)趘ms002主機(jī)設(shè)置只允許192.168.26.1主機(jī)可以訪問http服務(wù),此時(shí)192.168.26.1主機(jī)可以正常的訪問vms002主機(jī)的主頁了(圖4-10至圖4-12)。
# man -k firewall---查詢所有符合firewall的條目
# man firewalld.richlanguage---查詢這個(gè)條目的具體解釋
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.26.1/24" service name="http" accept'---在vms002主機(jī)設(shè)置只允許192.168.26.1主機(jī)可以訪問http服務(wù)
# firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.26.1" service name="http" accept'---刪除vms002主機(jī)設(shè)置只允許192.168.26.1主機(jī)可以訪問http服務(wù)
(4.4)然后我們嘗試使用port端口進(jìn)行訪問控制,我們指定地址為192.168.26.101主機(jī),訪問本機(jī)vms002主機(jī)的80端口時(shí)可以通過,此時(shí)我們發(fā)現(xiàn)使用192.168.26.1主機(jī)訪問vms001主機(jī)的Web服務(wù)時(shí)無法正常的訪問主頁,而使用192.168.26.101主機(jī)可以正常的訪問vms001主機(jī)的主頁(圖4-14和圖4-15)。
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept'---指定當(dāng)?shù)刂窞?92.168.26.101主機(jī),訪問本機(jī)vms002主機(jī)的80端口的時(shí)候可以通過
# firewall-cmd --remove-rich-rule 'rule family="ipv4" source address="192.168.26.101" port port="80" protocol="tcp" accept'---將指定的地址為192.168.26.101主機(jī),端口為80端口的訪問可以通過的條目刪除
(4.5)現(xiàn)在我們的需求是當(dāng)192.168.26.101主機(jī)訪問vms002主機(jī)的88端口時(shí)會(huì)自動(dòng)轉(zhuǎn)發(fā)到server主機(jī)的22端口。我們先使用圖形化的界面進(jìn)行操作,我們選擇forward-port,當(dāng)訪問本機(jī)的88端口時(shí),自動(dòng)轉(zhuǎn)發(fā)到10.0.0.2主機(jī)的22端口上,同時(shí)填寫允許訪問的主機(jī)地址,此時(shí)我們發(fā)現(xiàn)只有vms001主機(jī)可以正常的ssh連接到10.0.0.2主機(jī)上。
# ssh 192.168.26.102 -p 88---在vms001主機(jī)上連接,其中-p指明端口
(4.6)如果我們想用命令行的方式實(shí)現(xiàn)當(dāng)192.168.26.1主機(jī)訪問vms002主機(jī)的88端口時(shí)會(huì)自動(dòng)轉(zhuǎn)發(fā)到server主機(jī)的22端口,我們可以使用man firewalld.richlanguage查詢到Example 5的示例,此時(shí)我們就可以正常的連接到server主機(jī)的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表示本機(jī)的端口,to-port表示轉(zhuǎn)發(fā)的端口
(4.7)有時(shí)候我們?cè)谄髽I(yè)內(nèi)部可能需要對(duì)特定的網(wǎng)段開放NAT地址轉(zhuǎn)換,例如我們只允許公司市場(chǎng)部網(wǎng)段的主機(jī)可以訪問外網(wǎng),但是開發(fā)部和財(cái)務(wù)部的網(wǎng)段主機(jī)不能訪問外網(wǎng),此時(shí)我們就可以在vms002主機(jī)上使用富規(guī)則(Rich Rules)的偽裝(masquerade)功能,同時(shí)我們需要保證在第三欄偽裝(masquerading)沒有勾選。我們的server主機(jī)的IP是10.0.0.2,此時(shí)我們使用server主機(jī)ping向vms001主機(jī)的時(shí)候是無法ping通的(圖4-24),接著我們修改server主機(jī)的IP地址和默認(rèn)網(wǎng)關(guān),使其符合富規(guī)則中主機(jī)IP的要求,默認(rèn)的網(wǎng)關(guān)指向vms002主機(jī)eno33554968網(wǎng)卡(10.0.0.1),此時(shí)我們便可以正常的使用NAT實(shí)現(xiàn)內(nèi)網(wǎng)IP訪問外部主機(jī)的需求了(圖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,修改默認(rèn)網(wǎng)關(guān)為10.0.0.1
# route delete default gw 10.0.0.1---刪除默認(rèn)的網(wǎng)關(guān)
—————— 本文至此結(jié)束,感謝閱讀 ——————
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。