総合手引 | セクション 8 | オプション |
オプションとして、プリプロセッサを
ip6fw コードは、各パケットに対してマッチするものが見つかるまで ルールリストを走査することによって動作します。 ルールにはすべて 2 つの関連のあるカウンタがあります。 パケットカウンタとバイトカウンタです。 これらのカウンタはパケットがルールにマッチするときに 更新されます。
ルールは、 1 から 65534 までの "行番号" で序列がつけられており、 ルールを決めたり削除したりするのに使用されます。 ルールは昇順で試され、パケットに最初にマッチしたルールが 適用されます。 複数のルールが同じ行番号を共有できます。 この場合、追加した順番でルールが適用されます。
番号をつけずにルールを足した場合、その直前のルールよりも 100 大きい番号がつけられます。 定義されたルール番号の最大値が 65434 よりも大きい場合、 新しく定義されるルールは、ルールの最後に追加されます。
delete 操作では、それが存在する場合には、 number を行番号にもつ最初のルールが削除されます。
list コマンドは、現在のルールセットを出力します。
show コマンドは `ip6fw -a list' と等価です。
zero 操作は、ルール番号 number に関連づけられたカウンタを 0 にします。
flush 操作は、すべてのルールを削除します。
'#' で始まるコマンドおよび空白だけのコマンドはみな 無視されます。
次のルールは必ず存在します:
65535 deny all from any to any
このルールはデフォルトのポリシです。すなわち、 何も許さないということです。ルールを設定する際に あなたがすべき仕事は、このポリシを必要に合わせて 変更するということです。
次のオプションが使用できます:
| |
リスト中に、カウンタ値を表示します。 "show" コマンドを参照してください。 | |
| |
間違って使用すると問題をひき起こす可能性のある コマンド (つまり、flush) の確認をとりません。 注意、 プロセスに端末が割り当てられていない場合は、暗黙のうちに このオプションが指定されています。 | |
| |
コマンド文字列の文法をチェックするだけで、文字列を実際にカーネルに 渡すことはありません。 | |
| |
add 操作や zero 操作、flush 操作を行っている最中に、 そのアクションに対して何も表示しません (暗黙のうちに '-f' が指定されています)。 これは、リモートログイン時のセッションで スクリプト内で複数の ip6fw コマンドを実行したり (例えば、sh /etc/rc.firewall のように)、 たくさんの ip6fw ルールファイルを処理したりすることで ルールを調節するときに便利です。 通常モード (冗長) で flush 操作を行うと、メッセージが出力されます。 ルールがすべて flush されるので、ログインセッションに メッセージを送ることができず、ログインセッションも閉じてしまいます。 そのため、残りのルールセットは処理されなくなってしまいます。 復旧には、コンソールへのアクセスが必要になります。 | |
| |
list している最中に、最後にマッチしたときのタイムスタンプを表示します。 | |
| |
出力で、アドレスおよびサービス名を解決しようとします。 | |
アクション は次の通りです。
allow | ルールにマッチしたパケットを許可します。 そして探索を終了します。別名は pass, permit, accept です。 |
deny | ルールにマッチしたパケットを捨てます。 そして探索を終了します。 drop は deny の別名です。 |
reject | (非推奨です。) ルールにマッチしたパケットを捨てて、 ICMPv6 の host unreachable notice メッセージを 送ろうとします。 そして探索を終了します。 |
unreach code | ルールにマッチしたパケットを捨てて、 ICMPv6 の unreachable notice メッセージをコード code で送ろうとします。ここで、 code は 0 から 255 までの番号もしくは次の別名のうちのいずれかです: noroute, admin, notneighbor, addr, noport 。 そして探索を終了します。 |
reset | TCP パケットのみです。 ルールにマッチしたパケットを捨てて、 TCP reset (RST) notice メッセージを送ろうとします。 そして探索を終了します。 |
count | ルールにマッチしたすべてのパケットに対するカウンタを 更新します。 探索は、次のルールへと継続します。 |
skipto number | number よりも小さい番号のついたルールをスキップします。 探索は number 以上の番号のついたルールへと継続します。 |
カーネルを IPV6FIREWALL_VERBOSE つきでコンパイルした場合、パケットが "log" キーワードつきのルールにマッチしたとき または clear/resetlog が実行されたときには、 メッセージが syslogd(8) に記録されるか、これが失敗したときにはコンソールにメッセージが表示されます。 カーネルを IPV6FIREWALL_VERBOSE_LIMIT オプションつきでコンパイルした場合、 特定のチェーンエントリに対して このオプションで指定した数だけパケットを受け取った後は ログを記録しません。 この制限に到達した場合、制限とルール番号が記録されます。 このエントリに対するカウンタをクリアすることでログの記録を再開できます。
syslogd(8) ログおよびデフォルトのログの制限を、 sysctl(8) インタフェースを介して動的に調整できます。
proto は次の通りです。
ipv6 | すべてのパケットがマッチします。 別名 all は同じ効果を持ちます。 |
tcp | TCP パケットだけがマッチします。 |
udp | UDP パケットだけがマッチします。 |
ipv6-icmp | ICMPv6 パケットだけがマッチします。 |
<number|name> | 指定したプロトコルだけがマッチします (完全なリストは /etc/protocols を参照してください)。 |
src および dst は次の通りです。
<address/prefixlen> | [ports] |
<address/prefixlen> は次のように指定できます:
ipv6no | fec0::1:2:3:4 という形式の IPv6 ナンバ。 |
ipv6no/prefixlen | fec0::1:2:3:4/112 のような形式のプレフィックス長をもった IPv6 ナンバ。 |
"not" 修飾子をアドレスの前につけることで、マッチの意味を反転させることができます。 これによって、他のすべてのアドレスが代わりにマッチするようになります。 これは、ポート番号の選択には影響ありません。
TCP および UDP プロトコルでは、オプションで ports が次のように指定できます:
{port|port-port}[,port[,...]] | |
( /etc/services より) サービス名を、 数値によるポート番号の代わりに使用できます。 範囲は最初の値としてのみ指定でき、ポートリスト長は IPV6_FW_MAX_PORTS (<netinet6/ip6_fw.h> で指定) 個のポートまでに制限されています。
0 ではないオフセットを持つ (すなわち、最初のフラグメントではない) フラグメントパケットは、1 つ以上のポートが列挙されたルールには 絶対にマッチしません。 フラグメントパケットのマッチについての詳細は frag オプションを参照してください。
ルールは、パケットが入力されるとき、および出力されるとき、 あるいはその両方ともであるときに適用されます。 in キーワードは、入力パケットにのみルールがマッチしなくては ならないことを示すものです。 out キーワードは、出力パケットにのみルールがマッチしなくては ならないことを示すものです。
あるインタフェースを通るパケットにマッチするためには、 via を使用して次のようにインタフェースを指定してください。
via ifX | パケットは、インタフェース ifX を通らなくてはなりません。 |
via if* | パケットは、インタフェース ifX を通らなくてはなりません。ここで、X は任意のユニット番号です。 |
via any | パケットは、 なんらかの インタフェースを通らなくてはなりません。 |
via ipv6no | パケットは、IPv6 アドレス ipv6no を持ったインタフェースを通らなくてはなりません。 |
via キーワードを使用すると、該当インタフェースは常に チェックされるようになります。 via の代わりに recv あるいは xmit を使用すると、 (それぞれ) 受信インタフェースまたは送信インタフェースだけが チェックされます。 両方を指定することで、受信インタフェース、送信インタフェースの 両方ともにパケットをマッチさせることができます。 例えば、次のようにします。
ip6fw add 100 deny ip from any to any out recv ed0 xmit ed1
recv インタフェースは、入力パケットあるいは出力パケットのどちらかで テストされます。これに対して、 xmit インタフェースは、出力パケットでしかテストされません。 そのため、 xmit を使用する場合はいつでも out が必要です (そして、 in は不正です)。 xmit あるいは recv と一緒に via を指定するのは不正です。
パケットには、受信インタフェースあるいは送信インタフェースがない かもしれません。ローカルホストから送信されたパケットには 受信インタフェースがありません。そして、ローカルホストへ向けて 送信されたパケットには送信インタフェースがありません。
追加の options は次の通りです。
frag | パケットがフラグメントであり、しかも データグラムの最初のフラグメントでなければマッチします。 frag は、 tcpflags あるいは TCP/UDP ポートの指定と一緒には使うことができません。 |
in | パケットが入ってこようとしている場合にマッチします。 |
out | パケットが出ていこうとしている場合にマッチします。 |
ipv6options spec | IPv6 ヘッダに、 spec で指定されたコンマ区切りのオプションリストの要素が含まれて いればマッチします。 サポートしている IPv6 オプションは次の通りです。 hopopt (hop-by-hop オプションヘッダ)、 route (ルーティングヘッダ)、 frag (フラグメントヘッダ)、 esp (暗号ペイロード)、 ah (認証ヘッダ)、 nonxt (次ヘッダなし)、そして opts (デスティネーションオプションヘッダ) です。 特定のオプションがないことは、 "amp;!" で表します ( まだ動作していません) 。 |
established | RST あるいは ACK ビットがセットされているパケットに マッチします。 |
setup | SYN ビットはセットされているが ACK ビットがセットされていない パケットにマッチします。 |
tcpflags spec | TCP ヘッダに、 spec で指定されたコンマ区切りのフラグリストの要素が含まれていれば マッチします。 サポートしている TCP フラグは以下の通りです。 fin, syn, rst, psh, ack, そして urg です。 特定のフラグがないことは "amp;!" を使って表します。 tcpflags 指定を含んだルールは、 0 でないオフセットを持ったフラグメントパケットには 絶対にマッチしません。 フラグメントパケットへのマッチに関する詳細は frag オプションを参照してください。 |
icmptypes types | ICMPv6 のタイプが types リスト中にあればマッチします。 リストには、範囲と、個々のタイプをコンマで区切ったものを、 任意に組み合わせて指定できます |
ネットワーク越しにログインしている場合は、 ip6fw の KLD バージョンをロードするのは、おそらく あなたが思っているほどには簡単ではないでしょう ( サポートされていません ) 。 次のようなコマンド行を推奨します。
kldload ip6fw && \ ip6fw add 32000 allow all from any to any
同様の状況で、同じ行で
ip6fw flush
を行うことも良くないアイデアです。
ip6fw add deny tcp from hacker.evil.org to wolf.tambov.su 23
次のコマンドは、hackers ネットワーク全体から自ホストへの接続を 何であれ禁止します。
ip6fw add deny all from fec0::123:45:67:0/112 to my.host.org
これは、カウント値の記録とタイムスタンプ情報を表示するための リストコマンドの良い使用例です。
ip6fw -at l
あるいは、タイムスタンプなしの、短い形式のものは
ip6fw -a l
です。
このプログラムは、あなたのコンピュータをかなり使えない状態 にしてしまう可能性があります。初めて使用する際には、 コンピュータのコンソールで作業してください。また、 理解していないことは何も しないでください 。
チェーンエントリを操作 / 追加する際には、サービス名および プロトコル名は受け付けられません。
API は、BSDI 用に Daniel Boulet が書いたコードに基いています。
IP6FW (8) | March 13, 2000 |
総合手引 | セクション 8 | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | I think Unix and snowflakes are the only two classes of objects in the universe in which no two instances ever match exactly. | ” |
— Noel Chiappa |