Cisco IOS Control Plane Protectionの設定

スポンサーリンク

Control Plane Protection(CPPr)とはContorl Planeを防御する機能で、Control Plane Policingよりもより柔軟な機能が使用できます。

設定方法

subinterface

CEFによって処理されないパケットはControl Planeによって処理されます。Control Planeによって処理されるパケットは、以下3つのsubinterfaceによって処理されます。

subinterface desctiption
host subinterface ルータ宛のパケットです。RIP, BGPなどが該当します。
transit subinterface CEFで処理されない かつ 他のルータへ転送されるパケットが該当します。
該当するパケットは殆どないので特に深追いの必要はないと思います。
CEF exception subinterface 非IPかつルータ宛のフレームです。CDP, L2 keepalive, ARP, IPXなどが該当します。

使い方は以下のようにcontrol-planeの後に、subinterfaceを指定して下さい。Control Plane Policingと同様にCBAC使用不可である事にも注意して下さい。

Router(config)# control-plane { host | transit | cef-exception }
Router(config-cp-XXXX)# service-policy input <policy-name>

port-filter

host subinterfaceは、Control Plane Policingが提供するようなPolicingの機能だけでなく、port-filterやqueueingを実装する事ができます。

port-filterとはiptablesのようにポート単位の防御が可能な機能だと思ってください。class-map, policy-mapを作成する際にtype port-filterと指定する事で実装可能です。

Router(config)# class-map type port-filter match-any CLOSED_PORTS
Router(config-cmap)# match closed-ports
Router(config-cmap)# match port tcp 23

Router(config)# policy-map type port-filter PMAP_HOST_PORT
Router(config-pmap)# class CLOSED_PORTS
Router(config-pmap-c)# drop

Router(config)# control-plane host
Router(config-cp-host)# service-policy type port-filter input PMAP_HOST_PORT

listenしていないportは”match closed-ports”というキーワードで指定できます。どのポートがlistenしているかはshow control-plane host open-portsコマンドで調査する事ができます。(netstatコマンドと同じ機能です)

Rack2R6#show control-plane host open-ports
Active internet connections (servers and established)
Prot               Local Address             Foreign Address                  Service    State
 tcp                        *:23                         *:0                   Telnet   LISTEN
 tcp                        *:80                         *:0                HTTP CORE   LISTEN
 tcp                        *:80                         *:0                HTTP CORE   LISTEN

Rack2R6#

queue-threshold

host subinterfaceは特定のプロトコル専用のqueueを持つ事ができます。queueing実装可能なプロトコルは以下の通りです。

Router(config)#class-map type queue-threshold match-any CMAP_BGP_QUEUE
Router(config-cmap)#match protocol ?
  bgp     Border Gateway Protocol
  dns     Domain Name Server lookup
  ftp     File Transfer Protocol
  http    World Wide Web traffic
  igmp    Internet Group Management Protocol
  snmp    Simple Network Management Protocol
  ssh     Secure Shell Protocol
  syslog  Syslog Server
  telnet  Telnet
  tftp    Trivial File Transfer Protocol

Router(config-cmap)#match protocol 

host subinterfaceに対してqueueingを実装するには、class-map, policy-mapを作成する際にtype queue-thresholdを指定して下さい。

Router(config)# class-map type queue-threshold match-any CMAP_BGP_QUEUE
Router(config-cmap)# match protocol bgp

Router(config)# policy-map type queue-threshold PMAP_HOST_QUEUE
Router(config-pmap)# class CMAP_BGP_QUEUE
Router(config-pmap-c)# queue-limit 10

Router(config)# control-plane host
Router(config-cp-host)# service-policy type queue-threshold input PMAP_HOST_QUEUE

動作確認

構成図

