パケットフィルタリングの設定 - Catalyst

Catalystでパケットフィルタリングを行う時に使うアクセスリスト、ルータACL、ポートACL、VLAN ACLの設定方法や編集方法等を説明しています。又、番号付きアクセスリストと名前付きアクセスリストの違いも説明しています。

パケットフィルタリングの動作や意味については基本編「セキュリティ」の「パケットフィルタリング」をご参照下さい。

パケットフィルタリングの概要

 Catalystでパケットフィルタリングを行う際は、許可、遮断等を指定するアクセスリストを設定し、アクセスリストをインターフェース等に適用する事で有効になります。アクセスリストは正式にはアクセスコントロールリストと言い、略してACLと呼ばれます。

アクセスリストの概要

 パケットフィルタリングには種類があり、インターフェースで受信時に適用するフィルタリングはポートACL、ルーティング時に適用するフィルタリングはルータACL、VLAN内の通信でも適用するフィルタリングはVLAN ACLと言います。

ポートACL、ルータACL、VLAN ACLの違い

 ポートACLやVLAN ACLはルーティング時にも適用されます。

ルーティング時のポートACLとVLAN ACL適用

 これ以外にCatalyst自体への通信に対してフィルタリングする事も出来ます。

 アクセスリストではどの通信を許可し、どの通信を遮断するか定義します。このアクセスリストをインターフェースやVLAN等に適用して初めてパケットフィルタリングが有効になります。このため、アクセスリストを設定しただけではフィルタリングは有効になりません。

 アクセスリストは同じ番号のものを複数設定出来ます。その場合、先に記述したもの程優先度が高くなります。又、一番最後には何も設定していなくても全てを遮断する暗黙のdenyが自動的に追加されています。

 このため、通信が発生した際は上から順番に判断され、マッチした処理がされます。最後までマッチしなかった場合は暗黙のdenyにより遮断されます。

アクセスリストの評価順序

 アクセスリストの番号にはタイプがあります。以下はその例です。

【アクセスリストの番号とタイプ】
番号 タイプ 使い方
1〜99 IP標準アクセスリスト 送信元だけを指定
100〜199 IP拡張アクセスリスト 送信元、先、サービス等を指定可能
1300〜1999 IP標準アクセスリスト 送信元だけを指定
2000〜2699 IP拡張アクセスリスト 送信元、先、サービス等を指定可能

 IP標準アクセスリストを利用したルータACLは最も簡単なパケットフィルタリング設定です。

 例として、以下の図のようにVLAN10とVLAN20があるとします。

IP標準アクセスリストのルータACL(in)例

 VLAN10からVLAN20への通信で172.16.1.2と172.16.1.3からの通信は遮断し、それ以外の通信は許可したい場合はスイッチで以下の設定を行います。尚、VLAN、IPアドレスやルーティングの設定は省略します。

【IP標準アクセスリストの設定(deny)】
Switch# configure terminal
Switch(config)# access-list 1 deny 172.16.1.2
Switch(config)# access-list 1 deny 172.16.1.3
Switch(config)# access-list 1 permit any
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 1 in
Switch(config-if)# exit

 上記によりVLAN10からスイッチに送信されたパケットはアクセスリスト1番で172.16.1.2と172.16.1.3がdenyにより遮断され、その他がpermitにより通信可能になります。anyは全てを示します。

 このように、access-listコマンドで送信元のIPアドレスとdenyやpermit等の動作を指定し、ip access-groupコマンドでVLANインターフェースに適用します。access-groupの後の番号は適用するアクセスリストの番号で、inは受信するパケットに適用される事を示します。

 逆に172.16.1.4だけ許可し、その他は遮断したい場合は以下の設定になります。

【IP標準アクセスリストの設定(permit)】
Switch# configure terminal
Switch(config)# access-list 1 permit 172.16.1.4
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 1 in
Switch(config-if)# exit

 permitにより、172.16.1.4からのパケットは許可されます。それ以外を送信元とするパケットは暗黙のdenyがあるため、遮断されます。

 又、以下のように172.16.1.2と172.16.1.3からはVLAN20への通信だけ遮断したいとします。

