路由器安全-FPM

一、FPM(也叫NGACL)正則表達式

FPM是Cisco IOS新一代的ACL,叫作Flexible Packet Matching,靈活的包匹配。架構

  • 根據任意條件,無狀態的匹配數據包的頭部,負載,或者所有。
  • 分析協議,更易於規則的建立。
  • 用於替代傳統的ACL,對特定的惡意流量的基礎架構過濾。

以下是一個示例:tcp

FPM的限制:spa

①無狀態的,若是是有狀態的,那和防火牆也沒啥差異了。xml

②只能匹配IPv4單播包。blog

③不能去分析報文的IP options 。接口

④不支持tunnel或者MPLS接口。ip

⑤一些特殊的網卡FlexWAN Cards也不支持。ci

⑥非初始化的fragment也不能匹配。input

 

FPM三種匹配流量的方式:

①使用協議頭描述文件(Protocol Header Description File,PHDF);

②基於offset(偏移量)和length直接匹配流量;

③以上兩種的混合。

 好比,以下是ip.phdf的一部分(XML文件):

注意:可能之後配置都是xml or JSON的文件格式了!

 

二、舉例說明FPM功能:

2-一、PHDF文件

咱們看一下Router上的PHDF文件:

R1#dir system:/fpm/phdf/?
system:/fpm/phdf/ether.phdf  system:/fpm/phdf/icmp.phdf
system:/fpm/phdf/ip.phdf     system:/fpm/phdf/tcp.phdf
system:/fpm/phdf/udp.phdf

例如咱們查看ip.phdf文件:

R1#more system:/fpm/phdf/ip.phdf <<<這會顯示出「1」中截圖所示信息

 

2-二、以login invalid爲例

R1嘗試去Telnet R2,這裏故意輸錯密碼,能夠看到以下結果:

R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open


User Access Verification

Username: cisco
Password:
% Login invalid <<<這個信息確定是在PHDF文件中的一個信息

Username:

對這個過程進行分析:

其中的報文中,主要包含Telnet Data,這裏面主要的信息是在創建Telnet遠程鏈接時,輸入的username,另外一個是password,這裏有10個包是包含了cisco這個信息(若是手速夠快,多個字符也可能在一個包中)。另外一個是錯誤的密碼「123」有三個包。

注意:咱們輸入用戶名cisco能看到,是由於對端回顯,而不是咱們鍵盤直接輸入在顯示器顯示的效果,因此,咱們這裏抓取到了10個報文,而密碼123是看不到的,沒有回顯,因此是3個報文。

後續出現的關鍵信息:

這裏,咱們就能夠寫class-map和policy-map去實現,讓這個信息不出如今咱們的顯示中。仍是如以前所說的,關鍵的參數是「偏移量」(也就是指定一個位置算起,到咱們須要匹配的數據的地方,到底有多少個字節),而後是長度有多長字節,匹配的信息是哪些等。

例如這裏吧invalid給deny掉:它的偏移量是10個字節(包含\r\n% Login)包括2個字節的空格,也就是在invalid出現以前,有10個字節,而invalid有7個字節(ASCII)。

 

三、配置操做:

3-1 加載PHDF文件

因爲Telnet是TCP的,因此咱們加載ip.phdf和tcp.phdf就行了

R1(config)#load protocol system:/fpm/phdf/ip.phdf
R1(config)#load protocol system:/fpm/phdf/tcp.phdf

 

3-2 配置Class-map

Class-map分爲stack(堆棧類,就是匹配全部的TCP流量)和access-control(訪問控制器類)

R1(config)#class-map type stack match-all ip-tcp
R1(config-cmap)#match field ip protocol eq 0x6 next tCP  (IP協議號6-TCP;17-UDP;1-ICMP;47-GRE;50-ESP;51-AH)

R1(config)#class-map type access-control match-all DENY-invalid
R1(config-cmap)#match field TCP source-port eq 23
R1(config-cmap)#match field IP length eq 0x47 (這裏是IP長度)
R1(config-cmap)#match start TCP payload-start offset 10 size 7 string invalid   (string invalid能夠換爲正則表達式regex [Ii][Nn][Vv][Aa][Ll][Ii][Dd]

注意,關鍵是看從哪一個頭部開始計算,這裏是TCP負載開始,若是是IP負載開始,那麼offset就是30,若是是L3開始,那就還要加上IP頭部,offset就是50。

命令分別以下:

R1(config-cmap)#match start IP payload-start offset 30 size 7 string invalid

R1(config-cmap)#match start l3-start payload-start offset 50 size 7 string invalid

另外,上面IP長度包中顯示的是10進制,16進製爲47:

 

3-3 配置Policy-map

Policy-map只是access-control類型的。

R1(config)#policy-map type access-control TCP-Policy
R1(config-pmap)#class DENY-invalid
R1(config-pmap-c)#drop
R1(config-pmap-c)#exit
R1(config-pmap)#exit

R1(config)#policy-map type access-control FPM-POlicy
R1(config-pmap)#class ip-tcp
R1(config-pmap-c)#service-policy TCP-Policy

3-4 在接口調用Policy-map

R1(config)#int f0/0
R1(config-if)#service-policy type access-control input FPM-POlicy

查看匹配狀況:

R1#show policy-map type access-control interface f0/0
 FastEthernet0/0

  Service-policy access-control input: FPM-POlicy

    Class-map: ip-tcp (match-all)
      39 packets, 2579 bytes
      5 minute offered rate 0 bps
      Match: field IP protocol eq 0x6 next TCP

      Service-policy access-control : TCP-Policy

        Class-map: DENY-invalid (match-all)
          3 packets, 255 bytes
          5 minute offered rate 0 bps
          Match: field TCP source-port eq 23
          Match: field IP length eq 0x47
          Match: start TCP payload-start offset 10 size 7 string "invalid"
      drop

        Class-map: class-default (match-any)
          36 packets, 2324 bytes
          5 minute offered rate 0 bps, drop rate 0 bps
          Match: any
          
    Class-map: class-default (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: any

驗證,輸入了錯誤的密碼後,一直卡在這裏

R1#telnet 12.1.1.2
Trying 12.1.1.2 ... Open


User Access Verification

Username: cisco
Password:

在查看一下接口上的信息:

R1#show policy-map type access-control interface f0/0
 FastEthernet0/0

  Service-policy access-control input: FPM-POlicy

    Class-map: ip-tcp (match-all)
      83 packets, 5648 bytes
      5 minute offered rate 0 bps
      Match: field IP protocol eq 0x6 next TCP

      Service-policy access-control : TCP-Policy

        Class-map: DENY-invalid (match-all)
          9 packets, 765 bytes
          5 minute offered rate 0 bps
          Match: field TCP source-port eq 23
          Match: field IP length eq 0x47
          Match: start TCP payload-start offset 10 size 7 string "invalid"
      drop        Class-map: class-default (match-any)          74 packets, 4883 bytes          5 minute offered rate 0 bps, drop rate 0 bps          Match: any               Class-map: class-default (match-any)      0 packets, 0 bytes      5 minute offered rate 0 bps, drop rate 0 bps      Match: any

相關文章
相關標籤/搜索