ipftest(1)

名称
ipftest - 任意の入力に対してパケットフィルタルールをテストする

書式
ipftest [ -vbdPRSTEHX ] [ -I interface ] -r <filename> [ -i <filename> ] [ -s <ipaddress> ]

解説

ipftest は、 フィルタルール集合をあるべき場所に置かずにテストできるようにする ために提供されています。 これは動作して、フィルタルールの効果をテストします。 安全な IP 環境を提供するに際し、混乱を最小にできればよいということです。

ipftest は、ipf の標準ルールセットを解釈し、 これを入力に対して適用し、結果として出力を返します。 しかし、フィルタを通過したパケットに対して ipftest が返すのは、 次の 3 つの値のうちの 1 つです: pass, block, nomatch。 これは、 パケットがフィルタルールセットを通過するにあたって何が発生しているのかに関し、 オペレータの理解を助けることを意図しています。

-S, -T, -E のいずれのオプションも使用しない場合、 ipftest は固有のテキスト入力フォーマットを使用し、 「擬似」IP パケットを生成します。 使用するフォーマットは次のとおりです:
		"in"|"out" "on" if ["tcp"|"udp"|"icmp"]
			srchost[,srcport] dsthost[,destport] [FSRPAU]

あるインタフェース (if) にて、 入る ("in") または出る ("out") パケットを生成できます。 オプションとして主要プロトコル 3 つの中から 1 つを選択できます。 TCP または UDP の場合、ポートパラメータの指定も必要です。 TCP が選択された場合、(オプションとして) 最後に TCP フラグを指定可能です。 以下に例を数個示します:
		# le0 に到着する UDP パケット
		in on le0 udp 10.1.1.1,2210 10.2.1.5,23
		# localhost から le0 に到着する IP パケット - うーむ :)
		in on le0 localhost 10.4.12.1
		# SYN フラグを設定されて le0 から出て行く TCP パケット
		out on le0 tcp 10.4.12.1,2245 10.1.1.1,23 S

オプション

-v  冗長モード。 通過したまたはしなかった入力パケットに対して ルールのどの部分がマッチしたのかに関し、より詳しい情報を提供します。

-d  フィルタルールデバッグをオンにします。 現在は、IP ヘッダチェックにおいて、ルールがマッチしなかった理由を表示 するだけです (アドレス/ネットマスクなど)。

-b  パケットをフィルタに通した結果の出力を、短いまとめ (1 語)、 すなわち "pass", "block", "nomatch" のいずれかにします。 リグレッションテストの際に使用します。

-I <interface>
    (ルールのマッチに使用される) インタフェース名を、指定された名前に設定します。 この方法無しにはパケットとインタフェースとを関連付けられない、 -P, -S, -T, -E の各オプションにおいて有用です。 通常の「テキストパケット」は、この設定に優先します。

-P  -i で指定される入力ファイルは、 libcap (すなわち tcpdump バージョン 3) が生成したバイナリファイルです。 このファイルから読まれたパケットは、(ルールに対する) 入力になります。 インタフェースは -I で指定可能です。

-R  ルールをロードするのではなく削除します。 このオプションはトグルしませんので、 一度設定したら -R をさらに使用しても解除できません。

-S  入力ファイルは「スヌープ」フォーマット (RFC 1761 参照) です。 パケットはこのファイルから読み取られ、 任意のインタフェースからの入力として使用されます。 おそらく現在のところ、これが最も有用な入力タイプでしょう。

-T  入力ファイルは tcpdump のテキスト出力です。 現在サポートされているテキストフォーマットは、 次の tcpdump オプションの組み合わせの出力です:

		tcpdump -n
		tcpdump -nq
		tcpdump -nqt
		tcpdump -nqtt
		tcpdump -nqte

-H  入力ファイルは 16 進数であり、パケットのバイナリ構造を表現する必要があります。 IP ヘッダの長さが正しくなくても、長さは補正されません。 1 個のパケットが複数行の 16 進数とパケット終端を表す空行とに 分割されていてもかまいません。 インタフェース名とパケットの (フィルタリングに対する) 方向とを、 [direction,interface] という形式で指定することができます。 le0 に到達するパケットを指定する場合は [in,le0] のように使います (ここで、[] の文字は必要であり、入力の文法の一部です)。

-X  入力ファイルは IP パケットのテキスト記述からなります。

-E  入力ファイルは etherfind のテキスト出力です。 現在サポートされているテキストフォーマットは、 次の etherfind オプションの組み合わせの出力です:

		etherfind -n
		etherfind -n -t

-i <filename>
    入力を得るファイル名を指定します。デフォルトは標準入力です。

-r <filename>
    フィルタルールを読み取るファイル名を指定します。

-s <ipaddress>
    入力書式が ipftest に対してパケットが内向きなのか外向きなのかを 指定できない場合において、このオプションをある IP アドレスに設定すると、 始点アドレスがこのアドレスにマッチする場合には方向が外向きになり、 終点アドレスがこのアドレスにマッチする場合には方向が内向きになります。

関連項目
ipf(5), ipf(8), snoop(1m), tcpdump(8), etherfind(8c)

バグ
入力形式によっては、テストに有用なことがらすべてをカバーできるほど 十分に多種多様なパケットを表現できません。