11.4. CONNMARKターゲット

CONNMARK ターゲットは、 MARK とほぼ同様のやり方で、コネクション単位でマークを付ける。そうしておけば、 connmark マッチを使って後でそのコネクションをマッチさせることができる。例えば、ヘッダに或る特定のパターンが見られることが分かっているが、パケットひとつでなく、コネクションそのものにマークを付けたい場合だ。そんな時に打って付けのソリューションが CONNMARK ターゲットだ。

CONNMARK ターゲットはあらゆるテーブルの全てのチェーンで使用できる。ただし、nat テーブルはコネクションの最初のパケットしか通らないため、2番目以降のパケットに対して CONNMARK ターゲットを掛けようとしても何の効果もないという点に注意してほしい。 CONNMARK ターゲットには以下に述べる 4つのオプションが指定できる。

Table 11-3. CONNMARKターゲットオプション

オプション--set-mark
iptables -t nat -A PREROUTING -p tcp --dport 80 -j CONNMARK --set-mark 4
説明コネクションにマークを付ける。マークは unsigned long int (符号なし長整数型) で、つまり有効な値は 0 から 4294967295l となる。 --set-mark 12/8 のようにして特定のビットをマスクすることもできる。この方法を使えば、マークの中の全ビットのうち、マスクで指定したビットだけをセットする [1にする] ことが可能となる。この例では、第4ビット (第3ではない) だけがセットされる。12を 2進数にすると 1100、8 は 1000 であり、マスクに指定されているビットだけがセットを許可されるので、実際にマークされるのは第4ビットだけ (つまり8) となる。
オプション--save-mark
iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --save-mark
説明--save-mark ターゲットを使うと、パケットマークをコネクションマークに記録することができる。例えば、既に MARK ターゲットでマークを付けてあるパケットがあった場合、 --save-mark を使用すればそのマークをコネクション単位のマークへと移動できるわけだ。また、マークは後述の --mask オプションでマスクすることも可能だ。
オプション--restore-mark
iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --restore-mark
説明このターゲットオプションは、 CONNMARK で定義されているコネクションマークに基づいてパケットのマークを再設定 (restore) する。下に述べる --mask オプションでマスクを指定することもできる。マスクを指定した場合、マスク後のオプションだけが設定される。このターゲットは mangle テーブルでのみ使用できるという点に注意。
オプション--mask
iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --restore-mark --mask 12
説明--mask オプションは必ず --save-mark--restore-mark オプションと組み合わせて使用しなければならない。これは、ふたつのオプションの指定するマーク値に対して適用する、論理積マスク (and-mask) を定義する。例えば、上記で restore の対象としているマークが 15 だったとすれば、マークは 2進数で 1111、マスクは 1100。1111 と 1100 の論理積は 1100 となる。

Note

Linux カーネル 2.6 で機能する。