フィルタ
Rev.6を表示中。最新版はこちら。
カーネルのnetfilter機能により、パケットフィルタやIPマスカレードを行なうことができる。カーネルに対する設定はiptablesコマンドで行なう。フィルタの登録テーブル
フィルタのエントリはnf_hooks[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の各プロトコル層から呼ばれる。
IPv4,IPv6の各プロトコル層から呼ばれる。