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