web-dev-qa-db-ja.com

Iptables --toは、-to-destinationの代わりに機能するようです。

/ etc/network/interfacesの私の行は次のとおりです。

post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 7997 -j DNAT --to 10.4.0.3:22

SSHや他の同様のルールを転送することは問題なく機能するようです。 HTTPおよびHTTPSトラフィックも同様です。マニュアルページを見ると、ディレクティブは次のとおりです。

--to

次とはまったく異なることをしているようです。

--to-destination 

これは私が期待する指令です。 iptables拡張機能のマニュアルページ には、「-to」に関する4つの言及があります。どちらが使用されていますか?

なぜそれがまだ機能するのですか?正しい使い方ですか?そうでない場合は、この方法で安全に使用できますか、それとも--to-destinationに変更する必要がありますか?

1
Adam G.

Xtables(arptables/ebtables/iptables/ip6tables)パーサーでは、一致/ターゲットオプションの短い名前を認識できる場合に使用できます。引数のパーサーは、引数文字列の先頭とオプション名を比較してオプションを推測しようとします。しかし、それは常に安全であるとは限りません。一致オプションは、ターゲットオプションよりも認識順に優先度が高くなります。

_--to_オプションの安全でない使用例:

:~# iptables -t nat -A PREROUTING -p udp -m string --string "badword" \ -j DNAT --to 192.168.10.1 iptables v1.6.2: string: bad value for option "--to", or out of range (0-65535). Try `iptables -h' or 'iptables --help' for more information.

この例では、パーサーは_--to_オプションを文字列一致のオプションとして認識しましたが、文字列一致のサブパーサーはIPアドレスではなく整数値を予期しているため、コマンドは失敗します。

ただし、このバージョンの同じコマンドはエラーなしで実行されます。

_:~# iptables -t nat -A PREROUTING -p udp -m string --st "badword" --al bm \ -j DNAT --to-d 192.168.10.1_

この例では:

  • _--st_ = _--string_
  • _--al_ = _--algo_
  • _--to-d_ = _--to-destination_

また、一致名とターゲット名の短いバージョンは使用できません。

1
Anton Danilov