「パケットフィルタリング」とは、通信が正しく行われるように特定のルールに基づいて検査、あるいは通信セッションの前後関係の整合性を検査し、不正だと判断した場合パケットを破棄するフィルタリング手法である。
「パケットフィルタリング」とは、通信が正しく行われるように特定のルールに基づいて検査、あるいは通信セッションの前後関係の整合性を検査し、不正だと判断した場合パケットを破棄するフィルタリング手法である。
また、パケットをキャプチャリングする際に条件を指定し、その条件に基づいて不要なパケットをフィルタリングすることも、パケットフィルタリングと呼ばれることがある。ここでは混乱を避けるため、前者をパケットフィルタリング、後者を「キャプチャフィルタリング」と呼ぶこととする。
一般的にルーターやファイアウォールなどの中継機器はパケットフィルタリング機能を備えている。ファイアウォールにはさまざまなフィルタリング方式があるが、その一方でルーターは静的および動的フィルタリングのみ備えていることが多い(各種フィルタリングについては後述する)。
パケットフィルタリングのルールにはMACアドレスやIPアドレス、ポート番号、アプリケーション層のデータなどが使われることがある。また、パケットフィルタリング手法によってルールテーブルにルールを追加するようなものもあれば、通信内容から判断するようなものもある。
Linux Kernel 2.4以降では「Netfilter」というパケットフィルタリング用のフレームワークが備わっている。「iptables」「firewall-cmd」などのコマンドによってフィルタリングルールを追加し、ルールに応じて不正なパケットが破棄される。
Linux Kernel 2.2以降ではBPF(Berkley Packet Filter)が備わっており、socket作成時に「PF_PACKET」を指定することで、キャプチャフィルタリングを行うことが可能である。
ファイアウォールにおけるパケットフィルタリング手法は主に3種類ある。
静的パケットフィルタリングとは、事前にルールを登録しておき、ルールに従って静的にフィルタリングする手法である。通信の向き(WANからLAN、あるいはLANからWAN)、プロトコル、送信元および宛先のIPアドレスやポート番号を元にフィルタリングを行う。
フィルタリングの際に参照する情報を検査する方がシンプルであるため、後述する「ステートフルパケットインスペクション」に比べると高速に処理が行える点がメリットだ。その一方で、ルールが複雑になりやすいことがデメリットである。
動的パケットフィルタリングでは、静的パケットフィルタリングと同様、通信の向き、プロトコル、送信元および宛先のIPアドレスやポート番号を元にフィルタリングを行う。それに加えて、通信が行われた際正しい応答パケットが通過するように、動的にルールを追加するような制御も行う。
メリットおよびデメリットは静的パケットフィルタリングと同様である。
ステートフルパケットインスペクション(「SPI」とも呼ばれる)の場合、TCP/IPまで検査する場合とアプリケーションプロトコルまで検査する場合の2通りがある。
どちらも情報を保持する処理が含まれ、静的/動的フィルタリングよりも処理に時間がかかる可能性があることがデメリットである。だが、静的/動的フィルタリングではすり抜けてしまう不正パケットも防げる点がメリットである。
通信のセッション情報(TCPのシーケンス番号および確認応答番号)を保持しておき、「セッションの前後関係の整合性が保たれているかどうか」を検査する。例えば、ACK(ACKnowledge)フラグを立てた、不正パケットを送信してくるような場合、セッションログと整合性を確認し、このパケットを破棄する。
アプリケーション層において、「リクエストに対して期待されるレスポンスであるかどうか」の検査を行う。検査の際には、データベースなどに事前に登録されている情報を用いる場合が多い。
【2004/1/1】初版公開。
【2018/12/10】最新情報に合わせて内容を書き直しました(セキュリティ・キャンプ実施協議会 著)。
Copyright © ITmedia, Inc. All Rights Reserved.