Cisco IOS CBAC with Policy map

スポンサーリンク

CBACは、文字通りcontextに基づいたアクセス制御を行う機能です。ACLではport番号に基づく単純なアクセス制御しかできませんが、この機能を使う事によってLayer7の情報に基づくアクセス制御が可能になります。

概要

CBAC(context based access control)は、文字通りcontextに基づいたアクセス制御を行う機能です。ACLではport番号に基づく単純なアクセス制御しかできませんが、この機能を使う事によってLayer7の情報に基づくアクセス制御が可能になります。(ただし、パケットを検査する量が多くなるのでCPU使用率の上昇に注意が必要です。)

CBACで検索すると、CBACを用いたCisco IOS Firewallの実装例がヒットする事が多いですが、このページではCBACとpolocy-mapを併用したアクセス制御の実装例を紹介します。

コマンド一覧

このシナリオで重要なコマンド一覧は以下の通りです。

Router(config)# class-map [{ match-all | match-any }] <name>
Router(config-cmap)# match protocol <protocol>
Router(config-cmap)# match protocol http url <regexp>

Router(config)# policy-map <policy_map>
Router(config-pmap)# class <class_map>
Router(config-pmap-c)# drop

構成図

以下の構成で動作確認を行います。

         e0/0    e0/0
 +--------+.1    .2+--------+
 |   R1   +--------+   R2  | 
 +--------+        +--------+
        192.168.12.0/24

 R1 Loopback0      R2 Loopback0
 10.1.1.1/32       10.2.2.2/32
 [R1]
router ospf 1
 network 0.0.0.0 255.255.255 area 0

 [R2]
router ospf 1
 network 0.0.0.0 255.255.255 area 0

設定全文は下記ファイルです。詳細設定は下記を参照ください。

R1
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.1.1.1 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R2
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Loopback0
 ip address 10.2.2.2 255.255.255.255
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
 half-duplex
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
router ospf 1
 log-adjacency-changes
 network 0.0.0.0 255.255.255.255 area 0
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

class-mapの作り方

以下のようなclass-mapを作成する事でプロトコルに合致するかどうかのclass mapを作成する事ができます。CCIEの筆記試験やトラブルシュートでは、match-allとmatch-anyを混同した設定ミスがよく出題されます。

Router(config)# class-map {[ match-all | match-any }] <name>
Router(config-cmap)# match protocol <protocol>

HTTP, SMTPなどのよく使用されるプロトコルについてはLayer7 headerによる制御が可能です。ヘルプストリングを表示させると、いろいろな設定ができる事が確認できます。

Router(config)#class-map example
Router(config-cmap)#match protocol http ?
  c-header-field  Client general Header Field
  host            Server Host Name
  mime            Match MIME Type
  s-header-field  Server general Header Field
  url             Match URL String
  <cr>

Router(config-cmap)#match protocol http

以下のコマンドでurlを正規表現で指定したclass mapを作成する事ができます。

Router(config-cmap)#match protocol http url <regexp>

P2P 禁止の設定例

以下のような設定でP2Pソフトを禁止するpolicy-mapを作成する事ができます。なお、エミュレータ上での動作確認が困難であるため、動作確認は省略します。

 [R1]
class-map match-any CMAP_P2P
 match protocol fasttrack
 match protocol gnutella
 match protocol kazaa2
!
policy-map PMAP_DENY_P2P
 class CMAP_P2P
  drop
!
interface Ethernet0/0
 service-policy input PMAP_DENY_P2P

exe 禁止の設定例

設定投入

以下ような設定で、exeファイルのhttp downloadを禁止するpolicy-mapとなります。

 [R1]
class-map CMAP_HTTP_DANGER
 match protocol http url *.exe
!
policy-map PMAP_DENY_HTTP_DANGER
 class CMAP_HTTP_DANGER
  drop
!
interface Ethernet0/0
 no service-policy input PMAP_DENY_P2P
 service-policy input PMAP_DENY_HTTP_DANGER

動作確認準備

R1をhttp serverとしてエミュレートします。また、running-config.txt, running-config.exeをダウンロード可能なように設定します。

 [R1]
ip http server
ip http path flash:
ip http authentication enable
enable password cisco

show running-config | redirect flash:running-config.txt
show running-config | redirect flash:running-config.exe

動作確認

末尾がexeで終わるファイルがダウンロードできなくなった事を確認します。

 [R2]
R2#copy http://cisco:cisco@10.1.1.1/running-config.txt null:
Loading http://***********@10.1.1.1/running-config.txt !
1099 bytes copied in 0.328 secs (3351 bytes/sec)
R2#
R2#copy http://cisco:cisco@10.1.1.1/running-config.exe null:
%Error opening http://cisco:cisco@10.1.1.1/running-config.exe (I/O error)
R2#

カウンタの上昇から、想定通りのclassificationがなされている事を確認します。

 [R1]
R1#show policy-map interface
 Ethernet0/0

  Service-policy input: PMAP_DENY_HTTP_DANGER

    Class-map: CMAP_HTTP_DANGER (match-all)
      8 packets, 1628 bytes
      5 minute offered rate 0 bps, drop rate 0 bps
      Match: protocol http url "*.exe"
      drop

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

Tips

CBAC 正規表現

CBACで指定可能な正規表現はCisco独自の正規表現である事に注意して下さい。Linuxなどでお馴染みのPOSIX正規表現ではなくドットは任意の1文字ではない事に注意が必要です。”.*exe”とすると末尾がexeであるファイルに合致しなくなります。また、^や$も指定できません。

CBACで指定可能な正規表現をまとめると以下の通りです。

記号 説明
* matches any sequence of characters (non-empty)
? matched any single character (you need to oress Ctrl-V in order to enter “?”)
| alternative, logical OR
[] range, e.g. [ab] matches either “a” or “b”
() grouping; delimit the logical end of patter;
or you can use “*.(exe|bin)” as equivalent to “*.exe|*.bin”

指定可能なプロトコル

CBACで指定できるプロトコルはヘルプストリングでも調査できます。かなりマイナーなプロトコルまで指定可能です。

Router(config-cmap)#match protocol ?
  aarp              AppleTalk ARP
  appletalk         AppleTalk
  arp               IP ARP
  bgp               Border Gateway Protocol
  bridge            Bridging
  bstun             Block Serial Tunnel
  cdp               Cisco Discovery Protocol
  citrix            Citrix Systems ICA protocol

  <omitted>

タイトルとURLをコピーしました