Iptables --to 似乎可以代替 --to-destination,对吗?

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-destination?

答案1

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

此外,您不能使用比赛和目标名称的缩写版本。

相关内容