My network configuration http://daveden.files.wordpress.com/2013/05/network-configuration.png
代理服务器在端口3128上运行带有Squid的Ubuntu,在端口8080上运行DansGuardian.
我想强制所有客户端使用代理服务器 – 特别是端口8080 – 进行任何HTTP / HTTPS访问.
但是,我不想透明地重定向,因为这对HTTPS不起作用.我不介意配置每个客户端,我不介意每个客户端都知道它正在使用代理服务器.我只是不希望客户端能够在没有代理设置的情况下浏览网页.
我该怎么做呢?如果客户端未配置为在端口8080上使用代理服务器,是否可以丢弃数据包?
我尝试使用iptables丢弃具有8080以外的dport的数据包,但是我认为我拒绝了太多,我无法再访问任何东西.
编辑
我重写了这个问题,所以它不是特定于iptables的,但我并不反对使用iptables.我只想吸引更广泛的可能解决方案.
编辑2
我想我可能给了一些错误的印象.为了清楚起见,我完全没有兴趣过滤HTTPS流量(即,在代理处查看数据包并检查内容).我对使用DansGuardian阻止网站更感兴趣,无论是通过HTTP还是HTTPS(通过查看数据包的目的地).
编辑3
根据Alexandru-Florin Vintil的建议,这是我目前正在做的事情:
# Redirect HTTP traffic to port 8080 (DansGuardian) iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080 # Check TCP and UDP traffic against whitelist iptables -A FORWARD -i eth1 -p tcp --dport 443 -j whitelist iptables -A FORWARD -i eth1 -p udp --dport 443 -j whitelist # Drop all other HTTPS traffic iptables -A FORWARD -i eth1 -p tcp --dport 443 -j DROP iptables -A FORWARD -i eth1 -p udp --dport 443 -j DROP # Drop all traffic aimed straight at the proxy iptables -A FORWARD -i eth1 -p tcp --dport 3128 -j DROP iptables -A FORWARD -i eth1 -p udp --dport 3128 -j DROP iptables -A FORWARD -i eth1 -p tcp --dport 8080 -j DROP iptables -A FORWARD -i eth1 -p udp --dport 8080 -j DROP
简而言之,将HTTP流量重定向到端口8080,删除未列入白名单的所有HTTPS流量(在单独的链中),并删除明确使用代理的所有流量.如果没有最后一条规则,客户端可以使用HTTPS访问任何网站,只要他们将浏览器配置为使用代理,因为目标端口是8080而不是443.因此,即使丢弃绑定到443的所有流量也不会完全阻止HTTPS .
解决方法
关于HTTP:让防火墙透明地将端口80流量转发到代理/过滤器是最简单的做事方式.无需客户端配置,您可以免除任何主机/子网使用代理,而无需重新配置客户端.这是唯一可以确保通过代理传递的所有内容的方法.
除阻止所有传出HTTPS 443流量以及仅允许基于允许传出端口443的ip的站点子集之外的任何方法都将无法按预期工作.设计了HTTPS的安全协议(除了一些缺陷)以防止中间人攻击(代理是“合法的”MITM).这样,HTTPS就可以执行它的设计目标.但是,如果你想要IGNORE HTTPS,你应该设置你的鱿鱼使用DIRECT而不是使用CONNECT(点击),但即使是这种情况,你仍然可能遇到有问题的网站,其中包含混合的HTTP / HTTPS部分.这样,您的Squid代理也将管理HTTPS.这也应该反映在防火墙的透明转发部分中.