パケットフィルタの設定手順

パケットフィルタの設定手順は、次の2つです。

  1. permit/denyするフローを識別するためのアクセスコントロールリスト(ACL)を作成
  2. インタフェースに作成したアクセスコントロールリストを適用

ただ、いきなりルータのコンソールから設定コマンドを入力しても意図したようなパケットフィルタはまずできません。ネットワーク上のフローを洗い出して、必要なフローをきちんと把握しておきます。そして、どの機器のどのインタフェースのどの方向でアクセスコントロールリストを適用すれば、効率のよい設定になるかを検討します。そうした検討を踏まえて、コンソールからルータにコマンドを入力してパケットフィルタの設定を行います。

ワイルドカードマスク

アクセスコントロールリストの条件でIPパケットのIPアドレスを柔軟に指定するためにワイルドカードマスクを利用します。ワイルドカードマスクはIPアドレスとセットにして、32ビットのIPアドレスがどのようなビットパターンであるかを表します。多くの場合、IPアドレスの範囲を表すことになります。ワイルドカードマスクの特徴は、以下の通りです。

  • 32ビットのビット列でIPアドレスとセット
  • ワイルドカードのビット「0」
    • 直前のIPアドレスの対応するビットと一致している必要がある
  • ワイルドカードのビット「1」
    • 直前のIPアドレスの対応するビットと一致しなくてもよい

ワイルドカードマスクとIPアドレスのセットとして、次の例を考えます。

192.168.0.0 0.0.255.255

ワイルドカードマスクが「0.0.255.255」となっているので、直前に指定しているIPアドレスの先頭から16ビット分が一致しているかどうかをチェックします。つまり、IPアドレスの範囲として「192.168.0.0~192.168.255.255」を表しています。

図 IPアドレスとワイルドカードマスク
図 IPアドレスとワイルドカードマスク

IPアドレスとワイルドカードマスクの組み合わせと具体的なIPアドレスの範囲の例を簡単にまとめます。

表 IPアドレスとワイルドカードマスクの組み合わせ例

IPアドレスとワイルドカードマスク

IPアドレス範囲

192.168.1.0 0.0.0.255

192.168.1.0~192.168.1.255

192.168.10.224 0.0.0.15

192.168.10.224~192.168.10.239

192.168.100.200 0.0.0.0

192.168.100.200

0.0.0.0 255.255.255.255

0.0.0.0~255.255.255.255(すべてのIPアドレス)

ワイルドカードマスクがビット「0」の連続とビット「1」の連続となっているときには、IPアドレス範囲を表していて、その範囲は簡単にわかります。直前に指定しているIPアドレスがIPアドレス範囲の下限です。そして、IPアドレス範囲の上限は、ワイルドカードマスクを足し合わせたIPアドレスです。

たとえば、「192.168.10.224 0.0.0.15」のとき、ワイルドカードマスクはビット「0」が28個連続したあとにビット「1」が4つ連続しています。そうすると、IPアドレスの範囲を表していて、下限が「192.168.10.224」です。そして、範囲の上限はIPアドレス「192.168.10.224」とワイルドカードマスク「0.0.0.15」を足し合わせて「192.168.10.239」です。上に挙げた表のIPアドレスとワイルドカードマスクの組み合わせは、すべてIPアドレスの範囲を表しています。

図 15 IPアドレス範囲の下限と上限
図 IPアドレス範囲の下限と上限

ワイルドカードマスクとして「0.0.0.0」を設定するときには、「host」というキーワードにすることもできます。ただし、「host」を使うときにはIPアドレスとワイルドカードマスクの順番が異なります。

「192.168.100.200 0.0.0.0」 = 「host 192.168.100.200」

また、IPアドレスとワイルドカードマスクの組み合わせの「0.0.0.0 255.255.255.255」は「any」というキーワード1つにできます。

「0.0.0.0 255.255.255.255」 = 「any」