IP標準アクセスリストのルータACL(out)例

 この場合、VLAN10で遮断するとVLAN30への通信も遮断されてしまうため、VLAN20で遮断します。

【IP標準アクセスリストの設定(out)】
Switch# configure terminal
Switch(config)# access-list 1 deny 172.16.1.2
Switch(config)# access-list 1 deny 172.16.1.3
Switch(config)# access-list 1 permit any
Switch(config)# interface vlan 20
Switch(config-if)# ip access-group 1 out
Switch(config-if)# exit

 上記では赤字部分でoutを指定しているため、VLAN20からパケットが送信される時にアクセスリスト1番が評価され、172.16.1.2と172.16.1.3を送信元とする通信が遮断されます。

 尚、アクセスリストでIPアドレスやanyを指定している部分では以下の設定も可能です。

【アクセスリストの設定例】
設定 意味
172.16.1.0 0.0.0.255 172.16.1.までが一致するものを示す
host 172.16.1.2 172.16.1.2を示す
172.16.1.2 0.0.0.0 172.16.1.2を示す

 表の一番上のように、172.16.1.0 0.0.0.255の場合は緑色で記載した数字で0の部分が赤字で示したIPアドレスと一致する範囲を対象とします。このため、172.16.1までが一致する172.16.1.0〜172.16.1.255が対象になります。

 この緑色で示した数字をワイルドカードと言います。

 表の最後のように172.16.1.2 0.0.0.0と記載しているとワイルドカードが全て0のため、全て一致する必要があり、IPアドレス172.16.1.2だけが対象になります。hostはIPアドレス指定でhost 172.16.1.2と指定すると172.16.1.2 0.0.0.0を指定した場合と同じ意味になります。

 IP標準アクセスリストではIPアドレスだけ指定すると、hostやワイルドカード0.0.0.0を指定したのと同じになります。つまり、hostやワイルドカード0.0.0.0を省略可能です。

 アクセスリストは1番、2番、10番等複数定義出来ますが、access-groupコマンドで指定した番号のみインターフェースに適用されます。又、VLAN10は1番だけ、VLAN20は2番、VLAN30は10番等、別々にアクセスリストを適用するといった設定も可能です。

IP拡張アクセスリストを利用したルータACL

 先ほど、IP標準アクセスリストでは172.16.1.2と172.16.1.3からVLAN20への通信だけ遮断したい場合、VLAN20に対してoutでルータACLを有効にしました。

 IP拡張アクセスリストではVLAN10に対してinで有効に出来ます。

IP拡張アクセスリストの設定(プロトコル指定)】
Switch# configure terminal
Switch(config)# access-list 100 deny ip host 172.16.1.2 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 deny ip host 172.16.1.3 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 permit ip any any
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 100 in
Switch(config-if)# exit

 IP拡張アクセスリストは送信元だけでなく赤字のように送信先も指定出来るためです。

 又、プロトコルも指定可能です。上ではipを指定していますが、これはICMP、TCP、UDP等IP通信一般を示します。icmp、tcp、udp等を指定するとそのプロトコルだけ遮断されます。

 プロトコルだけでなく、サービスまで指定する事も可能です。例えばtelnetだけ遮断したい場合は以下のように設定します。

【IP拡張アクセスリストの設定(サービス指定)】
Switch# configure terminal
Switch(config)# access-list 100 deny tcp host 172.16.1.2 172.16.2.0 0.0.0.255 eq telnet
Switch(config)# access-list 100 deny tcp host 172.16.1.3 172.16.2.0 0.0.0.255 eq telnet
Switch(config)# access-list 100 permit ip any any
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 100 in
Switch(config-if)# exit

 tcpの部分はudpやicmp等も指定可能で、telnetの部分はポート番号で指定する事も可能です。

 又、IP標準アクセスリストと同様にoutでも設定可能です。

