我知道在serverfault这是一个非常问的问题,但是我没有一个consise答案(或没有足够的阅读:D)我也知道,你们中的一些人可能认为这是一个antimanager的做法(可能是)但必须完成的地方…
目前我正在申请一个iptables阻止政策与鱿鱼结合,但没有工作,因为我们需要访问某些谷歌网站或Skype服务,这些都是由https访问,也交换他们的IP地址是很难保持轨道… … –
我的一个朋友推荐我Astaro我还没有看到它,你能build议一个工具,通过端口网站做过滤/域?
编辑问题
有没有办法阻止HTTPS网站的域名或最好的办法做到这一点? Astaro看起来像一个替代品,但它看起来像一个普通的旧的Web代理
诀窍是与authentication的用户使用Squid。 如果您正在运行透明代理,则SSLstream量无法代理。 Squid可以同时运行(在不同的端口上):
http_port <ip>:3128 transparent http_port <ip>:8080
您显然必须添加一些规则来允许和拒绝经过身份validation的用户在允许或禁止的位置进行导航。 不过,透明访问网页的用户,如果在防火墙上被阻止,则将被禁止访问HTTPS。
另一种方式(比较脏)则是从文件中获取站点,获取DNSlogging以及更新/删除规则,如下所示:
设置一个像这样的规则:
iptables -N SSL_FORWARD iptables -A FORWARD -s <NET> -p tcp --dport 443 -j SSL_FORWARD iptables -A FORWARD -s <NET> -p tcp --dport -j DROP
这将创build一个新链SSL_FORWARD,并发送来自您的networking的数据包发往端口443在这个新链上进行评估。 如果数据包与该链中的任何规则不匹配,则会被丢弃。
然后,定期执行这个小脚本:
# Flush SSL_FORWARD chain iptables -F SSL_FORWARD # Iterate through each line of this file, and then get # it DNS records for domain in `cat /path/to/allowed.domains`; do for line in `dig ${domain} +short` ; do [ -z "`echo ${line} | grep '^[0-9.]*$'`" ] && continue iptables -A SSL_FORWARD -s <NET> -d ${line} -p tcp --dport 443 -j ACCEPT done done
与我类似的情况。 我使用bash脚本来转换域名列表,例如:
www.youtube.com www.vimeo.com www.facebook.com
进入IP地址列表。 然后,我将IP地址列表送入ipset :
ipset -N Blacklist iphash for ip in ${iplist[@]}; do ipset -A Blacklist $ip done
最后,我将IPset应用于iptables:
iptables -A FORWARD -p tcp --dport 443 -m set --match-set Blacklist dst -j DROP
好处是: 每天早上一个cron作业将域列表重新parsing为一个IP列表并更新Blacklist集,而我根本不必触碰iptables规则。 更新脚本的第一行使用-F而不是-N 。