doc/ja_JP.eucJP/man/man8/ip6fw.8
Kazuo Horikawa 366606db59 Catch up with 4.6-STABLE-20020715-JPSNAP
(except for OpenSSH 3.4p1 related and new entries)
2002-07-21 22:30:43 +00:00

608 lines
15 KiB
Groff

.\"
.\" %FreeBSD: src/sbin/ip6fw/ip6fw.8,v 1.3.2.10 2002/07/01 02:00:33 kuriyama Exp %
.\"
.\" $KAME$
.\"
.\" Copyright (C) 1998, 1999, 2000 and 2001 WIDE Project.
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the project nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.\" WORD: modifier 修飾子
.\" WORD: fragmented packet フラグメントパケット
.\" WORD: encapsulating security payload 暗号ペイロード [IPv6]
.\" WORD: no next header 次ヘッダなし [IPv6]
.\" WORD: fine points 微調整
.Dd March 13, 2000
.Dt IP6FW 8
.Os
.Sh 名称
.Nm ip6fw
.Nd IPv6 ファイアフォール用制御ユーティリティ
.Sh 書式
.Nm
.Op Fl q
.Oo
.Fl p Ar preproc
.Oo Fl D
.Ar macro Ns Op = Ns Ar value
.Oc
.Op Fl U Ar macro
.Oc
.Ar pathname
.Nm
.Op Fl f | Fl q
flush
.Nm
.Op Fl q
zero
.Op Ar number ...
.Nm
delete
.Ar number ...
.Nm
.Op Fl aftN
list
.Op Ar number ...
.Nm
.Op Fl ftN
show
.Op Ar number ...
.Nm
.Op Fl q
add
.Op Ar number
.Ar action
.Op log
.Ar proto
from
.Ar src
to
.Ar dst
.Op via Ar name | ipv6no
.Op Ar options
.Sh 解説
簡単に設定するために、ルールをファイルに格納して、最初の書式に示すように
.Nm
に処理させることが可能です。
絶対
.Ar pathname
を使用する必要があります。
ファイルは、1 行ずつ読み込まれ、
.Nm
ユーティリティへの引数に適用されます。
.Pp
オプションとして、プリプロセッサを
.Fl p Ar preproc
で指定可能であり、ここを
.Ar pathname
がパイプされます。
有用なプリプロセッサには
.Xr cpp 1
.Xr m4 1
があります。
.Ar preproc
の最初の文字がスラッシュ
.Pq Ql /
で開始しない場合、通常の
.Ev PATH
の名前検索が実行されます。
.Nm
実行時には (まだ) 全ファイルシステムがマウントされていない環境においては、
注意が必要です (例えば NFS 経由でマウントする場合)。
一度
.Fl p
が指定されると、オプションの
.Fl D
.Fl U
の指定を続けることが可能であり、これらはプリプロセッサに渡されます。
これにより、設定ファイル (ローカルホスト名による条件等) が柔軟になり、
IP アドレス等の頻繁に必要となる引数を集中管理可能となります。
.Pp
.Nm
コードは、各パケットに対してマッチするものが見つかるまで
ルールリストを走査することによって動作します。
ルールにはすべて 2 つの関連のあるカウンタがあります。
パケットカウンタとバイトカウンタです。
これらのカウンタはパケットがルールにマッチするときに
更新されます。
.Pp
ルールは、
1 から 65534 までの
.Dq 行番号
で序列がつけられており、
ルールを決めたり削除したりするのに使用されます。
ルールは昇順で試され、パケットに最初にマッチしたルールが
適用されます。
複数のルールが同じ行番号を共有できます。
この場合、追加した順番でルールが適用されます。
.Pp
番号をつけずにルールを足した場合、その直前のルールよりも
100 大きい番号がつけられます。
定義されたルール番号の最大値が 65434 よりも大きい場合、
新しく定義されるルールは、ルールの最後に追加されます。
.Pp
delete 操作では、それが存在する場合には、
.Ar number
を行番号にもつ最初のルールが削除されます。
.Pp
list コマンドは、現在のルールセットを出力します。
.Pp
show コマンドは `ip6fw -a list' と等価です。
.Pp
zero 操作は、ルール番号
.Ar number
に関連づけられたカウンタを 0 にします。
.Pp
flush 操作は、すべてのルールを削除します。
.Pp
.Sq #
で始まるコマンドおよび空白だけのコマンドはみな
無視されます。
.Pp
次のルールは必ず存在します:
.Bd -literal -offset center
65535 deny all from any to any
.Ed
.Pp
このルールはデフォルトのポリシです。すなわち、
何も許さないということです。ルールを設定する際に
あなたがすべき仕事は、このポリシを必要に合わせて
変更するということです。
.Pp
次のオプションが使用できます:
.Bl -tag -width flag
.It Fl a
リスト中に、カウンタ値を表示します。
.Dq show
コマンドを参照してください。
.It Fl f
間違って使用すると問題をひき起こす可能性のある
コマンド (つまり、flush) の確認をとりません。
.Ar 注意、
プロセスに端末が割り当てられていない場合は、暗黙のうちに
このオプションが指定されています。
.It Fl q
add 操作や zero 操作、flush 操作を行っている最中に、
そのアクションに対して何も表示しません (暗黙のうちに '-f' が指定されています)。
これは、リモートログイン時のセッションで
スクリプト内で複数の ip6fw コマンドを実行したり
(例えば、sh /etc/rc.firewall のように)、
たくさんの ip6fw ルールファイルを処理したりすることで
ルールを調節するときに便利です。
通常モード (冗長) で flush 操作を行うと、メッセージが出力
されます。ルールがすべて flush されるので、ログインセッションに
メッセージを送ることができず、ログインセッションも閉じてしまいます。
そのため、残りのルールセットは処理されなくなってしまいます。
復旧には、コンソールへのアクセスが必要になります。
.It Fl t
list している最中に、最後にマッチしたときのタイムスタンプを表示します。
.It Fl N
出力で、アドレスおよびサービス名を解決しようとします。
.El
.Pp
.Ar アクション
は次の通りです。
.Bl -hang -offset flag -width 16n
.It Ar allow
ルールにマッチしたパケットを許可します。
そして探索を終了します。別名は
.Ar pass ,
.Ar permit ,
.Ar accept
です。
.It Ar deny
ルールにマッチしたパケットを捨てます。
そして探索を終了します。
.Ar drop
.Ar deny
の別名です。
.It Ar reject
(非推奨です) ルールにマッチしたパケットを捨てて、
ICMPv6 の host unreachable notice メッセージを
送ろうとします。
そして探索を終了します。
.It Ar unreach code
ルールにマッチしたパケットを捨てて、
ICMPv6 の
unreachable notice メッセージをコード
.Ar code
で送ろうとします。ここで、
.Ar code
は 0 から 255 までの番号もしくは次の別名のうちのいずれかです:
.Ar noroute ,
.Ar admin ,
.Ar notneighbor ,
.Ar addr ,
.Ar noport
そして探索を終了します。
.It Ar reset
TCP パケットのみです。
ルールにマッチしたパケットを捨てて、
TCP reset (RST) notice メッセージを送ろうとします。
そして探索を終了します
.Em ( "まだ動作しません" )
.It Ar count
ルールにマッチしたすべてのパケットに対するカウンタを
更新します。
探索は、次のルールへと継続します。
.It Ar skipto number
.Ar number
よりも小さい番号のついたルールをスキップします。
探索は
.Ar number
以上の番号のついたルールへと継続します。
.El
.Pp
カーネルを
.Dv IPV6FIREWALL_VERBOSE
つきでコンパイルした場合、パケットが
.Dq log
キーワードつきのルールにマッチしたとき
または clear/resetlog が実行されたときには、
メッセージが
.Xr syslogd 8
に記録されるか、これが失敗したときにはコンソールにメッセージが表示されます。
カーネルを
.Dv IPV6FIREWALL_VERBOSE_LIMIT
オプションつきでコンパイルした場合、
特定のチェーンエントリに対して
このオプションで指定した数だけパケットを受け取った後は
ログを記録しません。
この制限に到達した場合、制限とルール番号が記録されます。
このエントリに対するカウンタをクリアすることでログの記録を再開できます。
.Pp
.Xr syslogd 8
ログおよびデフォルトのログの制限を、
.Xr sysctl 8
インタフェースを介して動的に調整できます。
.Pp
.Ar proto
は次の通りです。
.Bl -hang -offset flag -width 16n
.It Ar ipv6
すべてのパケットがマッチします。
別名
.Ar all
は同じ効果を持ちます。
.It Ar tcp
TCP パケットだけがマッチします。
.It Ar udp
UDP パケットだけがマッチします。
.It Ar ipv6-icmp
ICMPv6 パケットだけがマッチします。
.It Ar <number|name>
指定したプロトコルだけがマッチします
(完全なリストは
.Pa /etc/protocols
を参照してください)。
.El
.Pp
.Ar src
および
.Ar dst
は次の通りです。
.Bl -hang -offset flag
.It Ar <address/prefixlen>
.Op Ar ports
.El
.Pp
.Em <address/prefixlen>
は次のように指定できます:
.Bl -hang -offset flag -width 16n
.It Ar ipv6no
.Li fec0::1:2:3:4
という形式の IPv6 ナンバ。
.It Ar ipv6no/prefixlen
.Li fec0::1:2:3:4/112
のような形式のプレフィックス長をもった IPv6 ナンバ。
.El
.Pp
.Dq not
修飾子をアドレスの前につけることで、マッチの意味を反転させることができます。
これによって、他のすべてのアドレスが代わりにマッチするようになります。
これは、ポート番号の選択には影響ありません。
.Pp
TCP および UDP プロトコルでは、オプションで
.Em ports
が次のように指定できます:
.Pp
.Bl -hang -offset flag
.It Ns {port|port-port} Ns Op ,port Ns Op ,...
.El
.Pp
(
.Pa /etc/services
より) サービス名を、
数値によるポート番号の代わりに使用できます。
範囲は最初の値としてのみ指定でき、ポートリスト長は
.Dv IPV6_FW_MAX_PORTS
(
.Pa /usr/src/sys/netinet6/ip6_fw.h
で指定) 個のポートまでに制限されています。
.Pp
0 ではないオフセットを持つ (すなわち、最初のフラグメントではない)
フラグメントパケットは、1 つ以上のポートが列挙されたルールには
絶対にマッチしません。
フラグメントパケットのマッチについての詳細は
.Ar frag
オプションを参照してください。
.Pp
ルールは、パケットが入力されるとき、および出力されるとき、
あるいはその両方ともであるときに適用されます。
.Ar in
キーワードは、入力パケットにのみルールがマッチしなくては
ならないことを示すものです。
.Ar out
キーワードは、出力パケットにのみルールがマッチしなくては
ならないことを示すものです。
.Pp
あるインタフェースを通るパケットにマッチするためには、
.Ar via
を使用して次のようにインタフェースを指定してください。
.Bl -hang -offset flag -width 16n
.It Ar via ifX
パケットは、インタフェース
.Ar ifX
を通らなくてはなりません。
.It Ar via if*
パケットは、インタフェース
.Ar ifX
を通らなくてはなりません。ここで、X は任意のユニット番号です。
.It Ar via any
パケットは、
.Em なんらかの
インタフェースを通らなくてはなりません。
.It Ar via ipv6no
パケットは、IPv6 アドレス
.Ar ipv6no
を持ったインタフェースを通らなくてはなりません。
.El
.Pp
.Ar via
キーワードを使用すると、該当インタフェースは常に
チェックされるようになります。
.Ar via
の代わりに
.Ar recv
あるいは
.Ar xmit
を使用すると、
(それぞれ) 受信インタフェースまたは送信インタフェースだけが
チェックされます。
両方を指定することで、受信インタフェース、送信インタフェースの
両方ともにパケットをマッチさせることができます。
例えば、次のようにします。
.Pp
.Dl "ip6fw add 100 deny ip from any to any out recv ed0 xmit ed1"
.Pp
.Ar recv
インタフェースは、入力パケットあるいは出力パケットのどちらかで
テストされます。これに対して、
.Ar xmit
インタフェースは、出力パケットでしかテストされません。
そのため、
.Ar xmit
を使用する場合はいつでも
.Ar out
が必要です (そして、
.Ar in
は不正です)。
.Ar xmit
あるいは
.Ar recv
と一緒に
.Ar via
を指定するのは不正です。
.Pp
パケットには、受信インタフェースあるいは送信インタフェースがない
かもしれません。ローカルホストから送信されたパケットには
受信インタフェースがありません。そして、ローカルホストへ向けて
送信されたパケットには送信インタフェースがありません。
.Pp
追加の
.Ar options
は次の通りです。
.Bl -hang -offset flag -width 16n
.It frag
パケットがフラグメントであり、しかも
データグラムの最初のフラグメントでなければマッチします。
.Ar frag
は、
.Ar tcpflags
あるいは TCP/UDP ポートの指定と一緒には使うことができません。
.It in
パケットが入ってこようとしている場合にマッチします。
.It out
パケットが出ていこうとしている場合にマッチします。
.It ipv6options Ar spec
IPv6 ヘッダに、
.Ar spec
で指定されたコンマ区切りのオプションリストの要素が含まれて
いればマッチします。
サポートしている IPv6 オプションは次の通りです。
.Ar hopopt
(hop-by-hop オプションヘッダ)、
.Ar route
(ルーティングヘッダ)、
.Ar frag
(フラグメントヘッダ)、
.Ar esp
(暗号ペイロード)、
.Ar ah
(認証ヘッダ)、
.Ar nonxt
(次ヘッダなし)、そして
.Ar opts
(デスティネーションオプションヘッダ) です。
特定のオプションがないことは、
.Dq \&!
で表します
.Em ( "まだ動作していません" )
.It established
RST あるいは ACK ビットがセットされているパケットに
マッチします。
.It setup
SYN ビットはセットされているが ACK ビットがセットされていない
パケットにマッチします。
.It tcpflags Ar spec
TCP ヘッダに、
.Ar spec
で指定されたコンマ区切りのフラグリストの要素が含まれていれば
マッチします。
サポートしている TCP フラグは以下の通りです。
.Ar fin ,
.Ar syn ,
.Ar rst ,
.Ar psh ,
.Ar ack ,
そして
.Ar urg
です。
特定のフラグがないことは
.Dq \&!
を使って表します。
.Ar tcpflags
指定を含んだルールは、
0 でないオフセットを持ったフラグメントパケットには
絶対にマッチしません。
フラグメントパケットへのマッチに関する詳細は
.Ar frag
オプションを参照してください。
.It icmptypes Ar types
ICMPv6 のタイプが
.Ar types
リスト中にあればマッチします。
リストには、範囲と、個々のタイプをコンマで区切ったものを、
任意に組み合わせて指定できます
.El
.Sh チェックリスト
ここには、あなたがルールをデザインする際に考慮すべき
重要なポイントをいくつか述べてあります。
.Bl -bullet -offset flag
.It
入力および出力パケットの両方をフィルタするのだということを
忘れないでください。ほとんどの接続には両方向のパケットが
必要です。
.It
とても注意深くテストするのを忘れないでください。
テストする際にはコンソールの近くで行うというのが良いアイデアです。
.It
ループバックインタフェースを忘れないでください。
.El
.Sh 微調整
ファイアウォールが常に破棄するパケットが 1 種類あります。
それは、フラグメントオフセット 1 を持った IPv6 フラグメントです。
これは正しいパケットですが、使用方法は 1 つだけです。
それは、ファイアウォールの抜け道を探そうとすることです。
.Pp
ネットワーク越しにログインしている場合は、
.Nm
の KLD バージョンをロードするのは、おそらく
あなたが思っているほどには簡単ではないでしょう
.Em ( "サポートされていません " )
次のようなコマンド行を推奨します。
.Bd -literal -offset center
kldload /modules/ip6fw_mod.o && \e
ip6fw add 32000 allow all from any to any
.Ed
.Pp
同様の状況で、同じ行で
.Bd -literal -offset center
ip6fw flush
.Ed
.Pp
を行うことも良くないアイデアです。
.Sh パケット変換
サポートされていません。
.Sh 使用例
このコマンドは、
.Em hacker.evil.org
から
.Em wolf.tambov.su
の telnet ポートへの TCP パケットすべてを、このホストで
フォワードしないようにします。
.Pp
.Dl ip6fw add deny tcp from hacker.evil.org to wolf.tambov.su 23
.Pp
次のコマンドは、hackers ネットワーク全体から自ホストへの接続を
何であれ禁止します。
.Pp
.Dl ip6fw add deny all from fec0::123:45:67:0/112 to my.host.org
.Pp
これは、カウント値の記録とタイムスタンプ情報を表示するための
リストコマンドの良い使用例です。
.Pp
.Dl ip6fw -at l
.Pp
あるいは、タイムスタンプなしの、短い形式のものは
.Pp
.Dl ip6fw -a l
です。
.Sh 関連ファイル
.Xr ip 4 ,
.Xr ipfirewall 4 ,
.Xr protocols 5 ,
.Xr services 5 ,
.Xr reboot 8 ,
.Xr sysctl 8 ,
.Xr syslogd 8
.Sh バグ
.Em 注意 !! 注意 !! 注意 !! 注意 !!
.Pp
このプログラムは、あなたのコンピュータをかなり使えない状態
にしてしまう可能性があります。初めて使用する際には、
コンピュータのコンソールで作業してください。また、
理解していないことは何も
.Em しないでください
.Pp
チェーンエントリを操作 / 追加する際には、サービス名および
プロトコル名は受け付けられません。
.Sh 作者
.An Ugen J. S. Antsilevich ,
.An Poul-Henning Kamp ,
.An Alex Nash ,
.An Archie Cobbs
です。
.Pp
.An -nosplit
API は、BSDI 用に
.An Daniel Boulet
が書いたコードに基いています。
.Sh 歴史
.Nm
は最初に
.Fx 4.0
で登場しました。