動的フィルタリングの定義方法

動的フィルタリングを定義するには、大きく分けて次の2通りあります。

  • ①ユーザがアクセス制御のルールを記述する方法
  • ②事前にルーターに登録されているアプリケーション名を指定する方法

 ②の方が設定が簡単で扱いやすいのですが、まずは、①の方法について説明してゆきます。①は、トリガーを静的フィルタを定義して動的フィルタを適用する方法です。

具体的な例を挙げて説明していきます。

  • トリガーとなる、制御コネクションは、172.33.0.1の6000番宛である。
  • 2本あるデータコネクションのうち準方向は、UDPの7001番宛である。
  • 2本あるデータコネクションのうち逆方向は、UDPの7002番宛である。

このルールを適用した設定は、次のようになります。

# ip filter 10 pass * * tcp * 6000
# ip filter 11 pass * * udp * 7001
# ip filter 12 pass * * udp * 7002
# ip filter dynamic 1 * 172.33.0.1 filter 10 in 12 out 11
# pp select1
pp1# ip ppsecure filter in 100
pp1# ip pp secure filter out dynamic 1

 10は、トリガーを指定し、「in」の12はトリガーと逆方法のコネクション、「out」の11はトリガーと準方向のコネクションを指定しています。

 フィルタ10に合致するパケットを検出したら、フィルタ11、フィルタ12に合致するパケットを一定時間通過させます。この通過フィルタは、デフォルトで、30秒間保持差ます。

「ip pp secure filter out dynamic 1」で動的フィルタをppのout方向に適用します。

 上の設定例では、シンプルなトリガーの定義でしたが、もっと詳細に定義したい場合や、コネクションが複雑なアプリケーションの場合、動的フィルタリングの定義が複雑になってきます。

 例えば、内部(192.168.1.0/28)から172.33.0.1の6000番宛のアクセスをトリガーとして、として、定義する場合は、以下のようになります。

#ip filter 10 pass 192.168.1.0/28 * tcpflag=0x0002/0x0017 * 6000

 「tcpflag=0x0002/0x0017」の部分は、TCPパケットのSYNフラグだけが立っているパケットを指定しています。この静的フィルタで、HTTPコネクションの最初のパケットを捉えます。

設定値 URG ACK PSH PST SYN FYN
Value(0x0020) 0 0 0 0 1 0
mask(0x0017) 0 1 0 1 1 1

「tcpflag=0x0002/0x0017」にマッチするパケットのパターンは、以下のパターンにもマッチしそうです。

 TCPコネクションの最初のパケットであるSYNを通過させるフィルタであれば、マスク値は、単純にい考えて、オール1となるマスク値でもよさそうなものですが、コマンドリファレンスや設定例集にもサンプルとなるマスク値が掲載されていません。

登録されているアプリケーション名

 そこで、ネット上でよく見かける設定例で、「tcpflag=0x0002/0x0017」となっていますので、ここでもそれに従うこととします。

 ここでは、事前にルーターに登録されているアプリケーション名を指定する方法を紹介していきます。

 動的フィルタを定義するには、トリガとなるパケットを把握する必要がありました。アプリケーションによっては、複数のコネクションを扱ったり、ポート番号が変化したり、アプリケーション固有の振る舞いを行うものもあります。

このようなアプリケーションの場合、動的フィルタの定義が複雑になってしまいます。

 そこで、固有の振る舞いを行うアプリケーションのために、複雑な定義が簡単な設定で実現できるように、事前に登録されたアプリケーションが用意されています。

 登録されたアプリケーションには、FTP、TFTP、DNS、SMTP、POP3、HTTP、HTTPS、TELNET、NetMeetingなどがあります。

具体的な例を挙げて説明してゆきます。

 PPのout方向へは192.168.1.0/24発のTCP/UDPパケットだけを許可し、PP側からはその応答パケットのみを許可する動的フィルタリングを設定します。

# ip filter dynamic 10 192.168.1.0/24 * ftp
# ip filter dynamic 11 192.168.1.0/24 * fftp
# ip filter dynamic 12 192.168.1.0/24 * tcp
# ip filter dynamic 13 192.168.1.0/24 * udp
# ip filter 1 pass 192.168.1.0/24 * tcp,udp
# ip filter 2 reject * * * * *
# pp select 1
# ip pp secure filter in 2
# ip pp secure filter out 1 dynamic 10 11 12 13

ppのout方向へは静的フィルタ1を、動的フィルタとして10~13を指定しています。

 登録されたアプリケーションを動的フィルタを定義する場合は、設定がシンプルで利用しやすくなっています。ファームウェアのリビジョンが上がるにつれ、対応するアプリケーションが増えています。

 ユーザがアクセス制御のルールを記述する方法と比較して、制御ルールの設定漏れのリスクが低くなります。ちなみに、登録されたアプリケーションであっても自分でアクセス制御のルールを記述してもかまいません。