Internet Expert Workbook Volume Iの構成を用いて動作確認を行います。


 +--------+VL67    Fa0/0.67+--------+Fa0/0.146  Fa0/0+--------+
 +  SW 1  +----------------+   R6   +----------------+   R4   +
 +--------+.7            .6+--------+.6            .4+--------+
            155.X.67.0/24             155.X.146.0/24

 Loopback 0                Loopback 0                Loopback 0
 150.X.7.7/24              150.X.6.6/24              150.X.4.4/24

Internet Expert Workbook Volume I Section 11 Securityの初期設定を読み込みます。さらにR6をHTTP serverとして動作させます。

 [R6]
ip http server
ip http path flash:

host subinterface

host subinterfaceに対するpolicingの動作確認を行います。以下はR6宛てのHTTPに対してpolicingを行う実装例です。

 [R6]
ip access-list extended ACL_HTTP
 10 permit tcp any any eq www
!
class-map match-all CMAP_HTTP
 match access-group name ACL_HTTP
!
policy-map PMAP_HOST
 class CMAP_HTTP
  police rate 100 pps burst 20 packets
!
control-plane host
 service-policy input PMAP_HOST

以下の要領でR6に対するHTTP通信を発生させます。

 [SW1]
Rack2SW1#copy http://cisco:cisco@150.2.6.6/c1841-adventerprisek9-mz.124-24.T.bin2 null:
Loading http://***********@150.2.6.6/c1841-adventerprisek9-mz.124-24.T.bin2 !!!

想定通りのclassificationである事を確認します。

 [R6]
Rack2R6#show policy-map control-plane host
 Control Plane Host

  Service-policy input: PMAP_HOST

    Class-map: CMAP_HTTP (match-all)
      8111 packets, 519296 bytes
      5 minute offered rate 18000 bps, drop rate 0 bps
      Match: access-group name ACL_HTTP
      police:
          rate 100 pps, burst 20 packets
        conformed 3803 packets; actions:
          transmit
        exceeded 4308 packets; actions:
          drop
        conformed 58 pps, exceed 65 pps

    Class-map: class-default (match-any)
      468 packets, 93328 bytes
      5 minute offered rate 1000 bps, drop rate 0 bps
      Match: any
Rack2R6#

host subinterface queue-threshold

host subinterfaceに対するqueueingの動作確認を行います。以下はR6宛てのBGP, HTTPに対してqueueingを行う実装例です。

 [R6]
class-map type queue-threshold match-any CMAP_HTTP_QUEUE
 match protocol http
class-map type queue-threshold match-any CMAP_BGP_QUEUE
 match protocol bgp
!
policy-map type queue-threshold PMAP_HOST_QUEUE
 class CMAP_HTTP_QUEUE
  queue-limit 10
 class CMAP_BGP_QUEUE
  queue-limit 10
!
control-plane host
 service-policy type queue-threshold input PMAP_HOST_QUEUE

以下の要領でR6に対するHTTP通信を発生させます。

 [SW1]
Rack2SW1#copy http://cisco:cisco@150.2.6.6/c1841-adventerprisek9-mz.124-24.T.bin2 null:
Loading http://***********@150.2.6.6/c1841-adventerprisek9-mz.124-24.T.bin2 !!!

想定通りのclassificationである事を確認します。

 [R6]
Rack2R6#show policy-map type queue-threshold control-plane host input
      queue-limit 10
      queue-count 0     packets allowed/dropped 851/39
      queue-limit 10
      queue-count 0     packets allowed/dropped 0/0
 Control Plane Host

  Service-policy queue-threshold input: PMAP_HOST_QUEUE

    Class-map: CMAP_HTTP_QUEUE (match-any)
      890 packets, 57152 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match:  protocol http
        890 packets, 57152 bytes
        5 minute rate 0 bps

    Class-map: CMAP_BGP_QUEUE (match-any)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match:  protocol bgp
        0 packets, 0 bytes
        5 minute rate 0 bps

    Class-map: class-default (match-any)
      110 packets, 39930 bytes
      5 minute offered rate 2000 bps, drop rate 0 bps
      Match: any
