Skip to content

Instantly share code, notes, and snippets.

@hkwi
Last active August 29, 2015 13:56
Show Gist options
  • Save hkwi/9246576 to your computer and use it in GitHub Desktop.
Save hkwi/9246576 to your computer and use it in GitHub Desktop.

ebtables

NAME

ebtables (v2.0.10-1) - Ethernet bridge frame table administration

DESCRIPTION

ebtables は (Linux kernel 内にある) Ethernet フレームの検査ルールを設定管理するプログラムである。iptables に類似しているが、 Ethernet プロトコルは IP プロトコルよりもずっと単純なので、それほど込み入ってはいない。

チェイン

3つの ebtables テーブルがあり、それらの持つチェインは Linux kernel に組み込まれている。これらのテーブルを使って、機能ごとに別々のルールセットとして整理している。それぞれのルールセットのことをチェインと呼んでいる。チェインとは Ethernet フレームにマッチングする順序づけられたルールの一覧である。ルールがある Ethernet フレームにマッチングすると、その対象フレームにどういった処理を施すかが決まる。処理の指定は「ターゲット」と呼ばれている。現在のルールにマッチングしなかった場合は、次のルールが検査される。「ターゲット」として、 (ユーザ独自の) 新しいチェインを作ることもできる。ユーザ定義チェインを使うと、ルールを線形検索するのと比べてパフォーマンスを改善したり、管理しやすい構造化されたフィルタリングルールを構成したりできる。

ターゲット

Ethernet フレームに対するファイアウォールルール指定や処理は、ターゲットと呼ばれる。フレームがルールにマッチングしたときに kernel が次に行う処理は、ターゲットで指定される。ターゲットは次のいずれかの値のうちの一つです: ACCEPT, DROP, CONTINUE, RETURN, 'extension' の一つ (後述) , あるいはユーザ定義チェインへのジャンプ。

ACCEPT はフレームを通過させる意味になり、DROP はフレームを破棄することを意味する。BROUTINGチェイン内では、ACCEPTDROP は異なる意味を持っている (-tオプションで表示される情報を参照すること) 。CONTINUE は次のルールをチェックすることを意味する。このターゲットは例えば、ある地点を通過したフレームの数を数えたり、ログを取ったり、フレームに複数のターゲットを適用するのに便利である。RETURN はチェインの探索を打ち切り、前の (呼び出し元の) チェインの次のルールから再開することを意味する。target extension については、この man ページの target extension セクションを参照すること。

テーブル

前述のとおり Linux kernel には 3 つの ebtables テーブルがある。filter, natbroute という名前がついている。これら 3 つのテーブルのうち、filter テーブルがコマンドのデフォルトのテーブルである。つまり filter テーブルについては ebtables の '-t filter' 引数を省略できる。その他 2 つのテーブルについては -t 引数が必要である。また -t 引数を使う際は、 ebtables コマンドの最初の引数でなければならない。

-t, --table

filter がデフォルトのテーブルで、3 つの組み込みチェインがある: INPUT (送信先 MAC アドレスのレベルでブリッジ自身に送られたフレームに対して) , OUTPUT (local で生成された、あるいは (b)route されたフレームに対して) と FORWARD (ブリッジで転送されるフレームに対して) である。

nat は MAC アドレスを変更するために使われるもので、3 つの組み込みチェインがある。PREROUTING (フレームが入ってきた時点で変更するため) , OUTPUT (local で生成された、あるいは (b)route されたフレームをブリッジする前に変更するため) と POSTROUTING (フレームが出力される時点で変更するため) である。PREROUTING と POSTROUTING の名称については、より正確には PREFORWARDING, POSTFORWARDING と呼ばれるべきものですが、iptables と ebtables の用語を合わせたほうが簡単だということで、このようになっている。もしこのデフォルトの名称が気に入らない場合は、変更できる (-Eオプション) 。

broute で brouter を作ることができて、BROUTINGという組み込みチェインが1つだけある。DROPACCEPTターゲットは broute テーブル内では特殊な意味を持っている (実装を単純化するために、説明的な名称をあえて使っていない) 。DROP はフレームが route されることを意味し、ACCEPT はフレームがブリッジされることを意味する。BROUTING チェインは、とても早い段階で検査される。ただしブリッジポートに入ってきて転送状態になっているフレームについてのみ検査される。フレームは通常ブリッジされるが、ここでその処理を変更できる。redirectターゲットが便利だ。

