
問(wèn)題產(chǎn)生原因分析: 網(wǎng)絡(luò)環(huán)境介紹:公司內(nèi)網(wǎng)有一臺(tái)web服務(wù)器,地址是192.168.100.100,web服務(wù)端口為80,并且為這臺(tái)web服務(wù)器申請(qǐng)了DNS A記錄的域名解析服務(wù),解析記錄是公司出口ip地址100.100.100.100。在辦公區(qū)網(wǎng)絡(luò)環(huán)境里,還有內(nèi)網(wǎng)192.168.10.0網(wǎng)段,需要通過(guò)申請(qǐng)的域名來(lái)訪問(wèn)公司內(nèi)網(wǎng)的192.168.100.100的web服務(wù)。做法是在防火墻的出口,做一條端口映射,100.100.100.100:80到192.168.100.100:80的端口映射。問(wèn)題來(lái)了,做好端口映射以后,其他外部網(wǎng)絡(luò)通過(guò)域名訪問(wèn)公司的web服務(wù)是正常的,但是公司內(nèi)網(wǎng)用戶通過(guò)域名訪問(wèn)公司自己的web服務(wù),卻無(wú)法訪問(wèn);而公司內(nèi)網(wǎng)用戶通過(guò)192.168.100.100:80私有地址訪問(wèn),是正常的。這種情況,就是因?yàn)樽龊枚丝谟成湟院?,訪問(wèn)web服務(wù)的流量在響應(yīng)的時(shí)候流量沒(méi)有回流到防火墻導(dǎo)致的。 原因分析:如上圖,假如是192.168.10.10通過(guò)申請(qǐng)的域名訪問(wèn)192.168.100.100的web服務(wù)。這里假設(shè)訪問(wèn)的源端口是10000,目標(biāo)端口是80,數(shù)據(jù)包分析如下:C2主機(jī)發(fā)起web請(qǐng)求.因?yàn)橥ㄟ^(guò)域名訪問(wèn)的,DNS解析服務(wù)正常,那么訪問(wèn)目標(biāo)就是100.100.100.100:80192.168.10.10:10000--->100.100.100.100:80 數(shù)據(jù)包最終會(huì)被路由到防火墻上,防火墻檢查訪問(wèn)的目的地址,匹配到它的端口映射策略,將目標(biāo)地址改為對(duì)192.168.100.100的訪問(wèn),建立起一個(gè)針對(duì)目標(biāo)ip地址轉(zhuǎn)換的NAT會(huì)話表192.168.10.10:10000--->192.168.100.100:80 然后數(shù)據(jù)包到會(huì)被轉(zhuǎn)發(fā)到192.168.100.100服務(wù)器上并會(huì)響應(yīng)192.168.10.10主機(jī)的請(qǐng)求,將上述訪問(wèn)的源目ip地址及端口進(jìn)行倒轉(zhuǎn),并將數(shù)據(jù)包交給它的網(wǎng)關(guān)處理,圖中就是R1路由器192.168.100.100:80--->192.168.10.10:10000 R1路由器檢查訪問(wèn)者的源ip和目標(biāo)ip地址,發(fā)現(xiàn)目標(biāo)ip地址是192.168.10.10,是R1路由器一個(gè)可路由的內(nèi)網(wǎng)ip地址,就會(huì)將數(shù)據(jù)包直接路由到C2主機(jī)上C2主機(jī)接收到數(shù)據(jù)包,檢查數(shù)據(jù)包的源ip和端口是192.168.100.100:80,發(fā)現(xiàn)其本身并沒(méi)有這樣一個(gè)http會(huì)話與之相匹配,就是說(shuō)C2主機(jī)并沒(méi)有主動(dòng)發(fā)起對(duì)192.168.100.100:80的訪問(wèn),發(fā)起的是對(duì)100.100.100.100:80的訪問(wèn),那么C2主機(jī)就會(huì)丟棄這個(gè)數(shù)據(jù)包,導(dǎo)致內(nèi)網(wǎng)用戶通過(guò)域名或者公網(wǎng)ip地址訪問(wèn)自己的內(nèi)網(wǎng)服務(wù)器不通的現(xiàn)象。192.168.100.100:80--->192.168.10.10:10000 上述就是造成我們開(kāi)頭所說(shuō)問(wèn)題的原因。發(fā)生上述問(wèn)題的原因,就是因?yàn)槠銻1路由器發(fā)現(xiàn)響應(yīng)數(shù)據(jù)包的目的ip地址是內(nèi)網(wǎng)一個(gè)可直接路由的地址,就會(huì)直接在內(nèi)網(wǎng)進(jìn)行路由轉(zhuǎn)發(fā),而不是將數(shù)據(jù)包交給防火墻進(jìn)行路由轉(zhuǎn)發(fā)。不要認(rèn)為這是bug,這是正?,F(xiàn)象,任何設(shè)備只要做了端口映射,都繞不開(kāi)這個(gè)問(wèn)題,因?yàn)門CP/IP協(xié)議棧就是這樣工作的。你要推倒重來(lái),除非自己去設(shè)計(jì)一套網(wǎng)絡(luò)協(xié)議標(biāo)準(zhǔn),況且在現(xiàn)有的TCP/IP的協(xié)議框架下,這個(gè)問(wèn)題又不是說(shuō)不能解決。那為何有的設(shè)備不用做端口回流呢?那是因?yàn)橛械脑O(shè)備在你做端口映射的時(shí)候,偷偷地把端口回流的問(wèn)題也給你解決了。然而你也不要以為它們幫你做了端口回流,你就認(rèn)為那些設(shè)備是好設(shè)備,感覺(jué)好高端,那你錯(cuò)了,我很少見(jiàn)企業(yè)級(jí)設(shè)備偷偷地幫你解決這個(gè)問(wèn)題的(不是說(shuō)沒(méi)有,一般是應(yīng)用層網(wǎng)絡(luò)設(shè)備有這個(gè)),都是需要你主動(dòng)去處理解決,這也體現(xiàn)了它們?cè)O(shè)備高度可定制性及擴(kuò)展性。你要高度可定制性和擴(kuò)展性,那就要犧牲人性化的設(shè)計(jì),需要專業(yè)人員去幫你做業(yè)務(wù)上的定制;你要人性化,自己點(diǎn)點(diǎn)鼠標(biāo)就能把問(wèn)題解決,那它就不可能在可定制性和擴(kuò)展性上給你太多,這個(gè)世界上的事情也是如此,沒(méi)有十全十美。 解決方法:這里介紹下思科防火墻和華為防火墻上如何解決這個(gè)問(wèn)題。至于其他廠家的設(shè)備或者路由器等網(wǎng)絡(luò)設(shè)備,如何解決,可以自行查閱相關(guān)資料,解決的原理都一樣這里只介紹其中一個(gè)解決方法,還有其他方法,可以自行查閱相關(guān)資料 解決方法的思路:內(nèi)網(wǎng)主機(jī)在訪問(wèn)的時(shí)候,將web服務(wù)的響應(yīng)流量回流到防火墻上來(lái),接受防火墻的處理。就是說(shuō),在流量經(jīng)過(guò)防火墻的時(shí)候,將源地址做一個(gè)修改,使得R1路由器在路由數(shù)據(jù)包的時(shí)候,還把這個(gè)數(shù)據(jù)包路由到防火墻上來(lái),而不是在內(nèi)網(wǎng)直接路由;防火墻上有記錄它所做的相應(yīng)修改(做源地址轉(zhuǎn)換,并維護(hù)這個(gè)NAT會(huì)話表即可),再把之前的修改給改回來(lái),再轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機(jī)即可。內(nèi)網(wǎng)主機(jī)對(duì)通過(guò)公網(wǎng)對(duì)內(nèi)網(wǎng)服務(wù)器訪問(wèn)的時(shí)候,流量在經(jīng)過(guò)防火墻時(shí),將內(nèi)網(wǎng)主機(jī)的ip地址修改為一個(gè)外網(wǎng)ip地址(源NAT轉(zhuǎn)換),并做好及維護(hù)相應(yīng)的NAT會(huì)話的記錄,這樣服務(wù)器在接收到數(shù)據(jù)包之后,發(fā)現(xiàn)源ip地址是一個(gè)外網(wǎng)ip地址,這樣數(shù)據(jù)流量會(huì)回流到防火墻,防火墻檢查相應(yīng)的源NAT轉(zhuǎn)換策略,發(fā)現(xiàn)可以匹配,則進(jìn)行源NAT的還原,并經(jīng)數(shù)據(jù)包路由到內(nèi)網(wǎng)的主機(jī)中 思科防火墻在做端口映射的時(shí)候,分為static(inside,outside)和static(inside,inside),方向不同。但是華為防火墻沒(méi)有這個(gè)問(wèn)題,因此思科在解決這個(gè)問(wèn)題時(shí),有下面兩個(gè)關(guān)鍵步驟,而華為防火墻只需要下面第一步(準(zhǔn)確來(lái)說(shuō),華為防火墻只是用的第一步的思路,實(shí)現(xiàn)方式和思科防火墻略微有些區(qū)別)即可。第一步:內(nèi)網(wǎng)192.168.10.0網(wǎng)段對(duì)100.100.100.100的訪問(wèn)的時(shí)候,將源地址做一個(gè)轉(zhuǎn)換,轉(zhuǎn)換為防火墻內(nèi)網(wǎng)口inside對(duì)100.100.100.100的訪問(wèn)。這一步你可以理解為用防火墻的內(nèi)網(wǎng)inside接口的地址去訪問(wèn)100.100.100.100。之前做的全局NAT的轉(zhuǎn)換,內(nèi)網(wǎng)192.168.10.10對(duì)所有外網(wǎng)的訪問(wèn),是轉(zhuǎn)換為防火墻outside口對(duì)外網(wǎng)的訪問(wèn),即防火墻outside代理防火墻內(nèi)網(wǎng)中的所有主機(jī)去訪問(wèn)外網(wǎng),例如百度第二步:內(nèi)網(wǎng)192.168.10.0網(wǎng)段對(duì)100.100.100.100:80的訪問(wèn),將目標(biāo)地址做一個(gè)轉(zhuǎn)換,轉(zhuǎn)換為對(duì)內(nèi)網(wǎng)192.168.100.100:80的訪問(wèn)。這一步是做LAN到LAN的端口映射 思科防火墻:這里是基于思科防火墻8.2系統(tǒng)版本的配置,新版本配置有所改變,但是解決方法的原理類似先做最基礎(chǔ)的配置,這里是我們平時(shí)上網(wǎng)說(shuō)必須要的配置1、全局的NAT源地址轉(zhuǎn)換,注意下面數(shù)字要對(duì)應(yīng)。這一步主要是為了讓內(nèi)網(wǎng)用戶可以正常訪問(wèn)外網(wǎng)用的# nat (inside) 1 0.0.0.0 0.0.0.0 //這條命令匹配了所有ip地址# global (outside) 1 interface //對(duì)上面匹配的IP地址訪問(wèn)外網(wǎng)的流量,做源地址轉(zhuǎn)換,源地址是interface outside接口的ip地址,即100.100.100.100 2、做端口映射(目的ip地址轉(zhuǎn)換):我們做的web服務(wù)是為我們的用戶提供服務(wù)的,因此我們需要做一個(gè)端口映射,能夠讓用戶訪問(wèn)我們的web服務(wù)# static (inside,outside) tcp 100.100.100.100 80 192.168.100.100 80 netmask 255.255.255.255 //外網(wǎng)outside區(qū)域網(wǎng)絡(luò)訪問(wèn)100.100.100.100:80的時(shí)候,將轉(zhuǎn)換對(duì)192.168.100.100:80的訪問(wèn) 3、內(nèi)網(wǎng)192.168.10.0網(wǎng)段訪問(wèn)100.100.100.100的時(shí)候,也做源地址轉(zhuǎn)換,但是區(qū)別上面的第1步,這里將源地址改為防火墻的內(nèi)網(wǎng)口inside口# access-list 100 extended permit ip 192.168.10.0 255.255.255.0 host 100.100.100.100 //匹配公司內(nèi)網(wǎng)192.168.10.0/24訪問(wèn)公網(wǎng)ip100.100.100.100的流量# nat (inside) 10 access-list 100# global (inside) 10 interface //對(duì)捕獲的流量做源地址轉(zhuǎn)換,轉(zhuǎn)換成interface inside接口的ip地址。就是說(shuō)內(nèi)網(wǎng)訪問(wèn)100.100.100.100的流量的源地址,轉(zhuǎn)換為防火墻內(nèi)網(wǎng)口的地址,變?yōu)榉阑饓nside口對(duì)web服務(wù)的訪問(wèn)。注意:如果這里是路由器或者其他網(wǎng)關(guān)設(shè)備的話,需要將interface換成這臺(tái)路由器或者網(wǎng)關(guān)設(shè)備真實(shí)的ip地址,這里思科防火墻可以使用接口名稱代替 4、內(nèi)網(wǎng)192.168.10.0網(wǎng)段對(duì)100.100.100.100:80的訪問(wèn),做目的ip地址及端口的轉(zhuǎn)換,但是這里區(qū)別上面的第二步,這里將目的地址改為內(nèi)網(wǎng)服務(wù)器的ip地址,即192.168.100.100:80# static (inside,inside) tcp 100.100.100.100 80 192.168.100.100 80 netmask 255.255.255.255 // //內(nèi)網(wǎng)(inside區(qū)域)的網(wǎng)絡(luò)對(duì)100.100.100.100:80的訪問(wèn)轉(zhuǎn)換為對(duì)192.168.100.100:80的訪問(wèn) 5、允許相同安全級(jí)別之間的接口可以互相轉(zhuǎn)發(fā)數(shù)據(jù)# same-security-traffic permit intra-interface防火墻多一個(gè)這個(gè)步驟,路由器等其他網(wǎng)關(guān)設(shè)備沒(méi)有 華為防火墻1、全局NAT地址轉(zhuǎn)換。這一步主要是為了讓內(nèi)網(wǎng)用戶可以正常訪問(wèn)外網(wǎng)用的# nat-policy interzone trust untrust outbound // 注意NAT策略方向# policy 0# action source-nat // 是做源地址轉(zhuǎn)換# policy source 192.168.0.0 mask 255.255.0.0 // 匹配內(nèi)網(wǎng)所有主機(jī)ip# easy-ip GigabitEthernet0/0/1 // 將源地址轉(zhuǎn)換為防火墻GigabitEthernet0/0/1接口的ip地址(在企業(yè),一般這個(gè)接口都是企業(yè)出口ip地址) 2、端口映射:# nat server 6 protocol tcp global 100.100.100.100 www inside 192.168.100.100 www 3、創(chuàng)建地址池# nat address-group 1 1.1.1.1 1.1.1.2 // ip地址為1.1.1.1-1.1.1.2。咨詢過(guò)華為工程師,這里的地址池可以任意寫,但是必須保證在全網(wǎng)內(nèi)唯一,數(shù)據(jù)可被路由到防火墻即可。不可以和上面的easy-ip重復(fù) 4、做域內(nèi)NAT,注意和上面第二步NAT的區(qū)別,策略方向不一樣# nat-policy zone trust# policy 1# action source-nat# policy source 192.168.0.0 mask 16 // 這里匹配需要通過(guò)公網(wǎng)訪問(wèn)的所有內(nèi)網(wǎng)主機(jī)ip# policy destination 192.168.100.100 mask 32 // 這里匹配,內(nèi)網(wǎng)主機(jī)訪問(wèn)哪個(gè)ip的時(shí)候,執(zhí)行這個(gè)NAT(可以和上面一樣,寫地址段)# address-group 1 // 匹配以后,將源地址轉(zhuǎn)換成這個(gè)地址池里的地址,注意1和上面的地址池索引相對(duì)應(yīng) 說(shuō)明:華為防火墻做好域間的策略,保證網(wǎng)絡(luò)訪問(wèn)正常,這屬于其他防火墻的知識(shí)范圍,不做過(guò)多討論。上述華為防火墻端口回流最好以后,內(nèi)網(wǎng)主機(jī)用戶通過(guò)公網(wǎng)訪問(wèn),還是不行。具體也咨詢了華為工程師,把配置信息也發(fā)給他們看了下,他們檢查配置也說(shuō)配置沒(méi)問(wèn)題,找不出問(wèn)題所在。通過(guò)測(cè)試并查看防火墻的會(huì)話表,發(fā)現(xiàn)內(nèi)網(wǎng)主機(jī)發(fā)起訪問(wèn)的時(shí)候,主機(jī)的源地址沒(méi)有執(zhí)行轉(zhuǎn)換,就是上面的第4步?jīng)]有生效,估計(jì)是防火墻版本的一個(gè)bug吧。有華為防火墻大神的,可以幫忙指出問(wèn)題所在。 說(shuō)下華為防火墻和思科防火墻解決這個(gè)問(wèn)題的思路上的一點(diǎn)不同:思科防火墻:思科防火墻在內(nèi)網(wǎng)通過(guò)公網(wǎng)訪問(wèn)內(nèi)網(wǎng)web服務(wù)的時(shí)候,當(dāng)流量到達(dá)防火墻以后,防火墻偷偷地?cái)?shù)據(jù)包的源地址改成防火墻inside接口的地址了,這樣web服務(wù)器收到數(shù)據(jù)包的時(shí)候,就會(huì)響應(yīng)這個(gè)數(shù)據(jù)包,把這個(gè)數(shù)據(jù)包響應(yīng)給防火墻,而不是內(nèi)網(wǎng)的主機(jī)。防火墻收到響應(yīng)數(shù)據(jù)包以后,再偷偷地將數(shù)據(jù)包的源ip地址(此時(shí)已經(jīng)變成目的ip地址了)改成內(nèi)網(wǎng)主機(jī)的ip地址,然后轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機(jī)。 華為防火墻:華為防火墻在內(nèi)網(wǎng)通過(guò)公網(wǎng)訪問(wèn)內(nèi)網(wǎng)web服務(wù)的時(shí)候,當(dāng)流量到達(dá)防火墻后,防火墻像思科防火墻一樣,也會(huì)偷偷將數(shù)據(jù)包的源地址改成配置好的地址池中的一個(gè)ip地址(一般是一個(gè)公網(wǎng)地址,只要全局唯一即可);web服務(wù)器收到數(shù)據(jù)包的時(shí)候,就會(huì)響應(yīng)這個(gè)數(shù)據(jù)包,因?yàn)槭堑刂烦貎?nèi)的地址,在內(nèi)網(wǎng)不可路由,數(shù)據(jù)就會(huì)被路由到防火墻上,防火墻再次偷偷地將數(shù)據(jù)包的源ip地址(此時(shí)也應(yīng)變成目的ip地址了)修改成內(nèi)網(wǎng)主機(jī)的ip地址,然后再發(fā)給內(nèi)網(wǎng)主機(jī)。 思科防火墻和華為防火墻在處理這個(gè)問(wèn)題的時(shí)候,思路上有點(diǎn)不同。但是都是內(nèi)網(wǎng)主機(jī)通過(guò)公網(wǎng)訪問(wèn)內(nèi)網(wǎng)web服務(wù)的時(shí)候,偷偷將主機(jī)ip地址修改成一個(gè)在內(nèi)網(wǎng)必須路由到防火墻的一個(gè)ip地址(就是說(shuō)接受防火墻的控制),然后web服務(wù)響應(yīng)數(shù)據(jù)會(huì)回流到防火墻,最后經(jīng)防火墻處理,轉(zhuǎn)發(fā)給內(nèi)網(wǎng)主機(jī)。 臺(tái)上十分鐘,臺(tái)下十年功。在控制臺(tái)上敲的幾下鍵盤,寫的幾行命令,臺(tái)下的你可能要花上大半年甚至一兩年的時(shí)間,去了解它背后實(shí)現(xiàn)的原理和遇到問(wèn)題的解決方法。你可能要去了解整個(gè)TCP/IP協(xié)議棧的工作方式、防火墻的工作方式及工作原理、廣域網(wǎng)以及局域網(wǎng)技術(shù)原理等等??傊瑢W(xué)無(wú)止境,越學(xué)越感覺(jué)自己之前無(wú)知。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。