Linux Kernel(2.6)の実装に関するメモ書き

フィルタ


Rev.7を表示中。最新版はこちら

カーネルのnetfilter機能により、パケットフィルタやIPマスカレードを行なうことができる。カーネルに対する設定はiptablesコマンドで行なう。

フィルタの登録テーブル

フィルタのエントリはnf_hooks[pf][hook]に登録される。プロトコル(pf)毎にHook(hook)種別があり、Hook種別毎にエントリをリスト形式で登録している。Hook種別毎にIPv4では表1に示すHook種別がある。

表1 IPv4のHook種別
Hook種別
説明
NF_IP_PRE_ROUTING IPパケット受信してルーティングテーブルを検索する前にチェックされるフィルタ
NF_IP_LOCAL_IN 受信したパケットが自システム宛だった場合にチェックされるフィルタ。
自システム宛かどうかはルーティングテーブルを引いて判断されるので、このHookのタイミングはNF_IP_PRE_ROUTINGの後になる。
NF_IP_FORWARD 受信したパケットが中継対象だった場合にチェックされるフィルタ。
NF_IP_LOCAL_OUT 自システムからパケットをう送信するときにチェックされるフィルタ。
NF_IP_POST_ROUTING パケット送信時にルーティングテーブルを検索後にチェックされるフィルタ。

コマンドとのインタフェース

ユーザ空間のコマンドがカーネルにエントリを設定したり、カーネルからエントリを取得するのにはsetsockopt(),getsockopt()で行なう。

ソケットはRAWソケット(IPv4ならsocket(AF_INET, SOCK_RAW, IPPROTO_RAW))を使用する。setsockopt(),getsockopt()で指定するlevelはIPPROTO_IP,IP6。オプション名は表2に示すものがある。

表2 ソケットオプション名(IPv4)
種別
オプション名
set

IPT_SO_SET_REPLACE
IPT_SO_SET_ADD_COUNTERS
get



IPT_SO_GET_INFO
IPT_SO_GET_ENTRIES
IPT_SO_GET_REVISION_MATCH
IPT_SO_GET_REVISION_TARGET


[関連関数]
NF_HOOK(pf, hook, skb, indev, outdev, okfn)
pf,hookで指定したフィルタエントリをチェックし、skbのパケットを通してよければ、okfnに登録されたルーチンを呼び出す。

nf_register_hook(reg)
フィルタをnf_hooks[][]の指定Hookにエントリを登録する。
IPv4,IPv6の各プロトコル層から呼ばれる。


最終更新 2006/08/16 02:40:56 - kztomita
(2006/08/14 00:25:03 作成)


リンク
最近更新したページ
検索