現在IP網絡裡面離不開TCP、UDP這兩種傳輸層協議,主流應用都基于這兩種協議來做封裝傳輸,對于TCP來說,在發送實際數據的時候必須先建立可靠的連接,俗稱 ”三次握手”,而UDP則不需要建立連接,它有數據就直接發送出去。當然除了這些協議以外,網絡層用的比較多的ICMP、ESP、OSPF、BGP等協議,這就要求防火牆能夠分析各種協議的交互模式,能夠準确的識别并且建立會話信息,我們來了解了解這些常見主流協議的會話建立,對于後續排錯是很有幫助的。
對于TCP在防火牆上的會話建立上面說過TCP的建立需要雙方進行三次會話交流,也就是“三次握手”的過程,我們來看防火牆是如何建立會話的。
對于一個正常的網絡構建TCP建立,首先進行三次握手
(1)Client發送SYN(序列号假設為a),防火牆收到這個報文後會檢查是否符合TCP協議規範,并且看安全策略是否允許該報文通過,通過後開始建立會話信息,并且實時關注後續的建立過程。
(2)服務器回應,發送SYN ACK(seq=b,ack=a 1),其中ack用于确認已經收到來自于Client的SYN,表示已經收到了,服務器也會發送SYN來與Client進行建立同步會話,這裡序列号為b
(3)防火牆收到這個報文後檢查會話表發現是來自于剛建立(1)會話表的同一個會話,直接允許通過,Client收到後,回應服務器一個ack(b 1),表示已經收到了,發送出去,防火牆發現整個TCP會話建立已經完成,會把TCP的狀态變成established,表示整個TCP建立完成,等待實際數據發送。
結合抓包跟狀态表查看就是
首先Client 192.168.1.1往192.168.2.1發送SYS,seq=0,服務器收到後回應ACK1(對應Client發過來的SYN的seq=0 1),并且也同時發送一個SYN給客戶端seq=也是0,客戶端收到後直接回複ACK=1(對應服務器發送過來的SYN),最終會話建立,開始發送HTTP實際訪問。
總結:TCP連接的首發标志就是SYN報文,防火牆在狀态檢測開啟的情況下,在收到TCP的SYN首包情況并且安全策略允許的情況下就會創建會話信息。
對于UDP在防火牆上的會話建立UDP對于TCP來說就簡單很多了,它是沒有連接狀态的協議,在防火牆上面的話則隻要安全策略允許通過,則會直接創建會話信息。
對于ICMP在防火牆上的會話建立
ICMP的類型非常多,我們常用的比如ping、tracert都屬于ICMP範圍,ping的話有兩種主要的類型,一個是echo request(回顯請求報文)、一個是echo replay(回顯應答報文),在狀态開啟的情況下,防火牆收到來自于echo request(回顯請求報文),并且安全策略允許的情況下,就會建立會話,如果防火牆沒有收到ping的回顯請求,卻收到了ping的回應報文,那麼會話是不會建立的,直接丢棄。
這裡注意下,ICMP是網絡層協議,沒有端口号的,但是防火牆會把ICMP報頭中的序列号字段作為源端口号,以固定值2048作為會話的目的端口号。
異步路由導緻來回路徑不一緻的場景
正常情況下,數據包的來回路徑是保持一緻的,這樣是很正常,但是也存在特殊的環境,比如跨運營商或者是網絡規劃以及配置上的失誤導緻了來回路徑不一緻的情況出現,那麼出現了這種情況,會遇到什麼樣的問題呢?(這個也是第五篇最後提的一個問題),我們來實際驗證下。
實驗拓撲根據自己想實驗難度的來搭建
難度一點的,這個環境實現其實比較簡單的,防火牆策略全放,然後寫靜态去往server1指向ISP2,而回Client的流量邊界指向ISP1,這樣就來回路徑不一緻了,但是這個有點太繁瑣了,所以博主這裡比較推薦大家用一個簡單點的拓撲。
PC去往服務器的時候直接通過路由器抵達,而返回的數據包,則路由器利用策略路由特性強制它交給防火牆,防火牆在寫192.168.1.1的路由指向10.1.1.1交給路由器,形成一個路徑不一緻的環境,策略可以全放。(具體步驟就不在給出了,購買課程了的朋友可以直接看視頻講解,留言處有環境源文件提供,都可以直接參考)
實際測試下(分别抓取E0/0/1以及G1/0/0 10.1.2.2接口的包,這裡圖上面顯示錯誤了,實際G1/0/0在上面 G1/0/1是下面的口)
首先客戶的發起訪問,這個結果肯定是失敗的。
可以發現,路由器上面能夠看到客戶端發起的SYN建立,以及服務器回應的SYN ACK,而防火牆上面隻收到了SYN ACK。
這個時候數據轉發路徑與處理情況就是這樣
(1)Client1發起TCP首包SYN建立,交給路由器處理
(2)路由器查詢路由表直接丢給Server1
(3)Server1回應SYN ACK,在路由器返回的時候,由于對接服務器的接口調用了策略路由,它會把這個數據包強制的交給10.1.2.2處理,這個時候防火牆收到後發現會話表并沒有存在該數據包的匹配信息,而且這個包不是TCP的首發SYN包,則直接丢棄。
導緻這個丢棄的原因我們在上面已經深入了解了防火牆對于TCP建立會話的前提條件就是收到的包必須是首發SYN的包,而這裡防火牆收到的是首發是SYN ACK,那麼防火牆則直接不予處理丢棄掉。那麼在實際中真的遇到這樣的情況了,防火牆也是可以處理的,由于狀态檢測機制的存在,它會檢測各種協議的特征與是否規範,我們可以關閉這個功能,防火牆就不會對連接的狀态進行分析,就相當于包過濾的策略一樣,後續報文隻要有安全策略允許,則直接通過。
[USG6000V1]undo firewall session link-state check :關閉很簡單,一條命令搞定,這裡博主提醒,關閉狀态檢測功能,防火牆就失去了它的魅力所在了,除非在一些特殊的環境,不建議關閉這個功能。
這個時候客戶端訪問成功了。
防火牆的會話表會發現,收到的為0,發出去的有數據,這是因為Client1發送的流量直接路由器轉發給服務器了,服務器回應的流量才經過防火牆,所以出現了這種特殊的狀況。
總結TCP/UDP/ICMP協議會話創建的情況會話創建的情況包括開啟狀态檢測機制與關閉,上面TCP已經驗證完畢了,也可以趁着這個環境驗證下UDP與ICMP,博主就不在演示了,這裡給出一個總結 。
建議大家可以在開啟與關閉下測試測試TCP、UDP、ICMP協議的情況,對于大家在學習狀态檢測、會話機制有很大的幫助,也為排錯提供了一個很好的思路。
博主經驗分享在實際中如果遇到了特殊環境,确實需要關閉狀态檢測的情況下,但是關閉狀态檢測防火牆就回到了傳統的包過濾時代功能了,防火牆提供了一個非常好的功能,就是可以指定某些流量關閉狀态檢測,其餘的保持不變。
#
acl number 3000
rule 5 permit ip source 192.168.2.1 0 destination 192.168.1.1 0
#
firewall session link-state exclude acl 3000
#
firewall session link-state check
可以看到這個功能就很實用,帶來的風險也不大,對于特定會話存在這種情況的,用ACL匹配出來,可以利用exclude來關閉狀态檢測,這樣的話對應ACL的不啟用狀态檢測,其餘的還是會啟用。
WEB操作關閉狀态檢測“承上啟下”
至此安全區域與狀态檢測就學習完畢了,但是裡面涉及到安全策略是不是很陌生,那麼它跟我們學習完的安全區域、狀态檢測會話有什麼關聯呢?為什麼在講解安全策略之前要先把這些講解完畢,下一篇我們就進入安全策略的内容。
介紹《華為下一代USG防火牆(由淺入深實際案例系列)》是博主原創的針對華為廠商下一代USG防火牆組網系列應用部署為主的系列課程,結合實際環境出發,加上了博主部署經驗以及會遇到哪些問題等進行綜合,做到學以緻用,給各位看官朋友一個不一樣的學習體驗。
如果大家有任何疑問或者文中有錯誤跟疏忽的地方,歡迎大家留言指出,博主看到後會第一時間修改,謝謝大家的支持,更多技術文章盡在網絡之路Blog,版權歸網絡之路Blog所有,原創不易,侵權必究,覺得有幫助的,關注、轉發、點贊支持下!~。
上一篇回顧
24、基于無線場景的内置portal匿名登錄與接入碼功能
下一篇學習
26、基于愛快網關自帶的認證功能打造一個低成本的網頁認證網絡
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!