PIX/ASA の policy-map

備忘録を兼ねる Cisco PIX/ASA の設定情報です。

ICMP の扱い

以前は ping を通すために双方向に ICMP を許可する ACL を設定しなければなりませんでしたが、PIX 7.x 台より ICMP のステートを見るようになっています。すなわち片方向に ICMP 許可 ACL を設定すれば許された方向に ping をかけることができるようになります。

デフォルトでは ICMP の検査は有効でないので、policy-map で “inspect icmp” と設定する必要があります。初期設定を元にした場合は以下のように設定します。

FW(config)# policy-map global_policy
FW(config-pmap)# class inspection_default
FW(config-pmap-c)# inspect icmp

修正された policy-map の全体は次のセクションを参考にしてください。

UDP の扱い

多くのファイアーウォールと同様、UDP は擬似コネクションとして扱いステートフルインスペクションの対象となります。デフォルトではタイムアウトにより戻りパケットのポートを閉じる動作ですが、定義済みプロトコルについてはアプリケーション層の内容に基づきより厳しい検査を実施することができます。

例えば SNMP を検査するためには SNMP を識別する class-map を作って使用している policy-map に含める必要があります。具体的には次のような設定となります。先の ICMP と同様初期に自動で出来る policy-map では SNMP の検査は有効でありません。この辺りの設定は以前は fixup コマンドを用いましたが 7.0 よりこのような設定にガラリと変わっています。

class-map snmp
match port udp range snmp snmptrap
class-map inspection_default
match default-inspection-traffic
!
!
policy-map global_policy
class inspection_default
inspect dns maximum-length 512
inspect ftp
inspect h323 h225
inspect h323 ras
inspect rsh
inspect rtsp
inspect esmtp
inspect sqlnet
inspect skinny
inspect sunrpc
inspect xdmcp
inspect sip
inspect netbios
inspect tftp
inspect icmp
class snmp
inspect snmp
!
service-policy global_policy global

IP の access-list

access-list ACLNAME extended permit ip ...

と書くことができます。これだと一見アクセス制御をするのに IP 層までしか検査しないように見えます。しかし、実際はコネクション (ICMP/UDP 等の擬似コネクションを含む) の状態を検査するので、それぞれのプロトコルに応じた検査がなされます。

結局 ACL はコネクションの最初のパケットの通過可否を判断するためにのみ使われ、コネクションが確立された後は保持しているコネクションの状態と通過するパケットの整合性を基に通過可否が判断されるのです。ですので、ルータと同じように access-list を IP で書けば IP 層のチェックのみで通信を通過させることができるわけではないので注意が必要です。

そうそう 7.x からは inbound にも outbound にも ACL を適用できるようになっています。