NAT技术之NAT server
技術背景:
在很多場景中,比如企業、學校、甚至家里都有一些對外訪問的業務提供,比如門戶網址、NAS、ERP等,在實際部署中,這些提供訪問的服務器都屬于內網內,配置的是內網地址,導致的情況是公網用戶沒法對私網地址直接進行訪問,學過上篇內容的源NAT功能是把私網用戶的源地址轉換成可上網的地址(當然可上網的就分私網跟公網了,由運營商分配的)然后發送出去,那么NAT Server的作用正好相反, 它是當其他公網用戶訪問我們服務的公網地址時候,進行目的地址轉換(注意一定要是公網地址),在華為防火墻里面的這個功能叫做---NAT server(服務器映射),可能大家都奇怪,為什么標題里面有端口映射、甚至DMZ,這個主要是各個廠商的叫法不一樣,可能客戶只會某一種叫法,導致在了解需求的時候,有點懵!
不過不要緊,學完本篇后就都會很清晰了,下面來看看多個場景下使用什么樣的技術。
NAT Server之一對一映射:
這里先說下一對一映射的功能的作用,它是完全把這個地址映射給內網的某個服務器地址,一旦映射后,當有人訪問這個公網的任何服務,注意這里說的是任何(比如HTTP、FTP、ping)都原封不動的丟給映射后的服務器,先來感受下,然后博主來說說在什么場景下建議使用,以及注意什么。
環境比較簡單,在互聯網的另外一邊有路人甲用戶需要訪問左邊服務器提供的FTP、HTTP服務,由于服務器配置的是私網192.168.10.1的地址,需要防火墻做NAT server,把202.100.1.12映射到192.168.10.1,這時候外網用戶只需要訪問202.100.1.12即可。
基礎的對接:
#interfaceGigabitEthernet1/0/0?undo?shutdown?ip?address?192.168.10.254?255.255.255.0#interfaceGigabitEthernet1/0/1?undo?shutdown?ip?address?202.100.1.11?255.255.255.0#ip?route-static?0.0.0.00.0.0.0?202.100.1.1#firewall?zone?untrust?set?priority?5?add?interface?GigabitEthernet1/0/1#firewall?zone?dmz?set?priority?50?add?interface?GigabitEthernet1/0/0#一對一映射配置:?[USG6000V1]natserver??global?202.100.1.12?inside192.168.10.1?沒錯就一條命令,非常的簡單的,難點就在于,安全策略如何放行,之前博主介紹過一個解決方法,在不知道如何放行安全策略的時候,直接把默認安全策略改為permit。?臨時安全策略放行:[USG6000V1]security-policy[USG6000V1-policy-security]default??action?permit?
實際測試:
通了,配置非常非常的簡單,但我們需要了解的不單單是配置,而是它為什么通的,策略應該如何去放行。
看會話表似乎看不出來什么,跟源NAT一樣,一對一映射的202.100.1.12被轉換成了192.168.10.1,安全策略還是不知道如何放行,我們來看一個神奇的地方!
神奇不神奇?服務器能夠直接上外網,轉換的是202.100.1.12出去的,但是博主這里是沒有配置任何的源NAT策略的,只有一對一的映射配置,這里就要說一下 NAT server配置后,它會生成server-map表,這個表項在學習多通道協議的時候遇見過,來看看NAT Server 生成的server-map表有哪些內容。
與多通道協議生成的server-map不一樣的地方,可以發現這個表項是沒有時間的,也就是說是靜態的,只要配置了nat server,那么就會自動生成表項,細心的會發現,這里有兩個表項。
(1)正向 server-map表,Type: Nat Server, ANY ->202.100.1.12[192.168.10.1], , 這個的意思是什么呢,當任意地址(any)向(->)202.100.1.12發起訪問的時候,報文的目的地址和端口號會被轉換成192.168.10.1,包括端口號,這個的作用就是當公網用戶訪問服務器時能夠正常的進行目的地址轉換,完成映射。
(2)反向server-map表,Type: Nat Server Reverse, 192.168.10.1[202.100.1.12] -> ANY,這個的作用是當私網192.168.10.1主動發起訪問外網的時候,直接可以通過該反向表轉將源地址轉換成202.100.1.12,從而能夠讓私網用戶訪問外網的操作,不需要在單獨的做源NAT策略。也就是一旦配置了nat server后,一條命令同時打通了兩個方向的地址轉換。
(3)注意的是這里的server-map僅僅是轉換的功能,并沒有繞過安全策略的通道,所以可以發現在會話表里面不管是外網訪問服務器的地址,還是內網服務器主動訪問外網,都能夠匹配上default的安全策略。?但是這里博主說下,nat server的server-map雖然不能過繞過安全策略,但是它處理的流程還是一樣的優先查看server-map表,明白了這個,把整體流程整理下就應該知道如何放行安全策略了。
整體的流程就是,公網的某個路人甲用戶(61.128.0.1)發起對于202.100.1.12的WWW或者FTP的訪問,防火墻收到這個報文后首先會匹配server-map表,發現有匹配項,直接把202.100.1.12轉換成了192.168.10.1,然后查找路由,找到出接口,根據入與出接口所在的安全區域,得到報文在哪兩個安全區域之間流動,然后進行安全策略匹配,?所以這里得到的結論就是服務器轉換的過程在安全策略之前,那么安全策略放行服務器的流量的時候,則放行的是真實的服務器地址與端口號,并不需要去關心公網IP與服務是多少。
實際的安全策略配置:
[USG6000V1]??security-policy
[USG6000V1-policy-security]defaultaction??deny#先還原默認的策略為deny?[USG6000V1-policy-security]rulename?untrust_dmz[USG6000V1-policy-security-rule-untrust_dmz]source-zoneuntrust[USG6000V1-policy-security-rule-untrust_dmz]destination-zonedmz[USG6000V1-policy-security-rule-untrust_dmz]destination-address192.168.10.1?32[USG6000V1-policy-security-rule-untrust_dmz]service?http[USG6000V1-policy-security-rule-untrust_dmz]service?ftp[USG6000V1-policy-security-rule-untrust_dmz]actionpermit?[USG6000V1-policy-security]rulename??DMZ_untrust[USG6000V1-policy-security-rule-DMZ_untrust]source-zonedmz[USG6000V1-policy-security-rule-DMZ_untrust]destination-zone??untrust[USG6000V1-policy-security-rule-DMZ_untrust]source-address192.168.10.1?32[USG6000V1-policy-security-rule-DMZ_untrust]actionpermit
這里配置了兩個策略:
(1)第一個策略配置的是從untrust到DMZ抵達192.168.10.1的http/ftp流量放行,博主這里比較建議,實際中對外提供什么樣的服務,那么安全策略就放行對應的服務端口號即可,不建議用any,一對一會把所有的端口號都映射給服務器,但是這樣帶來的安全隱患太大了,安全策略里面加以控制。
(2)第二個策略是配置的DMZ到untrust,讓服務器能夠正常的訪問外網的流量。
這個時候看會話表中的安全策略已經匹配對應的了。
一對一映射使用場景、帶來的問題以及跟DMZ有什么關系?
1、?先聊聊DMZ,不知道大家在家用路由器以及軟路由或者是光貓里面有沒有見到過有一個DMZ的配置選項,防火墻安全區域里面也有一個DMZ,博主在介紹區域的時候講解DMZ的作用提到過,當有對外網提供服務的服務器主機的時候,可以把它放到DMZ區域,這樣對內網的安全多了一層保護,那么這些家用路由器、光貓、軟路由上面的DMZ實際指的是DMZ主機,當你在配置后它的作用就是跟華為防火墻的一對一映射效果是一樣的,所以當客戶跟你說要實現DMZ主機功能或者是DMZ映射的時候,那就是說的一對一的轉換。
2、?帶來的問題是什么呢?在理想的實驗環境下,發現訪問www/ftp這些,只要配置對了就沒任何問題,但是現實環境中,往往就不一樣了,就拿80、443、8080這些主流的WEB端口號來說,目前的運營商默認情況下大部分都是過濾禁止了,就是你配置了80,8080,會發現訪問不成功,這個是很多剛接觸網絡或者在實施映射的時候最常見的一件事情,對于80、443、8080這些端口號運營商是要求你提供的WEB服務已經備案過了,這個時候運營商才會給你開通80、443、8080端口號,但是實際中往往很多比如ERP、臨時測試的業務內網都是用的80端口號,沒到需要備案的地步,一對一或者說DMZ帶來的問題就是,外網用戶發對映射地址的80訪問,就會被轉換到內網服務器的80,它們之間端口號是一致的,不能實現說外網訪問9999,映射到內網的80這樣的效果;再一個問題就是安全性問題,一對一的映射是把所有端口號都給映射出去了,比如這臺服務器就對外提供了FTP服務,但是還運行了3389、iis等應用,一對一配置后,把不想對外提供的服務也給映射出去了,雖然可以通過安全策略來控制,但是實際是消耗了設備的性能的,因為中間會通過server-map表轉換一次。
3、?一對一使用的場景主要是(1)公網地址特別多,內網服務器也多的情況? (2)需要映射的端口號比較多,比如10001到12500,這個時候還是比較建議用一對一來減少工作量的。
NAT Server之端口映射
端口映射從字面意思其實就容易理解,它的功能就是對需要對外提供服務的端口號已經映射發布,這樣解決了一對一映射帶來的問題,而且比較靈活,靈活的地方在于一對一必須內外網相同的端口號,而端口號映射則不一樣,比如內網使用80、3389,而外網端口號可以自定義其他的,靈活性跟安全性都可以,唯一的缺點就是一次只能映射一條,不過華為防火墻提供了批量范圍配置的功能。
還是上面的環境與配置,只是這次對外提供的只有?WWW?服務了,考慮到標準的?80?、?8888?、?8080?這些端口號被運營商禁止了,外網端口號采用非標準的端口號?9898?來進行映射。
端口映射配置:
[USG6000V1]nat?server?protocol?tcp?global?202.100.1.12?9898?inside?192.168.10.1?80
安全策略配置:
之?前一對一映射是會生成正反server-map表項,端口映射也會生成正反,但是跟一對一有點小區別,多了一個端口號。
(1)正向server-map:Type: Nat Server, ?ANY ->202.100.1.12:9898[192.168.10.1:80], Zone:---, protocol:tcp,這個的意思是當任何外網客戶端訪問202.100.1.12:9898,會把目的地址轉換成192.168.10.1:80,并且規范了協議是TCP。
(2)反向server-map:Type: Nat Server Reverse, 192.168.10.1[202.100.1.12] -> ANY, Zone:---, ?protocol:tcp,之前一對一是允許192.168.10.1通過源地址轉換成202.100.1.12出去上網,但是端口映射里面多?一個規范 protocl:tcp,那是不是異味只能訪問TCP的流量呢?來驗證下。
[USG6000V1]??security-policy
[USG6000V1-policy-security]rulename?untrust_dmz[USG6000V1-policy-security-rule-untrust_dmz]source-zoneuntrust[USG6000V1-policy-security-rule-untrust_dmz]destination-zonedmz[USG6000V1-policy-security-rule-untrust_dmz]destination-address192.168.10.1?32[USG6000V1-policy-security-rule-untrust_dmz]service?http[USG6000V1-policy-security-rule-untrust_dmz]actionpermit?[USG6000V1-policy-security]rulename??DMZ_untrust[USG6000V1-policy-security-rule-DMZ_untrust]source-zonedmz[USG6000V1-policy-security-rule-DMZ_untrust]destination-zone??untrust[USG6000V1-policy-security-rule-DMZ_untrust]source-address192.168.10.1?32[USG6000V1-policy-security-rule-DMZ_untrust]actionpermit?跟一對一映射一樣,放行了內外網雙方向。
實際測試:
首先公網的路人甲訪問是沒任何問題的,注意端口號是9898.
沒通,看會話表的情況是包出去了,沒有回包,沒回包是正常的,因為192.168.10.1并沒有被轉換,那么這個私網地址跑到公網去,肯定是沒法回復的,最終丟棄了,那么是不是真的只轉換TCP的流量呢?
可以把客戶端與服務器對換下位置,然后在來測試下。
確實TCP的流量直接被轉發了,但其他協議的流量是不會轉換的,所以端口映射的反向轉發流量取決于protocol定義的協議來決定能否轉發,如果定義的TCP,那么在沒有配置源NAT策略的時候,只轉換TCP流量,所以這個時候如果內網的服務器需要訪問外網,建議單獨配置一個源NAT策略。
nat-policy
?rule?name?DMZ_untrust??source-zone?dmz??destination-zone?untrust??source-address?192.168.10.0?mask255.255.255.0??action?source-nat?easy-ip
這個時候能夠訪問了,但是注意的是這里轉換的是出接口的地址 202.100.1.11,而不是用的server-map反向直接轉換的。
如果公網地址就一個怎么辦呢?
在實際的場景中,很多時候公網地址只有一個,那么這一個就是會配置在接口上面,即提供源NAT功能,如果有需要對外提供服務的時候,還需要做NAT server,映射的方式是一樣的,但是這里博主講解幾個需要注意的地方。
(1)能用端口映射解決的就用端口映射,不要用一對一。
(2)如果端口號非常多,只能使用一對一的方式的話,會造成防火墻本身的管理訪問受影響,比如HTTPS、TELNET、SSH等,都會被映射轉換。
(3)如果對接外網的方式是PPPOE方式,是動態公網IP的話,需要關聯DDNS(主流的花生殼或者3322都可以),關聯后,映射配置不要使用WEB配置,用命令行配置,WEB會有一個非常坑的地方,WEB關聯的是地址,而不是接口,而PPPOE撥號的地址是會變化的,命令行是可以直接關聯接口的,這樣不管怎么變化都沒關系。(這個在后面實際案例中會詳細講解,這里先提及下)。
實際案例:假設有100個端口(10501-10600)需要映射,怎么辦?
如果是在UTM時代是不支持批量映射的以及在下一代防火墻早期版本也是不支持,到了后面版本(具體多少開始的查不到了),開始支持批量范圍的設置了,但是現實就沒這么美好,華為防火墻設備根據性能的不同,批量映射支持的范圍也不一樣
比如模擬器或者博主真機的6307E的低端系列測試的結果是一次性只能映射64個,超過64個提示映射的范圍太大,而且會發現這些系列 nat server的條目也差不多在64個左右,多了就不讓創建了,而性能好一些的創建范圍在200個都沒問題,但是在多就不行了,博主這里也沒法給一個具體值,只能自己實踐下測試或者是問華為的400。
一對一映射和端口映射如何選擇?
(1)如果公網IP就一個的情況下,能使用端口映射盡量使用端口映射
(2)一對一映射比較適合在映射端口號非常多,而公網IP有多個的情況下
(3)在實在沒辦法只能一對一映射的情況下安全策略盡量做到精細匹配,保證業務不受影響的情況下,盡可能的保障安全。
“承上啟下”
對于單一出口的場景,博主主要的內容都介紹完畢了,在實際工作中可能客戶還存在這樣的情況,多出口(聯通、電信),這樣的場景下該如何去部署NAT server功能呢?答案下篇認真學,可以解決這個疑問!~
總結
以上是生活随笔為你收集整理的NAT技术之NAT server的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用JDBC技术完成一个简单的账务管理系
- 下一篇: JPG图片中的文字或表格怎么转成Word