/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
此外,您不能使用比赛和目标名称的缩写版本。