我正在尝试在 Linux 机器上设置端口转发到我内部网络上的 IIS Web 服务器。Web 服务器位于 Windows 2003 Server 上。
我的Linux机器上有:
- eth0——互联网连接
- eth1-内部子网(10.10.10.x)
- eth2-第二个内部子网 (192.168.0.x) dhcp 接口
我的网络服务器位于 eth2 接口(192.168.0.6)
我正在对端口 80 进行端口转发,但没有成功。我使用同一套规则将端口转发到不同的 Web 服务器,并且成功了。
该 Web 应用程序可在内部网络上使用,但不可供外部用户使用。
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $PUBLIC_IP --dport 80 -j DNAT --to 192.168.0.6:80
iptables -A FORWARD -p tcp -i eth0 -o eth2 -d 192.168.0.6 --dport 80 -m state --state NEW -j ACCEPT
iptables -A FORWARD -t filter -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -t filter -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
有任何想法吗?
答案1
感谢大家的回答。问题出在 IIS 服务器的网络配置上。由于某种原因,默认网关未配置……哎呀,Leason 明白了,不要相信别人告诉你的话。
我最初使用的规则确实有效。
答案2
也许这不适合你的安全模型,但你可能想要考虑安装 apache 并使用它的代理模块将流量路由到你的 IIS Web 服务器。最重要的是,你可以将其配置为过滤掉除你严格定义的 URL 之外的所有 URL,从而使你的 IIS 安装更加安全。
Apache 配置文件:
<Proxy *>
# deny most all requests
Order deny,allow
# allow from your internal network
Allow from 192.168.x.x
</Proxy>
ProxyPass /yoursite http://internal_site/yoursite
答案3
我认为您不需要使用 MASQUERADE。请尝试使用 SNAT。
答案4
我总是使用以下脚本来成功使用 IIS 和 iptables:
$IPTABLES -P 输入删除 $IPTABLES -P 输出删除 $IPTABLES -P 前向删除
$IPTABLES -t nat -A PREROUTING -j DNAT -p tcp -d $EXT_IP --dport $WWW_PORT --to-destination $WWW_IP $IPTABLES -t nat -A POSTROUTING -o $EXT_IFACE -j MASQUERADE
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -p all -i $LO_IFACE -j ACCEPT $IPTABLES -A INPUT -p all -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -m 状态 --状态 ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state ! --state NEW -j DROP $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -p tcp -i $EXT_IFACE -s $ANY -d $WWW_IP --dport $WWW_PORT -j ACCEPT
$IPTABLES -A FORWARD -p 全部 -i $INT_IFACE -j ACCEPT