EBTABLES コマンドライン引数

最初の '-t table' コマンド引数の後に続く引数は、いくつかのグループ、「コマンド」「その他コマンド」「ルール指定 (rule specification) 」「match extension」「watch extension」と「target extension」に分類される。

コマンド

ebtables コマンドは -t 引数で定義されたテーブルに対して行う処理を指定する。-t 引数を使わなかった場合、デフォルトの filter テーブルに適用される。一度には 1 つのコマンドしか使えない。-L-Z の組み合わせ、-N-P の組み合わせ、あるいは --atomic-file を使ったときは例外として複数のコマンドを使える。

-A, --append

チェインの最後にルールを追加する。

-D, --delete

チェインから指定したルールを削除する。二通りの使い方がある。一つ目の使い方は、ルール番号の区間を (-D 直後に) 指定する方法である。構文: start_nr[:end_nr] (-L --Ln を使ってルール番号を表示できる) end_nr が省略された場合は、start_nr 以降のルールすべてが削除される。負の数も使えるが、詳細は -I 引数を参照すること。二つ目の使い方は、追加時と全く同じ完全なルールを使って指定する方法である。合致するルールのうち、一番最初に見つかったもの、つまり最も小さな (正の) ルール番号のもののみが削除される。

-C, --change-counters

チェイン内にあるルールのカウンタを変更する。二通りの使い方がある。一つ目はルール番号の区間を使って (-C直後に) 指定する方法である。構文: start_nr[:end_nr] (-L --Ln を使ってルール番号を表示できる) 詳細は -D と同様である。二つ目の使い方は、追加時と全く同じ完全なルールを使って指定する方法である。合致するルールのうち、一番最初に見つかったもの、つまり最も小さな (正の) ルール番号のカウンタのみが変更される。カウンタ値は、一つ目の方法ではルール区間の直後に指定し、二つ目の方法では -C の直後に指定する。最初にパケットカウンタ値を指定し、次にバイトカウンタ値を指定する。カウンタ値が '+' で始まっている場合、カウンタ値は現在値にそれぞれ追加した値になる。カウンタ値が '-' で始まる場合は、現在値から差し引いた値になる。境界値の検査は行われない。'+' や '-' で始まらなかった場合は、指定した値そのものに変更される。

-I, --insert

指定したルール番号の位置にルールを追加する。ルール番号が未指定の場合、チェインの先頭に追加される。ルールが_N_個あった場合、_-N_から_N+1_の間の数を指定できる。正の数_i_があったとして、_i_と_i-N-1_はチェイン上での同じ挿入位置となる。ルール番号 0 はチェインの最後のルールを示し、-A コマンドを使ったときと同じになる。0より小さいルール番号は複数のルールを一つのチェインに挿入する際に便利である。

-P, --policy

チェインのポリシーを、指定したターゲットに設定する。ポリシーは ACCEPT, DROP, RETURN のいずれかである。

-F, --flush

指定したチェインを flush する。チェイン指定がない場合、全てのチェインが flush される。flush ではチェインのポリシーは変更されない。

-Z, --zero

指定したチェインのカウンタを 0 にする。チェイン指定がない場合、全てのチェインでのカウンタが 0 になる。-Zコマンドは-Lと組み合わせて使える。-Z-L を同時に使うと、0 にされる前のカウンタ値が出力される。

-L, --list

指定したチェインにあるルール一覧を出力する。チェイン指定がない場合、全てのチェインについて一覧が出力される。 -L コマンドの出力形式には次のオプションがある。

--Ln

全てのルールの行頭にルール番号を出力する。--Lxとは組み合わせられない。

--Lc

全てのルールの行末にルール番号を出力する。フレームカウンタ値 (pcnt) とバイトカウンタ値 (bcnt) の両方が表示される。フレームカウンタ値は、あるルールにマッチングした回数を示していて、バイトカウンタ値はこれらのフレームのサイズを合計した値となる。--Lxオプションと組み合わせると、カウンタ値は -c <pcnt> <bcnt> の形式で出力される。

--Lx