ワイルドカードマスクがビット「0」の連続のあとにビット「1」の連続となっていると、ちょうどサブネットマスクとビットが反転していることになります。このような形のワイルドカードマスクをインバースマスクと呼ぶこともあります。
インバースマスクではなく、途中で「0」と「1」が交互にあらわれるようなワイルドカードマスクの設定も可能です。その場合は、単純なIPアドレスの範囲を表すことにはなりません。
ワイルドカードマスクはOSPFやEIGRPの設定でも利用します。

標準アクセスコントールリストの設定

標準アクセスコントールリストを設定するには、グローバルコンフィグレーションモードで次のコマンドを入力します。

標準ACLコマンドフォーマット

(config)#access-list <ACL-number> {permit|deny} <source-address> [<wildcard>] [log]

<ACL-number> : アクセスコントロールリスト番号 1~99または1300~1999
<source-address> : 送信元IPアドレス
<wildcard> : ワイルドカードマスク
log : アクセスコントロールリストの条件に一致したときにログを生成

ACLの用途によって、<source-address>の意味が変わってしまうことがあります。ルートフィルタでACLを利用するときには、<source-address>はルート情報のネットワークアドレスを意味します。

標準アクセスコントールリストのときは、ワイルドカードマスクを省略可能です。ワイルドカードマスクを省略した場合は、「0.0.0.0」として解釈されます。標準アクセスコントールリストとして条件を複数設定するときには、同じアクセスコントロールリスト番号で複数行の設定を行います。条件の順番は設定した順番通りになります。また、最後に暗黙のdeny anyがあることを忘れないようにしてください。

図 標準アクセスコントールリストの条件
図 標準アクセスコントールリストの条件
ワイルドカードマスク「0.0.0.0」を指定している条件は自動的に条件の順番が並べ替えられて、一番前になります。

アクセスコントロールリストの条件の順番を入れ替えることはできません。また、特定の条件だけを削除することもできません。順番を入れ替えたり、特定の条件を削除する必要があれば、いったんすべての条件を削除してください。その後、正しい順番でアクセスコントロールリストの条件を設定します。

名前付きACLなら特定の条件だけを削除できます。

いきなりルータのコンソールから設定を入力すると、条件の順番を間違ってしまうことがありがちです。そこでルータのコンソールから実際にコマンドを入力する前に、テキストファイルにアクセスコントロールリストの設定コマンドをまとめて順番に間違いがないかをチェックしてください。そして、テキストファイルにまとめたアクセスコントロールリストの設定コマンドをコピー&ペーストして一括入力すると効率よく設定できます。

拡張アクセスコントロールリストの設定

拡張アクセスコントロールリストの設定は、グローバルコンフィグレーションモードで次のコマンドを入力します。

拡張ACLコマンドフォーマット

(config)#access-list <ACL-number> {permit|deny} <protocol> <source-address> <wildcard> [<source-port>] <dest-address> <wildcard> [<dest-port>] [log]

<ACL-number> : アクセスコントロールリスト番号 100~199または2000~2699
<protocol> : プロトコル
<source-address> : 送信元IPアドレス
<wildcard> : ワイルドカードマスク
<source-port> : 送信元ポート番号
<dest-address> : 宛先IPアドレス
<wildcard> : ワイルドカードマスク
<dest-port> : 宛先ポート番号
log : アクセスコントロールリストの条件に一致したときにログを生成

拡張アクセスコントロールリストでは、<protocol>によって、どのヘッダ情報を参照するかを決められます。IPヘッダの宛先/送信元IPアドレスのチェックだけでよければ<protocol>はipです。IPヘッダに加えてTCPヘッダのポート番号もチェックするのであれば、<protocol>にtcpを指定します。プロトコルで指定できるものをヘルプで表示すると、以下のようになります。

R1(config)#access-list 100 permit ?
  <0-255>  An IP protocol number
  ahp      Authentication Header Protocol
  eigrp    Cisco's EIGRP routing protocol
  esp      Encapsulation Security Payload
  gre      Cisco's GRE tunneling
  icmp     Internet Control Message Protocol
  igmp     Internet Gateway Message Protocol
  ip       Any Internet Protocol
  ipinip   IP in IP tunneling
  nos      KA9Q NOS compatible IP over IP tunneling
  ospf     OSPF routing protocol
  pcp      Payload Compression Protocol
  pim      Protocol Independent Multicast
  tcp      Transmission Control Protocol
  udp      User Datagram Protocol
