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#