【IP拡張アクセスリストの設定(out)】
Switch# configure terminal
Switch(config)# access-list 101 permit tcp host 172.16.1.2 172.16.2.0 0.0.0.255 eq www
Switch(config)# access-list 101 permit tcp host 172.16.1.3 172.16.2.0 0.0.0.255 eq www
Switch(config)# interface vlan 20
Switch(config-if)# ip access-group 101 out
Switch(config-if)# exit

片方向の通信の許可

 これまで示してきた以下のような設定では逆方向の通信も遮断されます。

【IP拡張アクセスリストの設定(プロトコル指定)】
Switch# configure terminal
Switch(config)# access-list 100 deny ip host 172.16.1.2 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 deny ip host 172.16.1.3 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 permit ip any any
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 100 in
Switch(config-if)# exit

 これは172.16.2.2から172.16.1.2へのパケットは遮断されませんが、戻りの応答パケットが遮断されるためです。

戻りの応答パケット遮断例

 172.16.1.2から172.16.2.2への通信を遮断しつつ逆方向の通信を許可するためには以下の設定にします。

【応答パケットの許可】
Switch# configure terminal
Switch(config)# access-list 100 permit tcp host 172.16.1.2 172.16.2.0 0.0.0.255 established
Switch(config)# access-list 100 deny ip host 172.16.1.2 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 deny ip host 172.16.1.3 172.16.2.0 0.0.0.255
Switch(config)# access-list 100 permit ip any any
Switch(config)# interface vlan 10
Switch(config-if)# ip access-group 100 in
Switch(config-if)# exit

 establishedはAck等の応答パケットのみ許可する設定になります。

 このため、上記により172.16.1.2からの応答パケットは透過され、その次の行で172.16.1.2から通信が開始されたパケットは遮断されます。

 尚、UDP等ではestablishedは使えません。

アクセスリストの確認

 アクセスリストはshow access-listsコマンドで確認出来ます。

【アクセスリストの確認】
Switch# show access-lists
Standard IP access list 1
    10 deny 172.16.1.3
    20 deny 172.16.1.2
    30 permit any
Extended IP access list 100
    10 deny ip host host 172.16.1.2 172.16.2.0 0.0.0.255
    20 deny ip host host 172.16.1.3 172.16.2.0 0.0.0.255
    30 permit ip any any

 標準、拡張問わず、設定しているアクセスリストが全て表示されます。

 show access-lists 1等番号を指定すると、指定した番号のアクセスリストだけ表示されます。

Catalystに接続出来る機器の制限

 Catalystに接続出来る機器を172.16.1.0/24に接続された機器だけに制限したい場合は以下の設定を行います。

【接続出来る機器の制限】
Switch# configure terminal
Switch(config)# access-list 1 permit 172.16.1.0 0.0.0.255
Switch(config)# line vty 0 15
Switch(config-line)# access-class 1 in
Switch(config-line)# exit

 line vty 0 15では制限したい回線を指定します。その次のaccess-classがアクセスリストを適用する設定です。適用したいアクセスリストの番号を指定します。

 この設定により、例えば172.16.1.1等の172.16.1.0/24に接続された機器からCatalystにtelnet等で接続は可能ですが、172.16.2.1等からは接続が出来なくなります。

 IPアドレス指定、hostを付ける、又はワイルドカードを0.0.0.0にして1台だけ許可する設定等も可能です。

 アクセスリストでは設定を行うとエントリーとして一番下に追加されますが、途中に追加したり削除したい場合があります。

アクセスリストでのシーケンスの途中追加

 acces-listコマンドでは途中に追加する事や一部削除が出来ません。

 例えば上記のアクセスリストがあった場合、ftpの通信は遮断したいのでdenyを途中に追加したいと思ってもaccess-listコマンドで設定すると最後に追加されてしまうので2行目のpermitが先に判定されて遮断出来ません。

 この場合は違うコマンドを使って設定する事で途中に追加可能です。

 最初にshow access-listsコマンドを使ってシーケンス番号を表示します。

【シーケンス番号の表示】
Switch# show access-lists
Extended IP access list 100
    10 deny ip any host 172.16.1.1
    20 permit ip any any

 赤字で示した10,20がシーケンス番号です。例えばシーケンス番号15にftpの通信を遮断する設定を追加する場合は以下になります。

