ebtables (v2.0.10-1) - Ethernet bridge frame table administration
ebtables
は (Linux kernel 内にある) Ethernet フレームの検査ルールを設定管理するプログラムである。iptables
に類似しているが、 Ethernet プロトコルは IP プロトコルよりもずっと単純なので、それほど込み入ってはいない。
3つの ebtables テーブルがあり、それらの持つチェインは Linux kernel に組み込まれている。これらのテーブルを使って、機能ごとに別々のルールセットとして整理している。それぞれのルールセットのことをチェインと呼んでいる。チェインとは Ethernet フレームにマッチングする順序づけられたルールの一覧である。ルールがある Ethernet フレームにマッチングすると、その対象フレームにどういった処理を施すかが決まる。処理の指定は「ターゲット」と呼ばれている。現在のルールにマッチングしなかった場合は、次のルールが検査される。「ターゲット」として、 (ユーザ独自の) 新しいチェインを作ることもできる。ユーザ定義チェインを使うと、ルールを線形検索するのと比べてパフォーマンスを改善したり、管理しやすい構造化されたフィルタリングルールを構成したりできる。
Ethernet フレームに対するファイアウォールルール指定や処理は、ターゲットと呼ばれる。フレームがルールにマッチングしたときに kernel が次に行う処理は、ターゲットで指定される。ターゲットは次のいずれかの値のうちの一つです: ACCEPT
, DROP
, CONTINUE
, RETURN
, 'extension' の一つ (後述) , あるいはユーザ定義チェインへのジャンプ。
ACCEPT
はフレームを通過させる意味になり、DROP
はフレームを破棄することを意味する。BROUTING
チェイン内では、ACCEPT
と DROP
は異なる意味を持っている (-t
オプションで表示される情報を参照すること) 。CONTINUE
は次のルールをチェックすることを意味する。このターゲットは例えば、ある地点を通過したフレームの数を数えたり、ログを取ったり、フレームに複数のターゲットを適用するのに便利である。RETURN
はチェインの探索を打ち切り、前の (呼び出し元の) チェインの次のルールから再開することを意味する。target extension については、この man ページの target extension
セクションを参照すること。
前述のとおり Linux kernel には 3 つの ebtables テーブルがある。filter
, nat
と broute
という名前がついている。これら 3 つのテーブルのうち、filter テーブルがコマンドのデフォルトのテーブルである。つまり filter テーブルについては ebtables の '-t filter' 引数を省略できる。その他 2 つのテーブルについては -t 引数が必要である。また -t 引数を使う際は、 ebtables コマンドの最初の引数でなければならない。
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つだけある。DROP
とACCEPT
ターゲットは broute テーブル内では特殊な意味を持っている (実装を単純化するために、説明的な名称をあえて使っていない) 。DROP
はフレームが route されることを意味し、ACCEPT
はフレームがブリッジされることを意味する。BROUTING
チェインは、とても早い段階で検査される。ただしブリッジポートに入ってきて転送状態になっているフレームについてのみ検査される。フレームは通常ブリッジされるが、ここでその処理を変更できる。redirect
ターゲットが便利だ。
最初の '-t table' コマンド引数の後に続く引数は、いくつかのグループ、「コマンド」「その他コマンド」「ルール指定 (rule specification) 」「match extension」「watch extension」と「target extension」に分類される。
ebtables コマンドは -t 引数で定義されたテーブルに対して行う処理を指定する。-t 引数を使わなかった場合、デフォルトの filter テーブルに適用される。一度には 1 つのコマンドしか使えない。-L
と -Z
の組み合わせ、-N
と -P
の組み合わせ、あるいは --atomic-file
を使ったときは例外として複数のコマンドを使える。
チェインの最後にルールを追加する。
チェインから指定したルールを削除する。二通りの使い方がある。一つ目の使い方は、ルール番号の区間を (-D
直後に) 指定する方法である。構文: start_nr[:end_nr] (-L --Ln
を使ってルール番号を表示できる) end_nr が省略された場合は、start_nr 以降のルールすべてが削除される。負の数も使えるが、詳細は -I
引数を参照すること。二つ目の使い方は、追加時と全く同じ完全なルールを使って指定する方法である。合致するルールのうち、一番最初に見つかったもの、つまり最も小さな (正の) ルール番号のもののみが削除される。
チェイン内にあるルールのカウンタを変更する。二通りの使い方がある。一つ目はルール番号の区間を使って (-C
直後に) 指定する方法である。構文: start_nr[:end_nr] (-L --Ln
を使ってルール番号を表示できる) 詳細は -D
と同様である。二つ目の使い方は、追加時と全く同じ完全なルールを使って指定する方法である。合致するルールのうち、一番最初に見つかったもの、つまり最も小さな (正の) ルール番号のカウンタのみが変更される。カウンタ値は、一つ目の方法ではルール区間の直後に指定し、二つ目の方法では -C
の直後に指定する。最初にパケットカウンタ値を指定し、次にバイトカウンタ値を指定する。カウンタ値が '+' で始まっている場合、カウンタ値は現在値にそれぞれ追加した値になる。カウンタ値が '-' で始まる場合は、現在値から差し引いた値になる。境界値の検査は行われない。'+' や '-' で始まらなかった場合は、指定した値そのものに変更される。
指定したルール番号の位置にルールを追加する。ルール番号が未指定の場合、チェインの先頭に追加される。ルールが_N_個あった場合、_-N_から_N+1_の間の数を指定できる。正の数_i_があったとして、_i_と_i-N-1_はチェイン上での同じ挿入位置となる。ルール番号 0 はチェインの最後のルールを示し、-A コマンドを使ったときと同じになる。0より小さいルール番号は複数のルールを一つのチェインに挿入する際に便利である。
チェインのポリシーを、指定したターゲットに設定する。ポリシーは ACCEPT
, DROP
, RETURN
のいずれかである。
指定したチェインを flush する。チェイン指定がない場合、全てのチェインが flush される。flush ではチェインのポリシーは変更されない。
指定したチェインのカウンタを 0 にする。チェイン指定がない場合、全てのチェインでのカウンタが 0 になる。-Z
コマンドは-L
と組み合わせて使える。-Z
と-L
を同時に使うと、0 にされる前のカウンタ値が出力される。
指定したチェインにあるルール一覧を出力する。チェイン指定がない場合、全てのチェインについて一覧が出力される。
-L
コマンドの出力形式には次のオプションがある。
全てのルールの行頭にルール番号を出力する。--Lx
とは組み合わせられない。
全てのルールの行末にルール番号を出力する。フレームカウンタ値 (pcnt) とバイトカウンタ値 (bcnt) の両方が表示される。フレームカウンタ値は、あるルールにマッチングした回数を示していて、バイトカウンタ値はこれらのフレームのサイズを合計した値となる。--Lx
オプションと組み合わせると、カウンタ値は -c <pcnt> <bcnt>
の形式で出力される。
チェインの内容を再構築できるような ebtables コマンドの形式で出力する。チェイン指定がない場合、 (もしあれば) ユーザ定義のチェインも含めて、テーブル全体を構築できる ebtables コマンドが出力される。このコマンドを使って ebtables の起動・再起動スクリプトを作成できる。例えばこのコマンドの出力をシステム起動時に使える。--Lx
オプションは --Ln
オプションと互換性がない。--Lx
を--Lc
と同時に使うと、カウンタが -c <pcnt> <bcnt>
の形式で出力される。
必要に応じて0パディングして、全 MAC アドレスを同じ長さで表示する。デフォルトの表示形式では、アドレス先頭の 0 は省略される。
指定した名前の新しいユーザ定義チェインを作る。ユーザ定義チェインの個数の上限は、作り得る名前の数に限られる。ユーザ定義のチェイン名は 31 文字までである。ユーザ定義チェインのデフォルトのポリシーは ACCEPT
である。-P
コマンドを -N
コマンドと同時に使うことで新規チェインのポリシーを標準のターゲットと異なるもので初期化できる。この場合 -P
コマンドにチェイン名の指定は不要である。
ユーザ定義チェインを削除する。対象チェインを参照している (jumpしてくる) ものが残っていてはいけない。残っていると ebtables は削除を拒否する。チェイン指定がない場合、参照されていない全てのユーザ定義チェインが削除される。
指定したチェインを新しい名前に変更する。ユーザ定義チェインの名前を変更できるのはもちろんのこと、標準チェインの名前を好きなものに変更することもできる。例えば PREROUTING
ではなく PREFORWARDING
にしたい場合、-E
コマンドで PREROUTING
チェインの名前を変更できる。標準チェインの名前を変更していたら、ebtables メーリングリストに投稿する際には、そのことについて言及すること。この ebtables 標準チェインの名称変更では、kernel ebtables table の構造は影響をうけない。
現在のテーブルデータを初期テーブルデータで置き換える。
テーブルの kernel の初期データを指定したファイルにコピーする。ルールがファイルに追加された後の最初の処理にできる。ファイル名は --atomic-file
コマンドを使った指定か、あるいは EBTABLES_ATOMIC_FILE 環境変数で指定できる。
kernel の現在のテーブルデータを指定したふぁあいるにコピーする。ルールがファイルに追加された後の最初の処理にできる。ファイル名は --atomic-file
コマンドを使った指定か、あるいは EBTABLES_ATOMIC_FILE 環境変数で指定できる。
kernel テーブルデータを指定したファイルにあるデータで置き換える。あるテーブルの全ルールを kernel に一度にロードし、kernel 時間を大幅に節約しつつもアトミックなテーブルの更新を行うので、便利なコマンドである。テーブルデータが入っているファイルは --atomic-init
や --atomic-save
コマンドで出力した起動ファイルで構成する。その後 --atomic-file
コマンドでルールを構成したり EBTABLES_ATOMIC_FILE 環境変数を使うことで、ファイルを拡張したりして完全なテーブルを組み上げた後に kernel に登録できる。このコマンドは boot スクリプトで ebtables を高速に組み上げるのに大変便利である。
ebtables ユーザスペースプログラムのバージョンを表示する。
コマンドの構文についての簡単な解説を出力する。extension の名前を指定することもできて、そうすると ebtables はこれらの extension のヘルプを表示する。例えば ebtables -h snat log ip arp
である。list_extensions と指定すると、ユーザスペースユーティリティでサポートされている全 extension を出力する。
ルールのターゲットである。これは次のいずれかの値をとる: ACCEPT
, DROP
, CONTINUE
, RETURN
, target extension (TARGET EXTENSION
を参照すること) あるいはユーザ定義チェイン名。
指定したファイルに対してコマンドを実行する。操作対象のテーブルのデータはファイルから読み取って構築し、操作した結果は再びファイルに書き戻される。指定する際はコマンド指定の前に置くべきである。他のやり方としては、EBTABLES_ATOMIC_FILE 環境変数を使う方法がある。
kernel とやり取りする際に、kernel module に program が自動的にロードされるようにする。
ebtables kernel テーブルを更新するスクリプトが同時に複数実行されても大丈夫なように、ファイルロックを使いる。
ルール指定は次のコマンドライン引数で (追加削除のコマンドで使うことで) 構築される。"!" オプションを指定の前につけると、その否定の意味になる。下記の標準ルール指定の他にもいくつか興味深い引数がある。match extension
とWATCHER EXTENSION
を参照すること。
フレームを構成しているプロトコル。0x0600 より大きい hex の数値か、名前 (例えば ARP) あるいは LENGTH
を指定できる。 (802.2/802.3ネットワークにおいては) Ethernet フレームのプロトコルフィールドは、ヘッダの長さを表すこともできる。値が 0x0600 より小さいか等しいときは、その値はヘッダサイズと等しく、プロトコル番号として扱ってはいけない。そのかわり、プロトコルフィールドが長さフィールドとして使われている全てのフレームは同じ 'protocol' であると扱いる。ebtables での、これらのフレームのプロトコル名は LENGTH
である。/etc/ethertype
ファイルを見ると、プロトコルを指定する hex 数値の代わりに可読な文字列表現が記載されている。例えば 0x0800 は IPV4 で表現できる。このファイルは大文字小文字を区別しない。詳細はファイルを参照すること。--proto
フラグはこのオプションのエイリアスである。
フレームを受信したインターフェース (ブリッジポート) を指定する (このオプションは INPUT
, FORWARD
, PREROUTING
や BROUTING
チェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。--in-if
はこのオプションのエイリアスである。
フレームを受信した (論理的な) ブリッジインターフェースを指定する (このオプションは INPUT
, FORWARD
, PREROUTING
や BROUTING
チェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。
フレームが送出されるインターフェース (ブリッジポート) を指定する (このオプションは OUTPUT
, FORWARD
, POSTROUTING
チェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。--out-if
はこのオプションのエイリアスである。
フレームが送出される (論理的な) ブリッジインターフェースを指定する (このオプションは OUTPUT
, FORWARD
, POSTROUTING
チェインで有効です) 。インターフェース名が '+' で終わっている場合、その名前で始まる ('+'自体は除く) インターフェース名全てがマッチングする。
送信元 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
はこのオプションのエイリアスである。
送信先 MAC アドレス。MAC アドレスの詳細については -s
オプションを参照すること。--dst
フラグはこのオプションのエイリアスである。
-A
や -I
と組み合わせた場合、新しいルールの pcnt, bcnt それぞれが指定した値になる。-C
や -D
コマンドと組み合わせた場合、pcnt と bcnt がパケットカウント値とバイトカウント値と等しいルールのみがマッチングする。
ebtables extension はユーザスペースツールに動的に組み込まれる。iptables
コマンドで -m
オプションを使っていた時のように、明示的にロードする必要はない。これらの extension は ebtables core コードに補足的なものとして kernel module でサポートされている機能を扱っている。
802.3 DSAP/SSAP フィールドあるいは SNAP タイプを指定する。プロトコルは LENGTH
として指定されていなければならない (上記 -p
オプションを参照) 。
DSAP と SSAP は 802.3 中の 2 つの 1 バイトフィールドである。これらのバイトは常に同じなので、1 バイト (hex数値で) の指定のみ必要である。
802.3 DSAP と SSAP の値が 0xaa
の場合、SNAP タイプフィールドがペイロードプロトコルを決定する。これは 2 つの 1 バイト引数です (hex数値で) 。802.3 DSAP/SSAP 0xaa フレームのみが検査される。
MAC アドレスあるいは MAC/IP アドレスの組に対して、 MAC アドレスあるいは MAC/IP アドレスの組の一覧をマッチングさせる。一覧は次のような書式で指定する: xx:xx:xx:xx:xx:xx[=ip.ip.ip.ip][,] 。一覧中のエントリはコンマで区切る。IP アドレスを MAC アドレスと組み合わせるのはオプションである。同一 MAC アドレスで IP アドレスが異なるという複数の MAC/IP アドレスペアを登録しても構わない。MAC アドレスが一覧にあるどれともマッチングしなかった場合、フレームはルールにマッチングしなかったことになる ("!"が使われていない場合) 。
MAC 送信先と一覧を比較する。もし Ethernet フレームが IPv4 あるいは ARP であれば、一覧中にある送信先 MAC/IP アドレスペアとの比較も可能である。
MAC 送信元と一覧を比較する。もし Ethernet フレームが IPv4 あるいは ARP であれば、一覧中にある MAC/IP 送信元アドレスペアとの比較も可能である。
--among-dst
と同様ですが、指定したファイルから一覧を読み込む。
--among-src
と同様ですが、指定したファイルから一覧を読み込む。
(R)ARP フィールドを指定する。プロトコルは ARP あるいは RARP でなければならない。
(R)ARP opcode (10進数か文字列。詳細は ebtables -h arp
参照すること)
ハードウェアタイプで、10進数か文字列 Ethernet
(type 1 になる) 。ほとんどの (R)ARP パケットではハードウェアタイプが Ethernet になる。
(R)ARP で使われているプロトコルタイプ (hexあるいは 0x0800 を意味する文字列 IPv4
) 。ほとんどの (R)ARP パケットではプロトコルタイプは IPv4 になる。
(R)ARP 送信元 IP アドレス指定。
(R)ARP 送信先 IP アドレス指定。
(R)ARP 送信元 MAC アドレス指定。
(R)ARP 送信先 MAC アドレス指定。
ARP gratuitous パケットを検査する: ARP ヘッダ中の送信元 IPv4 アドレスと送信先 IPv4 アドレスが等しいものを検査する。
IPv4 フィールドを指定する。プロトコルは IPv4 でなければならない。
送信元 IP アドレス。--ip-src
はこのオプションのエイリアスである。
送信先 IP アドレス。--ip-dst
はこのオプションのエイリアスである。
IP サービスタイプを、hex 表記の数値で。IPv4
のものである。
IP プロトコル。--ip-proto
はこのオプションのエイリアスである。
IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip-protocol
オプションで TCP
, UDP
, DCCP
, SCTP
のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip-sport
はこのオプションのエイリアスである。
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 アドレス。--ipv6-src
フラグはこのオプションのエイリアスである。
送信先 IPv6 アドレス。--ipv6-dst
フラグはこのオプションのエイリアスである。
IPv6 トラフィッククラスを hex 表記の数値で。
IP プロトコル。--ip6-proto
はこのオプションのエイリアスである。
IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip6-protocol
オプションで TCP
, UDP
, DCCP
, SCTP
のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip6-sport
はこのオプションのエイリアスである。
IP プロトコル 6 (TCP), 17 (UDP), 33 (DCCP), 132 (SCTP) における、送信元ポートあるいはポートの範囲。--ip6-protocol
オプションで TCP
, UDP
, DCCP
, SCTP
のいずれかが指定されていなければならない。port1 が省略された場合は 0:port2 が使われる。port2 が省略されたけれどもコロンが指定された場合は port1:65535 が使われる。--ip6-sport
はこのオプションのエイリアスである。
マッチングさせる ipv6-icmp タイプとコード。タイプとコードのどちらも範囲指定できる。タイプとコードはスラッシュで区切る。タイプとコードは 0 から 255 の間の数値である。あるタイプのすべてのコードにマッチングさせるには、数値の代わりにシンボル名を使って指定する。既知のタイプ名については次のコマンドで一覧が表示される。
ebtables --help ip6
このオプションは --ip6-protocol ipv6-icmp
についてのみ有効である。
このモジュールは token bucket フィルタを使って、マッチングにレートリミットを付ける。この extension を使っているルールは、リミットに到達するまではマッチングする。例えば --log
watcher と組み合わせて使うと、レートリミットのついたロギングを行うことができる。iptables
における limit マッチングと同様に使える。
マッチングレート最大平均値: 数値指定で、/second
, /minute
, /hour
, day
サフィックスを付けることができる; デフォルト値は 3/hour
。
マッチングする初期パケット最大値: 上記のリミットに到達しなかった回ごとに、指定した数値までリチャージされる; デフォルト値は 5
である。
符号なし数値の mark でフレームにマッチングする。value と mask が指定されている場合、フレームの mark 値とユーザ指定の mask 値の論理和 (AND) が計算されてから、ユーザ指定の mark value 値と比較される。value のみが指定された場合、ユーザ指定の mark value と同一の値の mark を持ったパケットのみがマッチングする。mask のみが指定された場合、フレームの mark 値とユーザ指定の mask 値の論理和 (AND) が計算され、結果が非 0 であるフレームがマッチングする。mask のみ指定する方法は、複数の mark 値とマッチングさせるのに便利である。
フレームの Ethernet "class" にマッチングし、これは一般的なネットワークコードによって決まる。取りうる値は: broadcast
(送信先 MAC アドレスがブロードキャストアドレス) , multicast
(送信先 MAC アドレスがマルチキャスト) , host
(送信先 MAC アドレスがネットワークデバイス) , otehrhost
(上記のいずれでもない) のいずれかである。
stp BPDU (bridge protocol data unit) フィールドを指定する。送信先アドレス (-d
) は bridge group address (BGA) が指定されていなければならない。数値の範囲指定ができるオプションでは、下限を省略した際は取りうる最小値が使われ、上限を省略した際 (コロンがついている場合) は、取りうる最大値が使われる。
BPDU type (0-255) である。数値以外で認識できるタイプは config
の configuration BPDU (=0) と tcn
の topology change notification BPDU (=128) である。
BPDU flag (0-255) である。数値以外で認識できるフラグは topology-change
の topology change flag (=1) と topology-change-ack
の topology change acknowledgement flag (=128) である。
root 優先度 (0-65535) の範囲。
root MAC アドレス。詳細は -s
オプション参照すること。
root path コスト (0-4294967295) の範囲。
BPDU 送信者優先度 (0-65535) の範囲。
BPDU 送信者の MAC アドレス。詳細は -s
オプション参照すること。
port 識別子の範囲 (0-65535)。
メッセージ age timer の範囲 (0-65535)。
max age time の範囲 (0-65535)。
hello time timer の範囲 (0-65535)。
forward delay timer の範囲 (0-65535)。
802.1Q タグ制御情報フィールドを指定する。プロトコルは 802_1Q でなければならない。
VLAN 識別子フィールド (VID)。0 から 4095 の間の10進数の数字。
優先度フィールドで、0 から 7 までの10進数の数字。VID は 0 ("null VID")か、無指定であるべきです (後者の無指定の場合 VID は 0 であるとされる) 。
格納されている Ethernet フレームの type/length の値。0x0000 から 0xFFFF の範囲の hex 数値か /etc/ethertypes
にあるシンボル名で指定する。
watchers は通過するフレームを観測するだけで、変更したりacceptするかどうかを決めたりなどは行わない。これらの watcher はフレームがルールにマッチングするかどうかを見るだけで、それはターゲットが実行される前に行われる。
log watcher はフレームの説明を syslog に書き出す。
デフォルトの logging オプションでロギングを行う: log-leve=info, log-prefix="", ip ログなし, arp ログなし。
logging レベルを定義する。取りうる値は ebtables -h log
を参照すること。デフォルトのレベルは info
である。
ログ情報の行頭にプリントする text プレフィックスを定義する。
ルールで ip プロトコルにマッチングした際に生成されるフレームの ip 情報をログする。デフォルトでは ip 情報はログされない。
ルールで ipv6 プロトコルにマッチングした際に生成されるフレームの ipv6 情報をログする。デフォルトでは ipv6 情報はログされない。
ルールで (r)arp プロトコルマッチングした際に生成されるフレームの (r)arp 情報をログする。デフォルトでは (r)arp 情報はログされない。
nflog watcher はパケットをログするためにロードされた logging バックエンドにパケットを渡する。これは通常 nfnetlink_log を logging バックエンドとして組み合わせて使われ、これが netlink ソケット経由でパケットを指定した multicast グループに mutlcast する。1つあるいは複数のユーザスペースプロセスがそのグループに参加してパケットを受け取ることができる。
デフォルトの logging オプションでログする。
パケットが送出先である netlink グループ (1 から 2^32-1 の間) (nfnetlink_log でのみ有効) 。デフォルト値は 1。
ログメッセージに含まれるプレフィックス文字列で、30文字まで。ログの中でメッセージを区別するのに便利。
ユーザスペースにコピーされるバイト数 (nfnetlink_logでのみ有効) 。nfnetlink_log インスタンスでも範囲指定可能で、このオプションはそれを上書きする。
ユーザスペースに送る前に kernel 内の queue するパケットの数 (nfnetlink_log でのみ有効) 。大きな数値にすると 1 パケットあたりのオーバーヘッドは小さくなるが、ユーザスペースにパケットが届くまでの遅延は大きくなる。デフォルト値は 1。
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-prefix="", ulog-nlgroup=1, ulog-cprange=4096, ulog-qthreshold=1
ユーザスペースに送られるパケットに含まれるプレフィックスを定義する。
どの netlink group number を使うかを定義する (1から32の間の数字) 。iptables
ULOG
ターゲットで使われている netlink group number とは ebtables
ulog watcher のものとは異なるものにすること。デフォルトの group number は 1 である。
ルールにマッチングしたパケットについて、ユーザスペースにコピーされる範囲の最大値を定義する。デフォルトの範囲は 0 で、これは nlbufsiz
で与えられた範囲の最大値を意味する。1281024 より大きな値を指定しても意味はない。なぜならユーザスペースに送られるパケットサイズには 1281024 の上限値があるからである。
netlink ソケット経由でユーザスペースに送りだす前に threshold の数まで packet を queue する。queue が埋まる以前であってもパケットは送出されることがあることに注意すること。これは ulog kernel タイマが達した際に起こる (このタイマの周期は flushtimeout
に依存する) 。
arpreply
ターゲットは nat
テーブルの PREROUTING
チェインで使うことができる。ターゲットが ARP リクエストを発見すると、自動的に ARP reply を返する。reply に使う MAC アドレスは設定できる。プロトコルは ARP でなければならない。ARP メッセージが ARP リクエストではなかったり、ARP リクエストが Ethernet ネットワーク上の IP アドレスに対するものではなかった場合、このターゲットでは無視される (CONTINUE
) 。ARP リクエストが不正だった場合、破棄される (DROP
) 。
reply に返す MAC アドレスを指定する。Ethernet 送信元 MAC アドレスと ARP payload 中の送信元 MAC アドレスの両方がこのアドレスになる。
標準のターゲットを指定する。ARP reply を送信した後に、ebtables がその ARP request に対してさらに何を行うかを指定する。デフォルトのターゲットは DROP
である。
dnat
は broute
テーブルの BROUTING
チェインと、nat
テーブルのPREROUTING
と OUTPUT
チェインでのみ使える。送信先 MAC アドレスを変更するときに指定する。
送信先 MAC アドレスを指定した address に変更する。--to-dst
フラグはこのオプションのエイリアスである。
標準のターゲットを指定する。dnat を行った後に、ebtables がその dnat されたフレームに対してさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT
である。CONTINUE
にすると、同一フレームに対して複数のtarget extensionを使える。DROP
は BROUTING
チェインで redirect
ターゲットと使うときにのみ意味がある。RETURN
を基本チェインで使うことはできない (理由は明らかでしょう) 。
mark
ターゲットはどの table のどのチェインでも使える。bridge-nf が kernel に組み込まれていれば ebtables と iptables の両方で mark できる。どちらも同じ場所に mark を記録する。ebtablesとiptables間の通信となる。
フレームに非負数の value を mark する。
フレームに非負数の value で OR した値を記録する。
フレームに非負数の value で AND した値を記録する。
フレームに非負数の value で XOR した値を記録する。
標準のターゲットを指定する。mark を行った後に、ebtables がその dnat されたフレームに対してさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT
である。CONTINUE
にすると、後続のチェインのルールでフレームに対して何らかの他の処理ができる。
redirect
ターゲットは MAC ターゲットアドレスをフレームが到達したブリッジデバイスのものに変更する。このターゲットは broute
テーブルの BROUTING
チェインと nat
テーブルの PREROUTING
チェインでのみ使える。BROUTING
チェインではブリッジポートの MAC アドレスが送信先アドレスとして使われ、PREROUTING
チェインではブリッジの MAC アドレスが使われる。
標準のターゲットを指定する。MAC リダイレクトを行った後に、ebtables がさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT
である。CONTINUE
にすると、同一フレームに対して複数のtarget extensionを使える。BROUTING
チェイン中で DROP
を使うと、そのフレームは route される。RETURN
も使うことができる。 RETURN
を基本チェインで使うことはできない。
snat
ターゲットは nat
テーブルの POSTROUTING
でのみ使うことができる。送信元 MAC アドレスを変更する際に使いる。
送信元 MAC アドレスを指定した address に変更する。--to-src
フラグはこのオプションのエイリアスである。
標準のターゲットを指定する。snat を行った後に、ebtables がさらに何を行うかを指定する。デフォルトのターゲットは ACCEPT
である。CONTINUE
にすると、同一フレームに対して複数のtarget extensionを使える。DROP
は 意味をなさないが、実行することはできる。RETURN
も使える。RETURN
を基本チェインで使うことはできない。
パケットが arp メッセージであり、かつ、arp ヘッダ中のハードウェアアドレスの長さが 6 バイトの長さであった場合に、arp ヘッダ中のハードウェア送信元アドレスも変更する。