FTP主動模式和被動模式(2)- 防火牆對FTP的影響 ASPF

向往自由的独行者發表於2024-05-09

防火牆對FTP的影響 ASPF

多通道協議

應用層程式有些使用的是單通道協議,有些使用的是多通道協議。

  • 單通道協議

    例如http協議,整個協議互動過程中,服務端和客戶端只建立一個連線,並且服務端固定使用一個埠,例如80埠,這種一般為單通道協議;

    防火牆一般都需要配置精細的安全策略對資料進行防護,針對這種單通道協議,例如http,只需要放行客戶端的隨機埠到伺服器端的80埠就可以了,比較簡單。

  • 多通道協議

    例如FTP協議,整個協議互動過程中,客戶端和伺服器端使用了兩個獨立的連線,控制連線和資料連線,控制連線伺服器端使用了固定的埠21,但是資料連線則使用了隨機的埠;

    防火牆針對這種多通道協議的資料連線則較難寫安全策略,例如FTP的被動模式,客戶端和伺服器端的埠都是隨機的,那防火牆就很難寫精細的安全策略放行此類資料。

    常見的多通道協議有FTP,SIP,H323,RSTP,DNS,MSN,QQ,WeChat等;

ASPF和Server-map

ASPF(Application Specific Packet Filter,應用層的包過濾)是一種針對應用層的包過濾技術,也稱為基於狀態的報文過濾。

防火牆的ASPF技術配合server-map表項就用於解決多通道協議的資料連線策略,以FTP為例,上面已經瞭解,FTP有控制連線和資料連線,在控制連線上伺服器端使用固定的埠21,防火牆是可以定義策略的,允許客戶端的任意埠訪問伺服器端的TCP21埠即可,後續控制連線的其他報文會被識別為此控制連線的後續報文,允許透過,這樣FTP的控制連線就可以正常建立了;

對於資料連線的主動模式,如果伺服器端使用固定埠20的情況下,需要放行伺服器端20埠到客戶端任意埠的報文,對於客戶端在防火牆內部的情況,這種策略是比較危險的,因為一般是不允許外部主動向內部發起訪問的,而且對於伺服器使用隨機資料埠的場景,防火牆的策略則需要放行伺服器端的任意埠到客戶端的任意埠,顯示這對於防火牆策略就更寬鬆了,很難達到防護的效果;

對於資料連線的被動模式,因為客戶端的隨機埠訪問伺服器端的隨機埠,如果客戶端在防火牆內部,則還可以寫一下,但是策略依舊是很寬鬆的,對於客戶端在防火牆外側的場景,要放行外部客戶端的任意埠訪問內部伺服器的任意埠,防火牆策略一般是不允許的。

總之,透過上面的描述可知,防火牆基於會話的安全策略機制在FTP這種多通道協議的場景是非常不友好的,如果寫的嚴格一些,就會出現FTP的控制連線可以建立,但是資料無法傳輸的情況。那要如果解決呢?這就需要透過防火牆的ASPF機制和server-map結合來解決上述問題了。

還是以FTP為例,FTP的資料連線使用埠雖然是隨機的,但是透過FTP原理的描述,我們知道這個隨機埠是在控制協議中確定出來的,例如FTP主動模式的PORT命令和被動模式的PASV命令,都是為了確定資料連線中客戶端的埠和伺服器端的埠,而ASPF會監控FTP控制連線的報文,獲取到PORT命令或PASV命令中的地址和埠資訊,自動將這個資訊寫入到防火牆的Server-map表中,形成一條Server-map表項,後續的資料包文就會匹配到該表項,就無需再去匹配防火牆的策略和會話表,直接放行後續資料,這樣資料連線就可以正常建立,而防火牆的安全策略只需要寫第一個控制連線的報文即可。

防火牆的Server-map表如下,實現的就是自動生成的主動模式下的資料連線會話:

image

FTP主動模式下防火牆的實現

以FTP協議的主動模式(伺服器主動訪問客戶端)為例,FW檢測PORT命令報文的應用層資訊,將應用層攜帶的IP地址和埠記錄在Server-map表中。

FTP主動模式下,客戶端使用隨機埠xxxx向伺服器的21埠發起連線請求建立控制通道,然後使用PORT命令協商兩者建立資料通道的埠號,協商出來的埠是yyyy。然後伺服器主動向客戶端的yyyy埠發起連線請求,建立資料通道。資料通道建立成功後再進行資料傳輸。

在配置安全策略時,如果只配置了允許客戶端訪問伺服器的21埠的安全策略,即控制連線能成功建立。但是當伺服器訪問客戶端yyyy埠的報文到達FW後,對於FW來說,這個報文不是前一條連線的後續報文,而是代表著一條新的連線。要想使這個報文順利到達FTP客戶端,FW上就必須配置了安全策略允許其透過,如果沒有配置伺服器到客戶端這個方向上的安全策略,該報文無法透過FW,導致資料通道建立失敗。結果是使用者能訪問伺服器,但無法請求資料。

如果透過安全策略解決此問題,資料通道使用的埠是在控制通道中臨時協商出來的,具有隨機性,無法精確預知,所以只能開放客戶端的所有埠,這樣就會給客戶端帶來安全隱患。ASPF功能正是為了解決此問題。

下圖顯示了主動模式下ASPF和server-map表的實現過程,由於PORT命令的應用層資訊中攜帶了客戶端的IP地址和向伺服器隨機開放的埠,FW透過分析PORT命令的應用層資訊,提前預測到後續報文的行為方式,根據應用層資訊中的IP和埠建立Server-map表。伺服器向客戶端發起資料連線的報文到達FW後命中該Server-map表項,不再受安全策略的控制。

image

server-map表項類似這樣:

