【发布时间】:2013-02-13 07:21:26
【问题描述】:
我正在 ubuntu 专用服务器上编辑/扩展我的防火墙 bash 脚本。
下面的代码只是一个摘录。 下面的目的是为某些 IP 重新路由/打开我的(http、ftp、telnet 和 ssh)端口,用于/到 3 个盒子。
问题是我想在变量中使用变量。
所以--dport ${i}_${j}_port_ext 被 f.i. 正确替换。 --dport box0_http_port_ext 但不被视为变量(当然)。其实我想要的应该是--dport $box0_http_port_ext(注意开头的$)
我尝试了几件事 f.i. --dport ${${i}_${j}_port_ext} 或 --dport $(${i}_${j}_port_ext) 但这不好。
box0_http_port_ext="8080"
box0_ftp_port_ext="21"
box0_telnet_port_ext="23"
box0_ssh_port_ext="22"
#
allow_box0_http_port_ip="1.2.3.4 99.98.97.96 55.56.57.58"
allow_box0_ftp_port_ip="1.2.3.4 55.56.57.58"
allow_box0_telnet_port_ip="55.56.57.58"
allow_box0_ssh_port_ip="1.2.3.4"
#
for i in box0 box1 box2
do
for j in http ftp telnet ssh
do
for ips in $allow_${i}_${j}_port_ip
do
$IPTABLES -t nat -A PREROUTING -p tcp -i $LAN_IFACE -s $ips --dport ${i}_${j}_port_ext -j DNAT --to-destination ${i}_ip:${i}_${j}_port_int
done
done
done
请不要看代码,因为它是摘录,因此不完整。
问题是:如何使用$i 为box0 和$j 为http 编码--dport $box0_http_port_ext。请记住,$i 也可以是 box1/box2,$j 也可以替换为 ftp/telnet/ssh。
【问题讨论】:
-
@ni_hao 请在解决问题后分享解决方案。
标签: bash shell variables ubuntu