背景信息:
使用 RH Fedora 13、Kernel 2.6.34.7-63 和 IPTables 1.4.7 构建了防火墙。防火墙是一个简单的双适配器配置,外部接口 (eth0) 面向互联网,另一个接口 (eth1) 面向小型专用网络(单个 IP 子网)。防火墙是堡垒主机,这意味着防火墙主机只包含操作系统、IPTables 以及支持主机本身运行所需的项目。防火墙不运行任何其他应用程序。
私有网络内包含一个网络服务器。
网络: 基地址:149.10.10.0/24 Web 服务器:149.10.10.25 客户端:位于子网上的各个地址。 防火墙 eth1 地址:149.10.10.1 DNS 地址:149.10.10.2
问题鉴于内部网络上的客户端可以自由浏览互联网:如果客户端选择一个特定的网站(即 www.website.com),我的目标是配置 IPTables 以将客户端重定向到内部 Web 服务器。
- 如果客户端 Web 浏览器要浏览 www.website.com,则 iptables 会将客户端重定向到 149.10.10.25
- 如果客户端网络浏览器要浏览任何其他网站,那么 iptables 允许客户端转发到互联网。
我尝试了几个 iptables 规则,包括:
iptables -v -t nat -A PREROUTING --in-interface eth1 --dport 80 -d www.website.com -j DNAT --to 149.10.10.25
但这似乎并无效果。
您能推荐我应使用哪条规则来实现这一壮举吗?
答案1
假设您可以使用 执行此操作iptables
,但我不确定您是否可以,因为从 149.10.10.25 到客户端的返回流量具有无路由特性,因此您将重定向全部位于与之关联的 IP 地址上的网络主机www.website.com
。
这是不可避免的,因为 iptables 本质上是一个第 3 层工具,处理的是 ip 地址而不是 HTTP 主机名。
我认为你最好在你的内部网络上安装一个 squid 代理,配置那对一个域名执行重定向,并重新配置您的客户端以使用代理。您可能还希望iptables
在堡垒上使用,以阻止所有进出内部网络的 http 流量,以确保使用代理。
答案2
下面是我用于类似规则的语法,但我的流量是从外部到内部的。
-A PREROUTING -i eth0 -p tcp -m tcp -d XXXX --dport 80 -j DNAT --to-destination YYYY:80
您还需要确保已启用 ip_forward 并具有正确的转发规则以允许流量返回。