私は ping コマンドのオプションを学習していました。その中で、パケットのマークを設定する -m オプションを見つけました。
以下のコマンドは、マーキング 10 のパケットを 192.168.2.65 に送信します。
ping -m 10 192.168.2.65
以下のコマンドを使用すると、宛先でそのパケットを受信できます。
iptables -A INPUT -m mark --mark 0xa -j ACCEPT
しかし、上記のコマンドはマークされたパケットを受信しません。上記の iptables コマンドは何も返しません。
注: 両方ともルート権限を持っています。
答え1
このマークは内部的なものであり、パケットやそのヘッダーのどこにも含まれません。
つまり、実際の送信接続を行うときに失われ、ターゲット サーバーのテーブルには表示されませんが、開始マシンのテーブルINPUT
には表示されます。OUTPUT
ping でマークをサポートする目的は、発信ルーティング ルールを許可することです。
答え2
@Julie Pelletier さんの回答は 100% 正しいですが、おそらくあなたにはあまり理解できないでしょう。
まず、コメントで何度も言及されているように、マークはないイーサネットパケットにマークが挿入されます。したがって、サーバーAからサーバーBにpingを実行しても、サーバーBはマークを検出できません。何かしたい場合は、サーバーAのみを使用する必要があります。したがって、送信者何かを見るために。
それでは、 の使い方を見てみましょうiptables
。まず、OUTPUT でどのルールがアクティブになっているかを確認します。
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
root@roran:~#
はい、ルールはありません。ルールを定義しましょう:
root@roran:~# iptables -I OUTPUT -m mark --mark 0xa -j ACCEPT
root@roran:~#
ご覧のとおり、出力はありません。ただし、カーネル テーブルにはエントリがあります。
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 177 packets, 120K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
「pkts」と「bytes」の列は両方とも0です。まだパケットが送信されていないためです。次に、別のサーバーにpingを実行します。それなし目標を設定する:
root@roran:~# ping -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.331 ms
[... some more lines omitted]
その後、カーネル テーブルはまだ何も一致しません。
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 348 packets, 160K bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
次に、マークを設定して ping を試します。
root@roran:~# ping -m 10 -c 1 bermuda
PING bermuda (192.168.178.2) 56(84) bytes of data.
64 bytes from bermuda (192.168.178.2): icmp_seq=1 ttl=64 time=0.324 ms
[... some more lines omitted]
もう一度表を見てみましょう。
root@roran:~# iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 631 packets, 319K bytes)
pkts bytes target prot opt in out source destination
1 84 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 mark match 0xa
root@roran:~#
現在、ルールは 84 バイトのパケットを 1 つ検出しています。
実験したい場合は、この後、iptables -F OUTPUT
テーブルをクリアして、iptables -I OUTPUT -m mark --mark 0x0a -j REJECT
マークされたパケットがマシンから出ないようにし、マークのあるマシンとマークのないマシンに ping を実行します。ルールによってマークされたパケットがドロップされるため、マークされたパケットが応答を受け取っていないことがわかります。