【IP拡張アクセスリスト途中に追加する設定】
Switch# configure terminal
Switch(config)# ip access-list extended 100
Switch(config-ext-nacl)# 15 deny tcp any any eq ftp
Switch(config-ext-nacl)# exit

 赤字の100は編集するアクセスリスト番号です。

 緑の15はシーケンス番号を指定し、その後はdenyやpermit等でこれまでと同様の定義を行います。

 又、1エントリーだけ削除したい場合、no access-listコマンドを使うとその番号のアクセスリスト全体が削除されてしまいます。例えば、no access-list 100 deny ip any host 172.16.1.1と設定するとアクセスリスト100番全部が消えてしまいます。

 1エントリーだけ削除したい場合は以下のようにします。

【1行だけ削除する場合】
Switch# configure terminal
Switch(config)# ip access-list extended 100
Switch(config-ext-nacl)# no 10
Switch(config-ext-nacl)# exit

 上記でシーケンス番号10のエントリーが削除されます。

 IP標準アクセスリストの時は赤字のextended部分をstandardにすると同様の設定が出来ます。

 又、IP標準アクセスリストでは範囲指定に対してhost等で設定するIPアドレス指定が自動的に上に追加されるようになっています。

【IP標準アクセスリストの変更】
Switch# configure terminal
Switch(config)# access-list 1 permit 172.16.1.0 0.0.0.255
Switch(config)# access-list 1 deny host 172.16.1.1
Switch(config)# exit
Switch# show access-lists
Standard IP access list 1
    20 deny host 172.16.1.1   ←上になる
    10 permit 172.16.1.0 wildcard bits 0.0.0.255

 これは、特定のIPアドレスを指定したエントリーはワイルドカードが0.0.0.0以外のエントリーより下に追加しても意味がない事があるためです。

 この場合、シーケンス番号は上記のようにアクセスリストを記載した順番になっています。シーケンス番号を分かり易くする等のため、ip access-list resequenceコマンドでシーケンス番号を振り直す事が出来ます。

【シーケンス番号の降り直し】
Switch# configure terminal
Switch(config)# ip access-list resequence 1 10 5
Switch(config)# exit
Switch# show access-lists
Standard IP access list 1
    10 deny host 172.16.1.1
    15 permit 172.16.1.0 wildcard bits 0.0.0.255

 赤字は降り直すアクセスリストの番号を指定します。緑の数字は開始するシーケンス番号、間隔の順で指定します。

 上記ではアクセスリスト番号1に対して、開始シーケンス10、間隔を5で設定しているため、show access-listsで確認するとアクセスリスト番号1の最初のエントリーがシーケンス番号10、次のエントリーが15になっているのが確認出来ると思います。

 尚、古いIOSや機種ではシーケンス番号自体がありません。このため、シーケンス番号を指定した設定が使えません。

 この場合、show running-config等でアクセスリストの定義を表示し、メモ帳等にコピーした後に編集し、再度設定し直す必要があります。

 設定し直す場合は、新規アクセスリスト番号で設定し、それをインターフェース等に適用した後、古いアクセスリスト番号の適用を無効化するという手順が必要になります。

 例えばこれまでのアクセスリスト番号が100番だった場合、それをメモ帳等にコピーしてアクセスリスト番号101番に修正した後で設定内容の追加や削除を行い、それをコンソール上等で貼り付けて反映させます。その後、VLANに対してip access-group 101 in等として適用した後、no ip access-group 100 in等で古いアクセスリストの適用を無効にします。

シーケンス番号が使えない時のACL編集方法

 古いアクセスリストをno access-list 100等で削除して、新しく作り直してもいいのですが、この場合は一時的にパケットフィルタリングが適用されない状態になります。

 アクセスリストは物理インターフェースに対しても適用出来ます。

