EN JA
ipftest(1)
ipftest(1) FreeBSD General Commands Manual ipftest(1)

名称

ipftest -任意の入力でパケットフィルタルールをテストする

書式

ipftest [ -6bCdDoRvx ] [ -F input-format ] [ -i <filename> ] [ -I interface ] [ -l <filename> ] [ -N <filename> ] [ -P <filename> ] [ -r <filename> ] [ -S <ip_address> ] [ -T <optionlist> ]

解説

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

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

少なくとも、 -N, -P または -r のうちの 1 つを指定しなければなりません。

オプション

-6
IPv6 を使用します。
-b
フィルタにパケットを通した結果の簡潔な要約 (1 語) を出力させます。 "pass", "block"または "nomatch"のいずれかです。これはリグレッション (回帰) テストに使用されます。
-C
ipftest に入力されるすべてのパケットのためのチェックサムを (再) 計算するように強制します。ハードウェアの負荷軽減のために、部分的なチェックサムがあるところで tcpdump からの pcap ファイルが入力されるなら、これが必要となります。
-d
フィルタルールデバッグをオンにします。現在は、IP ヘッダチェックにおいて、ルールがマッチしなかった理由を表示するだけです (アドレス/ネットマスクなど)。
-D
終了する前に、内部テーブルをダンプします。ログメッセージを除きます。
-F
このオプションは、入力するファイルの入力形式を選択するために使用されます。次の形式が利用可能です: etherfind, hex, pcap, snoop, tcpdump, text。
etherfind
入力ファイルは etherfind からのテキスト出力です。現在サポートされているテキスト形式は、次の etherfind オプションの組み合わせの結果です:


etherfind -n
etherfind -n -t

hex
入力ファイルは、パケットのバイナリ構造を表現する、16 進数です。 IP ヘッダに誤った長さが入れられるなら、長さの修正は行われません。 1 つのパケットは、空白行がパケットの終りを示す、16 進数のいくつかの行に分割することができます。 [direction,interface] の形式を使用して行の始めで (フィルタリングの目的で) インタフェース名とパケットの方向の両方を指定することができます。 le0 に着信しているパケットを定義するためには、 [in,le0] を使用します - [] は、必要で、入力文法の一部です。

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

snoop
入力ファイルは「スヌープ」形式 (RFC 1761 参照) です。パケットはこのファイルから読み込まれ、任意のインタフェースからの入力として使用されます。おそらく現在のところ、これが最も有用な入力タイプでしょう。
tcpdump
入力ファイルは tcpdump のテキスト出力です。現在サポートされているテキスト形式は、次の tcpdump オプションの組み合わせの出力です:


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

text
入力ファイルは ipftest テキスト入力形式です。これは -F 引数が指定されなければ、デフォルトです。使用される形式は、次の通りです:
"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

-i <filename>
入力を得るファイル名を指定します。デフォルトは標準入力です。
-I <interface>
(ルールのマッチで使用される) インタフェース名を提供された名前に設定します。そうでなければ、これはパケットをインタフェースを関連づけるのが可能でないところで役に立ちます。通常の "テキストパケット"は、この設定に優先します。
-l <filename>
テストの間に生成されたログメッセージを指定されたファイルにダンプします。
-N <filename>
ipnat(5) 形式の NAT ルールを読み込むファイル名を指定します。
-o
生 (そのまま) の形式でファイル /tmp/ interface_name の各インタフェースに書き込まれている出力パケットを保存します。
-P <filename>
ippool(5) 形式の IP プール設定情報を指定されたファイルから読み込みます。
-r <filename>
ipf(5) 形式のフィルタルールを読み込むファイル名を指定します。
-R
IP アドレスをホスト名に変換することを試みません。
-S <ip_address>
このオプションで指定された IP アドレスは、パケットが "入力"または "出力"として取り扱われるべきであるかどうかを決定するために ipftest によって使用されます。 IP パケットの発信元 (始点) アドレスが適合するなら、着信であると見なされます。適合しなら、発信であると見なされます。これは、各パケットで保存された入力/出力情報がないところで、主に tcpdump の (pcap) ファイルで使用されます。
-T <optionlist>
このオプションは、 ipf-T オプションで利用可能な IPFilter カーネル変数のランタイムの変更をシミュレートします。 optionlist パラメータは調整コマンドのコンマで区切られたリストです。調整コマンドは、"list" (カーネルのすべての変数、それらの最大、最小と現在の値、を検索したリスト)、単一の変数名 (現在の値を検索する) と変数名に次の割り当てで新しい値を設定するいずれかです。例に関しては ipf(8) を参照してください。
-v
冗長モード。これは渡された入力パケットがルールのどの部分にマッチしたか、または失敗したかに関する多くの情報を提供します。
-x
デコードされた内容を印刷 (表示) する前に、各パケットの 16 進ダンプを印刷します。

関連項目

ipf(5), ipf(8), snoop(1m), tcpdump(8), etherfind(8c)

バグ

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