フィルタリングとは?
《ネットワーク》 - 2017.03.22

ルーティングに並びネットワークセキュリティの基礎技術解説として「フィルタリング(Filtering)」について学びましょう。
フィルタリングは文字通り、パケットの「通過」「廃棄」を制御する技術です。
OSIの第3層(ネットワーク層)、第4層(トランスポート層)のレベルで情報を選別して制御します。
インターネットは世界のネットワークを相互に接続しており、様々な人々とつながることができます。
その反面、つながるが故に情報が筒抜けになってしまいます。
そこで、フィルタリングによるファイヤーウォール(壁)を作り、必要最小限のパケットを通過させるようにします。
LinuxではOS(カーネル)にて、パケットを処理するための
「Netfilter」と呼ばれる仕組みを持っています。
これは、フィルタリングしたり、NAT変換したりといったパケットを処理する機能を持っています。
その「Netfilter」の機能を操作するコマンド(ツール)のことを
「iptables」と呼びます。
「iptables」を用いることで、パケットの通過・廃棄といった制御が実現できます。
Linuxシェルにて下記のようにコマンドを実行すると、現在の設定内容が確認できます。
iptables -S [-t(※1)][filter] [chain(※2)] ※括弧はフィルタの場合は省略可能
(※1) [-t]は参照するテーブルを指定するもので、下記のような種類があります。
@ filter     :フィルタリング制御用テーブル
A nat       :NAT/NAPT制御用テーブル
B mangle :優先制御等のマーク設定用テーブル
C raw      :処理しないパケットの振り分け用テーブル
(※2) チェイン(chain)はルールを繋げるためのまとまりを示し、ルールの設定先となります。
次のようなチェインがデフォルトで定義されています(ビルトインチェイン)。
チェインは「-N」コマンドによって任意で作成することができます(ユーザ定義チェイン)
@ PREROUTING : ルーティングする前に適用される
A INPUT : プロセスに入力する前に適用される
B FORWARD : 転送時に適用される
C OUTPUT : プロセスから出力する際に適用される
D POSTROUTING : ルーティング処理終了後に適用される
★通常、プロセスにINPUTされた場合に、プロセスにパケットが流入しますが、
ローソケット(RawSocket)などで、プロセスがソケットを作成した場合などは、
PREROUTINGを通過すると、その時点でパケットのコピーを受信するようになります。
パケットのオリジナルはINPUTチェインのルールが適用され、
なおかつ、コピーされたパケットをローソケットで受信するような挙動になります。
下記コマンドを実行すると、チェイン単位でルールを確認できます。
また、パケットがルールにヒットしたカウントも含めて確認することができます。
iptables -nvL [-t][filter] [chain] ※括弧はフィルタの場合は省略可能
・・・ルールの追加削除の話はのちほど。。