【ポートACLの設定】
Switch(config)# interface gigabitethernet0/1
Switch(config-if)# ip access-group 1 in
Switch(config-if)# exit

 これをポートACLと言いますが、多くのボックス型スイッチではin、つまり受信時のみパケットフィルタリングする事が出来ますが、outで指定出来る機種もあります。

 VLAN内の通信でパケットフィルタリングする時はVLAN ACLを使います。

 VLAN ACLを使うためには、まずVLANマップを作成します。

 例えば、172.16.1.1の通信だけ許可したい場合、標準、又は拡張アクセスリストを作成し、それをvlan access-mapによりVLANマップとして定義します。

【VLANマップの設定例1】
Switch(config)# access-list 1 permit 172.16.1.1
Switch(config)# vlan access-map test 10
Switch(config-access-map)# match ip address 1
Switch(config-access-map)# action forward
Switch(config-access-map)# exit
Switch(config)#

 赤字で示したtestがVLANマップの名前なので、分かり易い名前を付ける事が出来ます。

 mach ip address 1はアクセスリスト番号1に一致した場合を示し、その動作がaction forwardで記述されています。つまり、172.16.1.1であればforwardで通信が許可されます。

 testの後の10はシーケンス番号で、この順序に従って判定されます。

 他の例として、以下はIPアドレス172.16.1.1から172.16.2.1への通信は遮断し、その他は許可する設定例です。

【VLANマップの設定例2】
Switch(config)# access-list 100 permit ip host 172.16.1.1 host 172.16.2.1
Switch(config)# vlan access-map test2 10
Switch(config-access-map)# match ip address 100
Switch(config-access-map)# action drop
Switch(config-access-map)# exit
Switch(config)# vlan access-map test2 20
Switch(config-access-map)# action forward
Switch(config-access-map)# exit
Switch(config)#

 上記では赤字部分で172.16.1.1から172.16.2.1への通信をaction dropで遮断しています。

 緑の部分ではmatch文がないため全ての通信を示し、action forwardで通信を許可しています。

 これをVLANに適用するためには以下のように設定します。

【VLANマップのVLANへの適用】
Switch(config)# vlan filter test2 vlan-list 10
Switch(config)#

 上記はvlan-listの後に10と設定しているため、VLAN 10に対して適用しています。10,20とカンマで区切ると10と20、10-20とハイフンで区切ると10〜20に適用されます。10,20,30-40といった指定も可能です。この場合は10と20、30〜40まで適用されます。

 又、赤字部分は適用するVLANマップの名前であり、vlan access-mapで指定した名前と一致させる必要があります。

 尚、VLAN ACLはL2を基本とするCatalystでは使えない場合があります。

ACLの使い分け

 部署毎にVLANを分けていて、部署間の通信を制限したい場合はルータACLを使います。

 サーバーファーム等でサーバーに対する通信を制御したい場合もルータACLを使います。

ルータACLの使い方

 このように、ルーティングしている場合はルータACLを基本に検討します。

 VLAN ACLはルーティングしない場合も適用されます。

 ルータACLとVLAN ACLを併用すると、ルーティング時はinでVLAN ACL、ルータACLの順、outでルータACL、VLAN ACLの順に判定されます。

ルータACLとVLAN ACLの併用

 ポートACLを設定するとデフォルトではVLAN ACLやルータACLが無効になる機種が多くあります。このため、ポートACLを他のACLと併用する場合は留意が必要です。

 又、アクセスリスト自体はパケットフィルタリングだけでなく、対象となるアドレスやサービスを特定するために使われます。例えば、「RIPの設定 - Catalyst」や「OSPFの設定 - Catalyst」で示したように、設定を有効にする経路を特定したりフィルタリングしたりする時も利用します。

名前付きアクセスリスト

 アクセスリストを名前で定義する事も出来ます。

 名前を使ったIP標準アクセスリストの定義例は以下の通りです。