Rack2R6#

host subinterface port-filter

host subinterfaceに対するport-filterの動作確認を行います。以下はR6宛てのtelnetをdropする実装例です。

 [R6]
class-map type port-filter match-any CLOSED_PORTS
 match closed-ports
 match port tcp 23
!
policy-map type port-filter PMAP_HOST_PORT
 class CLOSED_PORTS
  drop
!
control-plane host
 service-policy type port-filter input PMAP_HOST_PORT

SW1からR6へのtelnetを試みます。アクセスが失敗する事を確認します。

 [SW1]
Rack2SW1#telnet 155.2.67.6
Trying 155.2.67.6 ...
% Connection timed out; remote host not responding

Rack2SW1#

showコマンドからも、想定通りのdropがなされている事を確認します。

 [R6]
Rack2R6#show policy-map type port-filter control-plane host
 Control Plane Host

  Service-policy port-filter input: PMAP_HOST_PORT

    Class-map: CLOSED_PORTS (match-any)
      162 packets, 52760 bytes
      5 minute offered rate 1000 bps, drop rate 0 bps
      Match:  closed-ports
        158 packets, 52504 bytes
        5 minute rate 1000 bps
      Match:  port tcp 23
        4 packets, 256 bytes
        5 minute rate 0 bps
      drop

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

CCIE R&S試験では、受験者の仕様理解を確かめるために”listenしていないportをControl Planeによってdropするな”というかなり実践離れした設定例が出題される可能性もあります。listenしていないportをControl Planeの制御対象外にしたい場合は、以下のように”match-all”キーワードと”not port”キーワードを使用すると良いでしょう。

class-map type port-filter match-all CLOSED_PORTS
 match closed-ports
 match not port tcp 8080
!
policy-map type port-filter PMAP_HOST_PORT
 class CLOSED_PORTS
  drop
!
control-plane host
 service-policy type port-filter input PMAP_HOST_PORT

transit subinterface

transit subinterfaceに対するpolicingの動作確認を行います。以下はfragmentされたパケットに対するpolicingの設定例です。

 [R6]
ip access-list extended ACL_FRAGMENT
 10 permit ip any any fragments
!
class-map CMAP_FRAGMENT
 match access-group name ACL_FRAGMENT
!
policy-map PMAP_TRANSIT
 class CMAP_FRAGMENT
  police rate 1000000 pps
!
control-plane transit
 service-policy input PMAP_TRANSIT

showコマンドで設定を確認します。

 [R6]
Rack2R6#show policy-map control-plane transit
 Control Plane Transit

  Service-policy input: PMAP_TRANSIT

    Class-map: CMAP_FRAGMENT (match-all)
      0 packets, 0 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: access-group name ACL_FRAGMENT
      police:
          rate 1000000 pps, burst 200000 packets
        conformed 0 packets; actions:
          transmit
        exceeded 0 packets; actions:
          drop
        conformed 0 pps, exceed 0 pps

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

cef-exception subinterface

cef-exception subinterfaceに対するpolicingの動作確認を行います。以下はclass-defaultに対するpolicingの設定例です。

 [R6]
policy-map PMAP_EXCEPTION
 class class-default
  police rate 100 pps burst 20 packets
!
control-plane cef-exception
 service-policy input PMAP_EXCEPTION

showコマンドで設定を確認します。

 [R6]
Rack2R6#show policy-map control-plane cef-exception
 Control Plane Cef-exception

  Service-policy input: PMAP_EXCEPTION

    Class-map: class-default (match-any)
      37 packets, 4534 bytes
      5 minute offered rate 1000 bps, drop rate 0 bps
      Match: any
      police:
          rate 100 pps, burst 20 packets
        conformed 37 packets; actions:
          transmit
        exceeded 0 packets; actions:
          drop
        conformed 1 pps, exceed 0 pps
Rack2R6#
タイトルとURLをコピーしました