図 プロトコル番号の指定の例
図 17 プロトコル番号の指定の例

プロトコルでtcpまたはudpを指定してTCP/UDPヘッダもチェックする場合、宛先/送信元ポート番号の条件も指定できます。ポート番号の条件は演算子を利用できます。ヘルプでポート番号の条件として指定できる演算子を見ると、次のようになります。

R1(config)#access-list 100 permit tcp any ?
  A.B.C.D  Destination address
  any      Any destination host
  eq       Match only packets on a given port number
  gt       Match only packets with a greater port number
  host     A single destination host
  lt       Match only packets with a lower port number
  neq      Match only packets not on a given port number
  range    Match only packets in the range of port numbers

ポート番号の条件で利用できる演算子の意味は次のとおりです。

表 ポート番号の演算子

演算子

意味

eq

指定したポート番号と一致

gt

指定したポート番号より大きい

lt

指定したポート番号より小さい

neq

指定したポート番号以外

range

ポート番号の範囲

ポート番号は、番号で指定する以外にあらかじめ定義されているキーワードで指定することもできます。たとえば、「www」というキーワードで「80」を意味します。定義されているキーワードは、ヘルプで確認できます。

R1(config)#access-list 100 permit tcp any eq ?
  <0-65535>    Port number
  bgp          Border Gateway Protocol (179)
  chargen      Character generator (19)
  cmd          Remote commands (rcmd, 514)
  daytime      Daytime (13)
  discard      Discard (9)
  domain       Domain Name Service (53)
  drip         Dynamic Routing Information Protocol (3949)
  echo         Echo (7)
  exec         Exec (rsh, 512)
  finger       Finger (79)
  ftp          File Transfer Protocol (21)
  ftp-data     FTP data connections (20)
  gopher       Gopher (70)
  hostname     NIC hostname server (101)
  ident        Ident Protocol (113)
  irc          Internet Relay Chat (194)
  klogin       Kerberos login (543)
  kshell       Kerberos shell (544)
  login        Login (rlogin, 513)
  lpd          Printer service (515)
  nntp         Network News Transport Protocol (119)
  pim-auto-rp  PIM Auto-RP (496)
  pop2         Post Office Protocol v2 (109)
  pop3         Post Office Protocol v3 (110)
  smtp         Simple Mail Transport Protocol (25)
  sunrpc       Sun Remote Procedure Call (111)
  tacacs       TAC Access Control System (49)
  talk         Talk (517)
  telnet       Telnet (23)
  time         Time (37)
  uucp         Unix-to-Unix Copy Program (540)
  whois        Nicname (43)
  www          World Wide Web (HTTP, 80)

拡張アクセスコントロールリストの条件を複数設定するには、やはり同じアクセスコントロールリスト番号で複数行設定すればOKです。また、最後に暗黙のdeny anyがあることも忘れないでください。拡張アクセスコントロールリストでの暗黙のdeny anyの具体的な条件は「deny ip any any」です。

拡張アクセスコントロールリストではワイルドカードマスクを省略できません。
他にもさまざまなヘッダの情報を指定する条件を設定可能です。

アクセスコントロールリストをインタフェースに適用

アクセスコントロールリストは作成しただけでは何の意味もありません。適用してはじめて意味があります。パケットフィルタで用いるには、ルータのインタフェースに適用します。インタフェースコンフィグレーションモードで次のコマンドを入力します。

アクセスコントロールリストをインタフェースに適用

(config-if)#ip access-group <ACL-number> {in|out}

<ACL-number> : 適用するアクセスコントロールリスト番号

あるインタフェースのある方向に適用できるアクセスコントロールリストは1つだけです。複数のアプリケーションフローについてのパケットフィルタを行う場合は、適用するアクセスコントロールリストの条件として複数行設定してください。

図 アクセスコントロールリストのインタフェースへの適用
図 アクセスコントロールリストのインタフェースへの適用

ACLによるパケットフィルタの具体的な設定例は以下の記事で解説しています。