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
設定全文は下記ファイルです。詳細設定は下記を参照ください。
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>