【名前付きIP標準アクセスリスト】
Switch# configure terminal
Switch(config)# ip access-list standard test1
Switch(config-std-nacl)# permit 172.16.2.1
Switch(config-std-nacl)# deny 172.16.3.1
Switch(config-std-nacl)# permit 172.16.3.0 0.0.0.255
Switch(config-std-nacl)# exit

 赤字部分がACLの名前で分かり易い名前を付ける事が出来ます。

 permit 172.16.2.1では172.16.2.1が送信元の場合は許可する事を示します。

 deny 172.16.3.1では172.16.3.1が送信元の場合は拒否する事を示し、permit 172.16.3.0 0.0.0.255では172.16.3までが一致した送信元であれば許可する事を示しています。又、最後には暗黙のdenyがあります。

 これを名前付きアクセスリストと言います。名前付きアクセスリストに対して、これまで説明した番号で指定するアクセスリストを番号付きアクセスリストと言います。

 名前付きアクセスリストをVLAN 10に適用する設定は以下の通りです。

【名前付きアクセスリストのVLANへの適用】
Switch# configure terminal
Switch(config)# interface vlan 10
Switch(config-if)# access-group test1 in
Switch(config-if)# exit

 番号の時と同じでaccess-groupコマンドを使いますが、赤字部分のように名前を指定します。

 名前を使ったIP拡張アクセスリストの定義例は以下の通りです。

【名前付きIP拡張アクセスリスト】
Switch# configure terminal
Switch(config)# ip access-list extended test2
Switch(config-ext-nacl)# permit ip host 172.16.2.1 host 172.16.5.1
Switch(config-ext-nacl)# deny ip host 172.16.3.1 host 172.16.5.1
Switch(config-ext-nacl)# permit tcp 172.16.3.0 0.0.0.255 any eq ftp
Switch(config-ext-nacl)# exit

 尚、この定義方法は「アクセスリストの変更」で示したのと同じです。

 つまり、ip access-listコマンドでは名前でも番号でもアクセスリストを設定可能です。

 最初にシーケンス番号を指定するとそのシーケンス番号で登録されますが、上記のようにシーケンス番号を指定しないと最後に追加されます。

 このため、名前付きアクセスリストもシーケンス番号を利用すると途中にエントリーを追加したり、削除したりする事が出来ますが、古いIOSや機種ではシーケンス番号がないため途中にエントリーを追加出来ず、以下のように削除だけ出来ます。

【名前付きアクセスリストからの部分的削除】
Switch# configure terminal
Switch(config)# ip access-list extended test2
Switch(config-ext-nacl)# no permit ip host 172.16.2.1 host 172.16.5.1
Switch(config-ext-nacl)# exit

 シーケンス番号を使わず、noを付けてエントリーを削除します。

 ワイルドカードを0.0.0.255と指定すると0の部分が一致したアドレスが対象になると説明しました。

 ワイルドカードは0.0.0.127等と指定も出来ます。この場合、「サブネットとCIDRの計算方法」で示した方法と同様の計算が必要です。

 例えば、IPアドレス172.16.1.128に対してワイルドカード0.0.0.127を指定すると、0.0.0の部分まではIPアドレスと一致する必要があるため、172.16.1を含むIPアドレスが対象になる事はすぐに分かります。

 127の部分ですが、2進数に変換すると01111111となります。「サブネットとCIDRの計算方法」で示したように電卓ですぐに計算出来ます。

 IPアドレス172.16.1.128の128部分は2進数に変換すると10000000です。

 ワイルドカードは01111111なので0のビットは最初だけですが、IPアドレスの最初のビットは1です。この部分まではIPアドレスのビットと一致したアドレスが対象になります。

【ワイルドカードでの計算】
区分 2進数
ワイルドカード 0 1 1 1 1 1 1 1
IPアドレス 1 0 0 0 0 0 0 0
結果 1 - - - - - - -

 表で「-」部分は0でも1でも一致する事を示します。つまり、対象となる範囲は10000000〜11111111です。これを10進数に変換すると128〜255になり、IPアドレス172.16.1.128〜172.16.1.255までが対象になります。

 このように0でも255でもない数字があるワイルドカードを使う場合は2進数に変換して計算が必要です。

サイト関連1

基本編セキュリティの「パケットフィルタリング
  • このエントリーをはてなブックマークに追加