ftp-data  VPN:public->public  2.2.2.2:20 --> 1.1.1.1:yyyy

FTP被動模式下防火牆的實現

FTP被動模式下,客戶端使用隨機埠xxxx向伺服器的21埠發起連線請求建立控制通道,然後使用PASV命令協商兩者建立資料通道的埠號,協商出來的埠是yyyy。然後客戶端主動向伺服器的yyyy埠發起連線請求,建立資料通道。資料通道建立成功後再進行資料傳輸。

在配置安全策略時,如果只配置了允許客戶端訪問伺服器的21埠的安全策略,即控制連線能成功建立。但是當客戶端訪問伺服器yyyy埠的報文到達FW後,對於FW來說,這個報文不是前一條連線的後續報文,而是代表著一條新的連線。要想使這個報文順利到達伺服器,FW上就必須配置了安全策略允許其透過,如果沒有配置客戶端到伺服器的yyyy埠的安全策略,該報文無法透過FW,導致資料通道建立失敗。結果是使用者能訪問FTP伺服器,但無法請求資料。

下圖顯示了主動模式下ASPF和server-map表的實現過程,由於PASV命令的應用層資訊中攜帶了資料連線中客戶端使用的ip地址和埠號,防火牆透過分析PASV命令中的引數,提前預測到後續報文的行為方式,根據應用層資訊中的IP和埠建立Server-map表。後續客戶端向伺服器端發起的資料連線就會命中該server-map表項,不用查詢防火牆的策略表就可以放行後續報文。

image

server-map表項類似這樣:

ftp-data  VPN:public->public  1.1.1.1:aaaa --> 2.2.2.2:yyyy

埠識別

上面的ASPF+Server-map實現防火牆透傳FTP報文的需求是針對標準的FTP燈多通道協議進行識別的,一般只有控制連線的埠號為TCP21才會被識別為FTP報文,進而被ASPF進行分析,但是在生產中我們有時出現安全考慮會把FTP是埠使用非標準埠,這就會導致ASPF無法識別這是FTP協議,無法生產資料連線的Server-map表現。

此時我們需要額外配置埠識別功能,讓ASPF知道這就是FTP報文,進行資料連線的埠分析,使用方式如下:

  • 華為/華三

    # 把匹配acl 2000的報文,建立埠號31到FTP協議的對映
    acl 2000
     rule permit source 10.1.2.0 0.0.0.255
     exit
    port-mapping FTP port 31 acl 2000 
    

邁普ASPF配置示例

  • 需求:Device為連線內部網路與外部網路的邊界裝置,內網中的本地使用者PC訪問公網上的ftp伺服器。在Device上配置ASPF策略,將裝置報文入介面Gi0/2/0加入安全級別高的安全域,出介面Gi0/2/1加入安全級別低的安全域,ASPF和安全域協同工作,安全域之間的報文由安全策略進行安全檢查,實現ftp多通道協議檢測功能。

  • 拓撲:

image

  • 配置步驟:

    • 配置ASPF策略開啟ftp資料通道檢測功能。

      Device#configure terminal 
      Device(config)#aspf policy 1
      Device(config-aspf-policy)#detect ftp
      Device(config-aspf-policy)#exit
      
    • 配置安全策略和安全域。

      #配置源安全域物件zone1,目的安全域物件zone2。
      Device(config)#security zone name zone1
      Device(config-security-zone)#import interface gigabitethernet 0/2/0 
      Device(config-security-zone)#priority 80
      Device(config-security-zone)#exit
      Device(config)#security zone name zone2
      Device(config-security-zone)#import interface gigabitethernet 0/2/1
      Device(config-security-zone)#priority 60
      Device(config-security-zone)#exit
      
      #配置安全策略匹配源安全域zone1和目的安全域zone2,動作action為inspect aspf policy。
      Device(config)#security policy 1
      Device(config-security-policy)#match source security-zone zone1
      Device(config-security-policy)#match destination security-zone zone2
      Device(config-security-policy)#action inspect aspf-policy 1
      Device(config-security-policy)#exit
      
    • 檢驗結果。

      #檢視策略號為1的ASPF配置資訊。
      Device#show aspf policy 1
      ASPF policy configuration:
      Policy Id: 1
      Policy description: 
      TCP SYN packet check: Disable
      ICMP error message check: Disable
      Inspected protocol:
      ftp
      
      #內部私網PC從安全級別高的安全域的介面向安全級別低的安全域的介面的伺服器採用PORT方式進行ftp傳送資料,上傳、下載檔案成功,資料通道預期連線建立正確。
      Device#show connection ipv4 table lpu 0
      Device0: LPU 0, IPV4 connection table
      Protocol  Source:port               Destination:port/other    State          Lifetime  Vrf
      --------  ---------------------     ---------------------     ----------     --------  --------
      TCP       [1.1.1.2]:4945            [203.18.10.2]:21          tcp-time-wait    1       global
      TCP       [203.18.10.2]:20          [1.1.1.2]:4946            tcp-time-wait    1       global
      
      #內部私網PC從安全級別高的安全域的介面向安全級別低的安全域的介面的伺服器採用PASV方式進行ftp傳送資料,上傳、下載檔案成功,資料通道預期連線建立正確。
      Device#show connection ipv4 table lpu 0
      Device0: LPU 0, IPV4 connection table
      Protocol  Source:port               Destination:port/other    State          Lifetime  Vrf
      --------  ---------------------     ---------------------     -----------    --------  --------
      TCP       [1.1.1.2]:49320           [203.18.10.2]:21          tcp-time-wait    1      global
      TCP       [1.1.1.2]:38805           [203.18.10.2]:11656       tcp-time-wait    1      global
      
      #從外部網路發起各種連線的報文無法進入內部網路。
      

相關文章