チェインの内容を再構築できるような ebtables コマンドの形式で出力する。チェイン指定がない場合、 (もしあれば) ユーザ定義のチェインも含めて、テーブル全体を構築できる ebtables コマンドが出力される。このコマンドを使って ebtables の起動・再起動スクリプトを作成できる。例えばこのコマンドの出力をシステム起動時に使える。--Lxオプションは --Ln オプションと互換性がない。--Lx--Lcと同時に使うと、カウンタが -c <pcnt> <bcnt> の形式で出力される。

--Lmac2

必要に応じて0パディングして、全 MAC アドレスを同じ長さで表示する。デフォルトの表示形式では、アドレス先頭の 0 は省略される。

-N, --new-chain

指定した名前の新しいユーザ定義チェインを作る。ユーザ定義チェインの個数の上限は、作り得る名前の数に限られる。ユーザ定義のチェイン名は 31 文字までである。ユーザ定義チェインのデフォルトのポリシーは ACCEPT である。-P コマンドを -N コマンドと同時に使うことで新規チェインのポリシーを標準のターゲットと異なるもので初期化できる。この場合 -P コマンドにチェイン名の指定は不要である。

-X, --delete-chain

ユーザ定義チェインを削除する。対象チェインを参照している (jumpしてくる) ものが残っていてはいけない。残っていると ebtables は削除を拒否する。チェイン指定がない場合、参照されていない全てのユーザ定義チェインが削除される。

-E, --rename-chain

指定したチェインを新しい名前に変更する。ユーザ定義チェインの名前を変更できるのはもちろんのこと、標準チェインの名前を好きなものに変更することもできる。例えば PREROUTING ではなく PREFORWARDING にしたい場合、-E コマンドで PREROUTINGチェインの名前を変更できる。標準チェインの名前を変更していたら、ebtables メーリングリストに投稿する際には、そのことについて言及すること。この ebtables 標準チェインの名称変更では、kernel ebtables table の構造は影響をうけない。

--init-table

現在のテーブルデータを初期テーブルデータで置き換える。

--atomic-init

テーブルの kernel の初期データを指定したファイルにコピーする。ルールがファイルに追加された後の最初の処理にできる。ファイル名は --atomic-file コマンドを使った指定か、あるいは EBTABLES_ATOMIC_FILE 環境変数で指定できる。

--atomic-save

kernel の現在のテーブルデータを指定したふぁあいるにコピーする。ルールがファイルに追加された後の最初の処理にできる。ファイル名は --atomic-file コマンドを使った指定か、あるいは EBTABLES_ATOMIC_FILE 環境変数で指定できる。

--atomic-commit

kernel テーブルデータを指定したファイルにあるデータで置き換える。あるテーブルの全ルールを kernel に一度にロードし、kernel 時間を大幅に節約しつつもアトミックなテーブルの更新を行うので、便利なコマンドである。テーブルデータが入っているファイルは --atomic-init--atomic-save コマンドで出力した起動ファイルで構成する。その後 --atomic-file コマンドでルールを構成したり EBTABLES_ATOMIC_FILE 環境変数を使うことで、ファイルを拡張したりして完全なテーブルを組み上げた後に kernel に登録できる。このコマンドは boot スクリプトで ebtables を高速に組み上げるのに大変便利である。

その他コマンド

-V,--version

ebtables ユーザスペースプログラムのバージョンを表示する。

-h, --help [list of module names]

コマンドの構文についての簡単な解説を出力する。extension の名前を指定することもできて、そうすると ebtables はこれらの extension のヘルプを表示する。例えば ebtables -h snat log ip arp である。list_extensions と指定すると、ユーザスペースユーティリティでサポートされている全 extension を出力する。

-j, --jump target

ルールのターゲットである。これは次のいずれかの値をとる: ACCEPT, DROP, CONTINUE, RETURN, target extension (TARGET EXTENSIONを参照すること) あるいはユーザ定義チェイン名。

--atomic-file file

指定したファイルに対してコマンドを実行する。操作対象のテーブルのデータはファイルから読み取って構築し、操作した結果は再びファイルに書き戻される。指定する際はコマンド指定の前に置くべきである。他のやり方としては、EBTABLES_ATOMIC_FILE 環境変数を使う方法がある。

-M, --modprobe program

kernel とやり取りする際に、kernel module に program が自動的にロードされるようにする。

--concurrent

ebtables kernel テーブルを更新するスクリプトが同時に複数実行されても大丈夫なように、ファイルロックを使いる。

ルール指定

