IOS ルータで自身から送信するパケットをフィルタリングすることは、昔では PBR (Policy-Based Routing) 機能で実現できましたが、12.4(6)T より以降のバージョンでは、ZFW (Zone-Based Policy Firewall) を使えば、同じく実現できます。
ZFW では、インターフェースを Zone に所属させることで、セキュリティポリシーを定義します。ルータ自身宛のトラフィックと自身から送信するトラフィックはビルトインの Self という Zone に所属しています。すなわち、考え方としては、インターフェースの Zone と Self Zone 間のポリシーをチューニングすることで、自身からのパケットをフィルタリングします。具体的な設定手順は、以下の例で説明します。
- フィルタリングしたいトラフィック、通したいトラフィックを class-map に定義します。この例では、TELNET 通信をフィルタリングの対象にし、ICMP と SSH 通信を許可します。なお、その他のトラフィックは class-default にマッチされ、デフォルトの動作では drop されます。その意味では、わざわざ INVALID_MGMT_ACCESS を定義しなくても同じ効果が得られますが、管理上どのぐらいの通信がマッチされたかを確認する際に便利なので、定義しておきます。
Router(config)# class-map type inspect match-any VALID_MGMT_ACCESS
Router(config-cmap)# match protocol icmp
Router(config-cmap)# match protocol ssh
Router(config-cmap)# exit
Router(config)# class-map type inspect match-any INVALID_MGMT_ACCESS
Router(config-cmap)# match protocol telnet
Router(config-cmap)# exit
- 定義した class-map にマッチしたトラフィックの処理方法を policy-map で定義します。
Router(config)# policy-map type inspect SELF_TO_OUT
Router(config-pmap)# class type inspect VALID_MGMT_ACCESS
Router(config-pmap-c)# pass
Router(config-pmap-c)# exit
Router(config-pmap)# class type inspect INVALID_MGMT_ACCESS
Router(config-pmap-c)# drop
- インターフェースが所属する Zone を定義します。
Router(config)# zone security OUT
- 定義した Zone と Self Zone 間の zone-pair を定義し、ポリシーを適用します。
Router(config)# zone-pair security SELF_TO_OUT source self destination OUT
Router(config-sec-zone-pair)# service-policy type inspect SELF_TO_OUT
- インターフェースを該当 Zone にアサインします。
Router(config)# interface gigabitEthernet 0/0
Router(config-if)# zone-member security OUT
- 設定の動作確認を行ないます。
TELNET、ICMP や SSH トラフィックを生成して、TELNET ができなく、ICMP と SSH が通信できることを確認します。ポリシーにマッチしたパケットは、下記のコマンドで確認できます。
Router# show policy-map type inspect zone-pair SELF_TO_OUT
Load for five secs: 1%/0%; one minute: 1%; five minutes: 1%
Time source is hardware calendar, *16:11:23.628 UTC Wed Jul 28 2010
policy exists on zp SELF_TO_OUT
Zone-pair: SELF_TO_OUT
Service-policy inspect : SELF_TO_OUT
Class-map: INVALID_MGMT_ACCESS (match-any)
Match: protocol telnet
8 packets, 192 bytes
30 second rate 0 bps
Drop
8 packets, 192 bytes
Class-map: VALID_MGMT_ACCESS (match-any)
Match: protocol ssh
24 packets, 1264 bytes
30 second rate 0 bps
Match: protocol icmp
5 packets, 400 bytes
30 second rate 0 bps
Pass
29 packets, 1664 bytes
Class-map: class-default (match-any)
Match: any
Drop
0 packets, 0 bytes