公網地址訪問內部服務器時TCP三次握手不成功安全
1、 背景服務器
在上圖所示的網絡中,PC 及Server屬不一樣LAN,都是zone trust。爲了讓Internet用戶可以訪問到Server,FW上部署了NatServer:nat server global A.B.C.D inside 192.168.51.M也就是將公網地址A.B.C.D映射到192.168.51.M。完成上述配置後,Internet用戶可以經過A.B.C.D這個公網IP訪問Server。可是內網的PC在訪問Server的時候,卻存在一點問題:PC經過私有IP地址192.168.51.M可以訪問Server的Web服務,可是當PC使用該服務器映射的公網地址A.B.C.D試圖訪問Server的時候,卻發現始終沒法成功。網絡
2、 PC使用公網地址訪問Server的過程ide
PC使用公網地址A.B.C.D試圖訪問Server,首先要創建TCP三次握手,報文的源IP地址爲10.1.2.X,目的地址爲A.B.C.D,數據包被送到網關防火牆。spa
防火牆因爲部署了NAT server,所以將數據包的目的地址A.B.C.D轉換成192.168.51.M,而後查路由表,發現網絡嚇一跳出口GE0/0/1。server
防火牆將地址轉換後的數據包發向Server。blog
Server收到數據包後,得回包吧,因爲Server收到的這個數據包源地址爲10.1.2.x,所以它在產生回程數據包的時候,回程數據包的目的地址就是10.1.2.x,而10.1.2.x又是本地網絡內的節點,所以Server直接將這個源爲192.168.51.M,目的地址爲10.1.2.x的數據包發送給了PC,而不用再繞回防火牆。路由
PC在收到這個數據包的時候,發現數據包的源地址是192.168.51.M,這個地址是哪裏冒出來的?它等候的是A.B.C.D的回程報文,但是如今卻收到了192.168.51.M的數據包,它將該報文丟棄。部署
3、 緣由get
數據包沒有繞回防火牆,致使PC收到的回程數據包源地址沒有被正確的轉換,從而TCP三次握手不成功。要解決這個問題,就須要讓回程的流量可以回到防火牆,而後讓防火牆將源地址轉換成A.B.C.D再發給PC。
4、 解決方法
回程的流量可以回到防火牆,而後讓防火牆將源地址轉換成A.B.C.D再發給PC。
能夠經過在防火牆上爲PC建立一個NAT地址池,而後部署trust安全域內的源地址轉換便可:
[FW] nat address-group 110.199.254.x
[FW] nat-policy zone trust
[FW-nat-policy-zone-trust] poliyc 10
[FW-nat-policy-zone-trust-10] policy source any
[FW-nat-policy-zone-trust-10] policy destination 192.168.51.M 0
[FW-nat-policy-zone-trust-10] action source-nat
[FW-nat-policy-zone-trust-10] address-group 1
5、 數據包交互的過程
PC使用公網地址A.B.C.D訪問Server,首先要創建TCP三次握手,報文的源IP地址爲10.1.2.x,目的地址爲A.B.C.D,數據包被送到網關防火牆。
防火牆因爲部署了nat server,因而首先將數據包的目的地址A.B.C.D轉換成192.168.51.M,隨後又發現還部署了源地址轉換,要把源地址爲10.1.2.x、目的地址爲192.168.51.M的數據包進行源地址轉換,將源地址轉換成10.199.254.x。
防火牆將地址轉換後的數據包發向Server:
服務器收到數據包後要發回程報文,回程報文的源地址爲192.168.51.M,目的地址爲10.199.254.x,這個數據包被髮向了Server的網關192.168.5.1.254,最終到達防火牆。
防火牆收到這個數據包後,因爲本地已經有了NAT的映射條目,所以將數據包的源地址192.168.51.M替換成A.B.C.D,將目的地址10.199.254.x替換成10.1.2.x。
防火牆將數據包轉發給PC。
PC收到這個數據包後,發現正是本身期待的A.B.C.D的回包,所以TCP三次握手成功。