ルール指定は次のコマンドライン引数で (追加削除のコマンドで使うことで) 構築される。"!" オプションを指定の前につけると、その否定の意味になる。下記の標準ルール指定の他にもいくつか興味深い引数がある。match extensionWATCHER EXTENSION を参照すること。

-p, --protocol [!] protocol

フレームを構成しているプロトコル。0x0600 より大きい hex の数値か、名前 (例えば ARP) あるいは LENGTH を指定できる。 (802.2/802.3ネットワークにおいては) Ethernet フレームのプロトコルフィールドは、ヘッダの長さを表すこともできる。値が 0x0600 より小さいか等しいときは、その値はヘッダサイズと等しく、プロトコル番号として扱ってはいけない。そのかわり、プロトコルフィールドが長さフィールドとして使われている全てのフレームは同じ 'protocol' であると扱いる。ebtables での、これらのフレームのプロトコル名は LENGTH である。/etc/ethertype ファイルを見ると、プロトコルを指定する hex 数値の代わりに可読な文字列表現が記載されている。例えば 0x0800IPV4 で表現できる。このファイルは大文字小文字を区別しない。詳細はファイルを参照すること。--proto フラグはこのオプションのエイリアスである。

-i, --in-interface [!] name

フレームを受信したインターフェース (ブリッジポート) を指定する (このオプションは INPUT, FORWARD, PREROUTINGBROUTINGチェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。--in-if はこのオプションのエイリアスである。

--local-in [!] name

フレームを受信した (論理的な) ブリッジインターフェースを指定する (このオプションは INPUT, FORWARD, PREROUTINGBROUTINGチェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。

-o, --out-interface [!] name

フレームが送出されるインターフェース (ブリッジポート) を指定する (このオプションは OUTPUT, FORWARD, POSTROUTINGチェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。--out-if はこのオプションのエイリアスである。

--logical-out [!] name

フレームが送出される (論理的な) ブリッジインターフェースを指定する (このオプションは OUTPUT, FORWARD, POSTROUTINGチェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。

-s, --source [!] address[/mask]

送信元 MAC アドレス。マスクとアドレスの両方とも hex 数値 6 つをコロン区切りで記述する。あるいは Unicast, Multicast, Broadcast あるいは BGA (Bridge Group Address) を指定できる: Unicast=00:00:00:00:00:00/01:00:00:00:00:00, Multicast=01:00:00:00:00:00/01:00:00:00:00:00, Broadcast=ff:ff:ff:ff:ff:ff/ff:ff:ff:ff:ff:ff あるいは BGA=01:80:c2:00:00:00/ff:ff:ff:ff:ff:ff である。ブロードキャストアドレスはマルチキャストアドレスにもマッチングすることに注意すること。--src はこのオプションのエイリアスである。

-d, --destination [!] address[/mask]

送信先 MAC アドレス。MAC アドレスの詳細については -s オプションを参照すること。--dst フラグはこのオプションのエイリアスである。

-c, --set-counter pcnt bcnt

-A-I と組み合わせた場合、新しいルールの pcnt, bcnt それぞれが指定した値になる。-C-D コマンドと組み合わせた場合、pcntbcnt がパケットカウント値とバイトカウント値と等しいルールのみがマッチングする。

MATCH EXTENSION

ebtables extension はユーザスペースツールに動的に組み込まれる。iptables コマンドで -m オプションを使っていた時のように、明示的にロードする必要はない。これらの extension は ebtables core コードに補足的なものとして kernel module でサポートされている機能を扱っている。

802_3

802.3 DSAP/SSAP フィールドあるいは SNAP タイプを指定する。プロトコルは LENGTH として指定されていなければならない (上記 -p オプションを参照) 。

--802_3-sap [!] sap

DSAP と SSAP は 802.3 中の 2 つの 1 バイトフィールドである。これらのバイトは常に同じなので、1 バイト (hex数値で) の指定のみ必要である。

--802_3-type [!] type

802.3 DSAP と SSAP の値が 0xaa の場合、SNAP タイプフィールドがペイロードプロトコルを決定する。これは 2 つの 1 バイト引数です (hex数値で) 。802.3 DSAP/SSAP 0xaa フレームのみが検査される。

among

MAC アドレスあるいは MAC/IP アドレスの組に対して、 MAC アドレスあるいは MAC/IP アドレスの組の一覧をマッチングさせる。一覧は次のような書式で指定する: xx:xx:xx:xx:xx:xx[=ip.ip.ip.ip][,] 。一覧中のエントリはコンマで区切る。IP アドレスを MAC アドレスと組み合わせるのはオプションである。同一 MAC アドレスで IP アドレスが異なるという複数の MAC/IP アドレスペアを登録しても構わない。MAC アドレスが一覧にあるどれともマッチングしなかった場合、フレームはルールにマッチングしなかったことになる ("!"が使われていない場合) 。

--among-dst [!] list

MAC 送信先と一覧を比較する。もし Ethernet フレームが IPv4 あるいは ARP であれば、一覧中にある送信先 MAC/IP アドレスペアとの比較も可能である。

--among-src [!] list

MAC 送信元と一覧を比較する。もし Ethernet フレームが IPv4 あるいは ARP であれば、一覧中にある MAC/IP 送信元アドレスペアとの比較も可能である。

--among-dst-file [!] file

--among-dst と同様ですが、指定したファイルから一覧を読み込む。

--among-src-file [!] file

--among-src と同様ですが、指定したファイルから一覧を読み込む。

arp

(R)ARP フィールドを指定する。プロトコルは ARP あるいは RARP でなければならない。

--arp-opcode [!] opcode

(R)ARP opcode (10進数か文字列。詳細は ebtables -h arp 参照すること)

--arp-htype [!] hardware type

ハードウェアタイプで、10進数か文字列 Ethernet (type 1 になる) 。ほとんどの (R)ARP パケットではハードウェアタイプが Ethernet になる。

--arp-ptype [!] protocol type

(R)ARP で使われているプロトコルタイプ (hexあるいは 0x0800 を意味する文字列 IPv4) 。ほとんどの (R)ARP パケットではプロトコルタイプは IPv4 になる。

--arp-ip-src [!] address[/mask]

(R)ARP 送信元 IP アドレス指定。

--arp-ip-dst [!] address[/mask]

(R)ARP 送信先 IP アドレス指定。

--arp-mac-src [!] address[/mask]

(R)ARP 送信元 MAC アドレス指定。

--arp-mac-dst [!] address[/mask]

(R)ARP 送信先 MAC アドレス指定。

[!] --arp-gratuitous

ARP gratuitous パケットを検査する: ARP ヘッダ中の送信元 IPv4 アドレスと送信先 IPv4 アドレスが等しいものを検査する。

ip

IPv4 フィールドを指定する。プロトコルは IPv4 でなければならない。

--ip-source [!] address[/mask]

送信元 IP アドレス。--ip-src はこのオプションのエイリアスである。

--ip-destination [!] address[/mask]

送信先 IP アドレス。--ip-dst はこのオプションのエイリアスである。

--ip-tos [!] tos

IP サービスタイプを、hex 表記の数値で。IPv4 のものである。

--ip-protocol [!] protocol

IP プロトコル。--ip-proto はこのオプションのエイリアスである。

--ip-source-port [!] port1[:port2]

IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip-protocol オプションで TCP, UDP, DCCP, SCTP のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip-sport はこのオプションのエイリアスである。

--ip-destination-port [!] port1[:port2]

IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信先ポートあるいはポートの範囲。--ip-protocol オプションで TCP, UDP, DCCP, SCTP のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip-dport はこのオプションのエイリアスである。

ipv6

IPv6 のフィールドを指定する。プロトコルは IPv6 でなければならない。

--ip6-source [!] address[/mask]

送信元 IPv6 アドレス。--ipv6-src フラグはこのオプションのエイリアスである。

--ip6-destination [!] address[/mask]

送信先 IPv6 アドレス。--ipv6-dst フラグはこのオプションのエイリアスである。

--ip6-tclass [!] tclass

IPv6 トラフィッククラスを hex 表記の数値で。

--ip6-protocol [!] protocol

IP プロトコル。--ip6-proto はこのオプションのエイリアスである。

--ip6-source-port [!] port1[:port2]

IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip6-protocol オプションで TCP, UDP, DCCP, SCTP のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip6-sport はこのオプションのエイリアスである。

--ip6-destination-port [!] port1[:port2]

IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip6-protocol オプションで TCP, UDP, DCCP, SCTP のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip6-sport はこのオプションのエイリアスである。

--ip6-icmp-type [!] {type[:type]/code[:code]|typename}

マッチングさせる ipv6-icmp タイプとコード。タイプとコードのどちらも範囲指定できる。タイプとコードはスラッシュで区切る。タイプとコードは 0 から 255 の間の数値である。あるタイプのすべてのコードにマッチングさせるには、数値の代わりにシンボル名を使って指定する。既知のタイプ名については次のコマンドで一覧が表示される。

ebtables --help ip6

このオプションは --ip6-protocol ipv6-icmp についてのみ有効である。

limit

このモジュールは token bucket フィルタを使って、マッチングにレートリミットを付ける。この extension を使っているルールは、リミットに到達するまではマッチングする。例えば --log watcher と組み合わせて使うと、レートリミットのついたロギングを行うことができる。iptables における limit マッチングと同様に使える。

--limit [value]

マッチングレート最大平均値: 数値指定で、/second, /minute, /hour, day サフィックスを付けることができる; デフォルト値は 3/hour

--limit-burst [number]

マッチングする初期パケット最大値: 上記のリミットに到達しなかった回ごとに、指定した数値までリチャージされる; デフォルト値は 5 である。

mark_m

--mark [!] [value][/mask]

符号なし数値の mark でフレームにマッチングする。valuemask が指定されている場合、フレームの mark 値とユーザ指定の mask 値の論理和 (AND) が計算されてから、ユーザ指定の mark value 値と比較される。value のみが指定された場合、ユーザ指定の mark value と同一の値の mark を持ったパケットのみがマッチングする。mask のみが指定された場合、フレームの mark 値とユーザ指定の mask 値の論理和 (AND) が計算され、結果が非 0 であるフレームがマッチングする。mask のみ指定する方法は、複数の mark 値とマッチングさせるのに便利である。

pkttype

--pkttype-type [!] type

フレームの Ethernet "class" にマッチングし、これは一般的なネットワークコードによって決まる。取りうる値は: broadcast (送信先 MAC アドレスがブロードキャストアドレス) , multicast (送信先 MAC アドレスがマルチキャスト) , host (送信先 MAC アドレスがネットワークデバイス) , otehrhost (上記のいずれでもない) のいずれかである。

stp

stp BPDU (bridge protocol data unit) フィールドを指定する。送信先アドレス (-d) は bridge group address (BGA) が指定されていなければならない。数値の範囲指定ができるオプションでは、下限を省略した際は取りうる最小値が使われ、上限を省略した際 (コロンがついている場合) は、取りうる最大値が使われる。

--stp-type [!] type

BPDU type (0-255) である。数値以外で認識できるタイプは config の configuration BPDU (=0) と tcn の topology change notification BPDU (=128) である。

--stp-flags [!] flag

BPDU flag (0-255) である。数値以外で認識できるフラグは topology-change の topology change flag (=1) と topology-change-ack の topology change acknowledgement flag (=128) である。

--stp-root-prio [!] [prio][:prio]

root 優先度 (0-65535) の範囲。

--stp-root-addr [!] [address][/mask]

root MAC アドレス。詳細は -s オプション参照すること。

--stp-root-cost [!] [cost][:cost]

root path コスト (0-4294967295) の範囲。

--stp-sender-prio [!] [prio][:prio]

BPDU 送信者優先度 (0-65535) の範囲。

--stp-sender-addr [!] [address][/mask]

BPDU 送信者の MAC アドレス。詳細は -s オプション参照すること。

--stp-port [!] [port][:port]

port 識別子の範囲 (0-65535)。

--stp-msg-age [!] [age][:age]

メッセージ age timer の範囲 (0-65535)。

--stp-max-age [!] [age][:age]

max age time の範囲 (0-65535)。

--stp-hello-time [!] [age][:age]

hello time timer の範囲 (0-65535)。

--stp-forward-delay [!] [delay][:delay]

forward delay timer の範囲 (0-65535)。

vlan

802.1Q タグ制御情報フィールドを指定する。プロトコルは 802_1Q でなければならない。

--vlan-id [!] id

VLAN 識別子フィールド (VID)。0 から 4095 の間の10進数の数字。

--vlan-piro [!] prio

優先度フィールドで、0 から 7 までの10進数の数字。VID は 0 ("null VID")か、無指定であるべきです (後者の無指定の場合 VID は 0 であるとされる) 。

--vlan-encap [!] type

格納されている Ethernet フレームの type/length の値。0x0000 から 0xFFFF の範囲の hex 数値か /etc/ethertypes にあるシンボル名で指定する。

WATCHER EXTENSION

watchers は通過するフレームを観測するだけで、変更したりacceptするかどうかを決めたりなどは行わない。これらの watcher はフレームがルールにマッチングするかどうかを見るだけで、それはターゲットが実行される前に行われる。

log

log watcher はフレームの説明を syslog に書き出す。

--log

デフォルトの logging オプションでロギングを行う: log-leve=info, log-prefix="", ip ログなし, arp ログなし。

--log-level level

logging レベルを定義する。取りうる値は ebtables -h log を参照すること。デフォルトのレベルは info である。

--log-prefix text

ログ情報の行頭にプリントする text プレフィックスを定義する。

--log-ip

ルールで ip プロトコルにマッチングした際に生成されるフレームの ip 情報をログする。デフォルトでは ip 情報はログされない。

--log-ip6

ルールで ipv6 プロトコルにマッチングした際に生成されるフレームの ipv6 情報をログする。デフォルトでは ipv6 情報はログされない。

--log-arp

ルールで (r)arp プロトコルマッチングした際に生成されるフレームの (r)arp 情報をログする。デフォルトでは (r)arp 情報はログされない。

nflog

nflog watcher はパケットをログするためにロードされた logging バックエンドにパケットを渡する。これは通常 nfnetlink_log を logging バックエンドとして組み合わせて使われ、これが netlink ソケット経由でパケットを指定した multicast グループに mutlcast する。1つあるいは複数のユーザスペースプロセスがそのグループに参加してパケットを受け取ることができる。

--nflog

デフォルトの logging オプションでログする。

--nflog-group nlgroup

パケットが送出先である netlink グループ (1 から 2^32-1 の間) (nfnetlink_log でのみ有効) 。デフォルト値は 1。

--nflog-prefix prefix

ログメッセージに含まれるプレフィックス文字列で、30文字まで。ログの中でメッセージを区別するのに便利。

--nflog-range size

ユーザスペースにコピーされるバイト数 (nfnetlink_logでのみ有効) 。nfnetlink_log インスタンスでも範囲指定可能で、このオプションはそれを上書きする。

--nflog-threshold size

ユーザスペースに送る前に kernel 内の queue するパケットの数 (nfnetlink_log でのみ有効) 。大きな数値にすると 1 パケットあたりのオーバーヘッドは小さくなるが、ユーザスペースにパケットが届くまでの遅延は大きくなる。デフォルト値は 1。

ulog

ulog watcher は netlink multicast ソケットを使ってユーザランド logging デーモンにパケットを渡する。パケットの説明ではなくパケット全体が送出されるという点と syslog ではなく netlink multicast ソケットが使われるという点で log watcher とは異なる。この watcher ではユーザスペースのプログラムでパケットを解析することができ、物理ブリッジの入り口と出口のポートの情報も netlink メッセージに含まれている。ulog watcher モジュールは、kernel にロードされる際にパラメータを 2 つ受け取ることができる (例えば modprobe を使う) : nlbufsiz で各 netlink multicast group が持つバッファの大きさを指摘できる。例えば nlbufsiz=8192 では、ユーザスペースに送り出す前に 8kB の数のパケットまで kernel 内に留めることができる。128kB 以上に設定することはできない。ここでのバッファサイズは nlgroup それぞれについて確保されるということにも注意。つまり消費 kernel メモリはその倍数で増えていく。デフォルト値は 4096 である。queue が埋まらなかったとしても、どれだけの間待ってから flush するかを、flushtimeout で 100 分の 1 秒刻みで指定する。デフォルト値は 10 です (0.1秒) 。

--ulog

デフォルトの設定を使う: ulog-prefix="", ulog-nlgroup=1, ulog-cprange=4096, ulog-qthreshold=1

--ulog-prefix text

ユーザスペースに送られるパケットに含まれるプレフィックスを定義する。

--ulog-nlgroup group

どの netlink group number を使うかを定義する (1から32の間の数字) 。iptables ULOG ターゲットで使われている netlink group number とは ebtables ulog watcher のものとは異なるものにすること。デフォルトの group number は 1 である。

--ulog-cprange range

ルールにマッチングしたパケットについて、ユーザスペースにコピーされる範囲の最大値を定義する。デフォルトの範囲は 0 で、これは nlbufsiz で与えられた範囲の最大値を意味する。1281024 より大きな値を指定しても意味はない。なぜならユーザスペースに送られるパケットサイズには 1281024 の上限値があるからである。

--ulog-qthreashold threshold

netlink ソケット経由でユーザスペースに送りだす前に threshold の数まで packet を queue する。queue が埋まる以前であってもパケットは送出されることがあることに注意すること。これは ulog kernel タイマが達した際に起こる (このタイマの周期は flushtimeout に依存する) 。

TARGET EXTENSION

arpreply

arpreplyターゲットは nat テーブルの PREROUTINGチェインで使うことができる。ターゲットが ARP リクエストを発見すると、自動的に ARP reply を返する。reply に使う MAC アドレスは設定できる。プロトコルは ARP でなければならない。ARP メッセージが ARP リクエストではなかったり、ARP リクエストが Ethernet ネットワーク上の IP アドレスに対するものではなかった場合、このターゲットでは無視される (CONTINUE) 。ARP リクエストが不正だった場合、破棄される (DROP) 。

--arpreply-mac address

reply に返す MAC アドレスを指定する。Ethernet 送信元 MAC アドレスと ARP payload 中の送信元 MAC アドレスの両方がこのアドレスになる。

--arpreply-target target

標準のターゲットを指定する。ARP reply を送信した後に、ebtables がその ARP request に対してさらに何を行うかを指定する。デフォルトのターゲットは DROP である。

dnat

dnatbroute テーブルの BROUTINGチェインと、nat テーブルのPREROUTINGOUTPUTチェインでのみ使える。送信先 MAC アドレスを変更するときに指定する。

--to-destination address

送信先 MAC アドレスを指定した address に変更する。--to-dstフラグはこのオプションのエイリアスである。

--dnat-target target

標準のターゲットを指定する。dnat を行った後に、ebtables がその dnat されたフレームに対してさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT である。CONTINUE にすると、同一フレームに対して複数のtarget extensionを使える。DROPBROUTINGチェインで redirectターゲットと使うときにのみ意味がある。RETURN を基本チェインで使うことはできない (理由は明らかでしょう) 。

mark

markターゲットはどの table のどのチェインでも使える。bridge-nf が kernel に組み込まれていれば ebtables と iptables の両方で mark できる。どちらも同じ場所に mark を記録する。ebtablesとiptables間の通信となる。

--mark-set value

フレームに非負数の value を mark する。

--mark-or value

フレームに非負数の value で OR した値を記録する。

--mark-and value

フレームに非負数の value で AND した値を記録する。

--mark-xor value

フレームに非負数の value で XOR した値を記録する。

--mark-target target

標準のターゲットを指定する。mark を行った後に、ebtables がその dnat されたフレームに対してさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT である。CONTINUE にすると、後続のチェインのルールでフレームに対して何らかの他の処理ができる。

redirect

redirectターゲットは MAC ターゲットアドレスをフレームが到達したブリッジデバイスのものに変更する。このターゲットは broute テーブルの BROUTINGチェインと nat テーブルの PREROUTINGチェインでのみ使える。BROUTINGチェインではブリッジポートの MAC アドレスが送信先アドレスとして使われ、PREROUTINGチェインではブリッジの MAC アドレスが使われる。

--redirect-target target

標準のターゲットを指定する。MAC リダイレクトを行った後に、ebtables がさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT である。CONTINUE にすると、同一フレームに対して複数のtarget extensionを使える。BROUTINGチェイン中で DROP を使うと、そのフレームは route される。RETURN も使うことができる。 RETURN を基本チェインで使うことはできない。

snat

snatターゲットは nat テーブルの POSTROUTING でのみ使うことができる。送信元 MAC アドレスを変更する際に使いる。

--to-source address

送信元 MAC アドレスを指定した address に変更する。--to-srcフラグはこのオプションのエイリアスである。

--snat-target target

標準のターゲットを指定する。snat を行った後に、ebtables がさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT である。CONTINUE にすると、同一フレームに対して複数のtarget extensionを使える。DROP は 意味をなさないが、実行することはできる。RETURN も使える。RETURNを基本チェインで使うことはできない。

--snat-arp

パケットが arp メッセージであり、かつ、arp ヘッダ中のハードウェアアドレスの長さが 6 バイトの長さであった場合に、arp ヘッダ中のハードウェア送信元アドレスも変更する。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment