我在网关机器上运行着 iptables 和 apache。
1) 网关后面的所有机器都不应能够访问互联网。
2)如果他们尝试浏览任何其他网站,他们应该被自动重定向到另一个网站http://www.xyz.com(这也在我的控制之下)。
为了做到这一点,我在 iptables 中尝试了以下内容。
*nat
-A PREROUTING -i eth3 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 80
(redirect all browsing requests to port 80 on gateway machine itself)
在网关机器上运行的 Apache 服务器中,
in /etc/apache2/sites-available/default
RedirectMatch .* http://www.xyz.com/
完成后,当我尝试从网关后面浏览任何站点时,都会出现错误。
在 Firefox 中 - “Firefox 已检测到服务器正在以永远无法完成的方式重定向此地址的请求。”
在 Chrome 中 - 错误 310 (net::ERR_TOO_MANY_REDIRECTS):重定向太多。
在 IE 中也会发生类似的事情。
看起来 iptables 和 RedirectMatch 相互协作,进入了递归循环。我该怎么做才能防止这种情况发生?
答案1
您可以将目标 Web 服务器的 IP 地址添加到您的 iptables 规则中:
-A PREROUTING -i eth3 -p tcp ! -d 1.2.3.4 -m tcp --dport 80 -j REDIRECT --to-ports 80
或者,如果您控制着 的服务器xyz.com
,请将其托管在不同的端口上。