我的目标是能够通过代理连接到一个且只有一个网站。其他一切都应放弃。
我已经能够使用以下代码成功完成此操作,而无需使用代理:
./iptables -I INPUT 1 -i lo -j ACCEPT
./iptabels -A OUTPUT -p udp --dport 53 -j ACCEPT
./iptables -A OUTPUT -p tcp -d www.website.com --dport 80 -j ACCEPT
./iptables -A INPUT -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT
./iptables -P INPUT DROP
./iptables -P OUTPUT DROP
除了将流量重定向到某个端口 8080 之外,我还能做同样的事情吗?我一直在尝试在 nat 表中的 PREROUTING 链中进行重定向。但我不确定这是否是执行此操作的合适位置。
感谢您的帮助!
答案1
我认为 Web 服务器配置是执行此操作的更好地方。请检查 Apache 服务器的虚拟主机配置:
Apache vhosts 配置:http://httpd.apache.org/docs/2.2/vhosts/examples.html
其他服务器的配置也类似。您可以指定它们要处理哪些网站(通过 URL)。
答案2
您不需要使用 iptables 丢弃除发往特定域的流量之外的 http 流量。您可以使用如下规则将 http 流量重定向到您的代理:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination proxy_ip:8080
您需要有一个正在运行的代理服务器,该服务器支持透明代理并监听端口 8080。然后,您可以配置代理以允许/拒绝您想要的任何内容,如域/URL 等。
请注意,在 iptables 规则中使用域名不是一个好主意,因为输入规则后,iptables 将看不到名称-IP 映射的变化。