iptablesがマークされたパケットを受信できないのはなぜですか?

iptablesがマークされたパケットを受信できないのはなぜですか?

pingコマンドオプションについて学んでいます。その中でパケットのフラグを設定する-mオプションが見つかりました。

次のコマンドは、10 とマークされたパケットを 192.168.2.65 に送信します。

ping -m 10 192.168.2.65

以下のコマンドを使用すると、宛先からパケットを受信できます。

iptables -A INPUT -m mark --mark 0xa -j ACCEPT

しかし、上記のコマンドは表示されたパケットを受信できませんでした。上記のiptablesコマンドは何も返しません。

注:私たちは皆rootアクセス権を持っています。

答え1

このタグは内部的であり、パケットやヘッダーのどこにも含まれません。

INPUTつまり、実際のアウトバウンド接続を作成すると、その情報が失われ、ターゲットサーバーのテーブルには表示されませんが、元のシステムOUTPUTのテーブルには表示されません。

pingでタグをサポートする目的は、アウトバウンドルーティングルールを許可することです。

答え2

@Julie Pelletierの答えは100%正確ですが、理解できない場合があります。

まず、コメントで何度も言及したように、マークアップはいいえ回線のイーサネットパケットに変換されます。したがって、サーバーAでサーバーBをpingすると、サーバーBはタグを検出しません。何でもするには、サーバーAを単独で使用する必要があります。したがって、OUTPUTチェーンにルールを挿入/追加する必要があります。送信者何でも見なさい。

それでは、どのように使用しているかを見てみましょう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バイトの長さのパケットを見つけました。

試したい場合は、タグ付きパケットがコンピュータから離れないようにし、タグがあるかどうかにかかわらず他のコンピュータをpingするのを防ぐために、iptables -F OUTPUTテーブルを消去してください。iptables -I OUTPUT -m mark --mark 0x0a -j REJECT表示されたパケットはルールに従って破棄されるため、応答を受け取っていないことがわかります。

関連情報