用Squid + Tor 构建小型技术型公司开放网络 & SQUID CACHE 透明代理设置

2012年4月16日 | 分类: 翻墙相关 | 标签: , , , , ,

用Squid + Tor 构建小型技术型公司开放网络

最近不知道为何越来越多朋友或同事问起关于翻墙的事,我不厌其烦的教他们如何用一些常用的软件解决问题,其实仔细想想,对于小型技术公司而言,需要翻墙上的网站还是很多的,比如blogspot,含有若干极有价值的技术博客,搞技术的都知道,中文网站搜索结果千篇一律,全是互相转载,真正有价值文章几乎没有。于是就诞生了一个借助tor为小型公司统一搭建一个开放技术网络的设想,这样也许可以保证队伍在技术方面的先进性。为什么我说小型公司呢,一方面我本人就是待在小型公司,二是大公司特别是外企通常自己有VPN因此就不存在翻墙的问题了。(在这里声明一下,最终的翻墙之道是VPN或Tunnel技术,但是需要$,免费的东西,大家对速度要求就不要太高了。)
Squid 软件大家都很熟悉了,是用的最为广泛的开源的代理软件,很多大型的web网站也会用squid做反向代理加速网站。用于公司内部上网代理的时候一方面可以通过缓存加速网站访问,另一方面也可以过滤一些上班不能访问的网站,例如国内的SNS网站。这里我就不赘述了,我先在这里假设你已经搭建好了一个能够允许内部通过squid代理上网的环境。
Tor软件最近也升级到2.1.22了,并提供了linux下的RPM安装包,使用起来非常方便。参看官方的安装资料很轻易的就可以安装好tor。Tor本身只支持SOCKS代理,安装好tor后还需要安装一个Polipo软件做HTTP Proxy.这些在tor的官网上都有。安装好后,确保能通过本地的8118端口上网。Tor本身因为被国家级防火墙屏蔽,这里需要在/etc/tor/torrc中加入如下几行才能正常连接:

#访问 https://bridges.torproject.org 获取bridge IP
Bridge 8.98.151.48:80
Bridge 81.59.250.53:43
Bridge 108.125.18.153:91
UpdateBridgesFromAuthority 1
UseBridges 1

Tor+Squid同时使用简直就是绝配,squid负责代理内网请求和缓存,tor负责绕墙获取被屏蔽的技术资料。tor本身来说是比较慢的,但是因为有了squid做缓存,效果就变得非常好了。构建这样的网络必须具备如下特点,即只通过tor访问被屏蔽的网站,不被屏蔽的网站则直接连接,这样就兼备了未被屏蔽网站的正常上网速度和开放性。感谢squid软件的强大,我们能通过一些巧妙的设定轻易完成这样的设置。连接的要点就在于squid.conf加入如下几句。

cache_peer tor parent 8118 0 no-query # 申明tor代理服务器,主机名tor,端口8118
connection_timeout 2 seconds # 2秒内连接不上就认为网站被屏蔽,应该走tor通路
prefer_direct on # 倾向于直接连接

编辑好squid.conf后,需要在hosts加入

127.0.0.1 xxxxx,…………… tor

保证ping tor 能ping到127.0.0.1。 然后reload squid.conf!
恩,结束了,就这么简单,这样你就实现了一个既能高速上国内网,同时也能通过tor访问被屏蔽技术类网站的代理服务器。
这样设置好的服务器上通常的网站是没有问题的,但是登陆twitter有点问题,问题在于如果网站URL Redirection,即HTTP 301,squid不是能够很
好的选择tor通路,有可能会选择direct link现象。如果发现有这样的网站,加入如下两句就可以解决问题了。

acl twitter dstdomain .twitter.com #申明规则
never_direct allow twitter #永远不让twitter直接连接

如果发现有更巧妙的办法,我会及时公布实现方法。

后记》
通过always_direct 可以屏蔽被国家级防火墙屏蔽的网站,以免沾染上西方不良思想,例如将下面两行加入squid.conf

acl avno1 dstdomain .avno1.com #申明规则
always_direct allow avno1 #永远让avno1网站直接连接,因为被国家级防火墙保护,所以只有在解封时才能正常访问。

来源http://bullshitlie.blogspot.com/2010/01/squid-tor.html

========

SQUID CACHE 透明代理设置

== 运行平台ArchLinux

[root@archlinux ~]# uname -a
Linux archlinux 3.2.11-1-ARCH #1 SMP PREEMPT Thu Mar 15 09:19:02 CET 2012 x86_64 Intel(R) Xeon(R) CPU E5506 @ 2.13GHz GenuineIntel GNU/Linux

== squid.conf 配置关键部分 (默认部分忽略) 

##############################################################
forwarded_for transparent
cache_dir aufs /var/cache/squid 16384 32 512
cache_mem 1024 MB
memory_replacement_policy lru
cache_replacement_policy heap LFUDA
maximum_object_size 4096 KB
maximum_object_size_in_memory 128 KB
# DNS的速度很重要,直接影响浏览器响应速度,这里千万别卡了(最佳方式为安装PDNSD)
dns_nameservers 127.0.0.1 (本地PDNSD服务,可以参考 http://bullshitlie.blogspot.com/2012/03/pdnsd-google-dns-dns.html )
# 以下为自动翻墙部分
connect_timeout 2 seconds
cache_peer 127.0.0.1 parent 8123 0 no-query no-digest#上级翻墙代理(结合polipo+autossh)
prefer_direct on
nonhierarchical_direct off
access_log none
# 关键, 从 http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt 下载,然后通过 http://www.base64decode.org/ 在线解码,把内容复制到/etc/squid/gfwlist.txt
# 可以实现比较帅的选路动作
# 当然,你可以写个脚本定期抓取gfwlist,然后base64 decode到gfwlist.txt
acl gfwlist dstdomain “/etc/squid/gfwlist.txt”
never_direct allow gfwlist
client_db off
half_closed_clients off
buffered_logs on
relaxed_header_parser on
# END OF SQUID.CONF

== 解决 WARNING! Your cache is running out of filedescriptors 问题

/etc/security/limits.conf 配置加入
*               –       nofile          8192
/etc/conf.d/squid 配置加入
SQUID_MAXFD=8192

== 缓解 squidaio_queue_request: WARNING – Queue congestion 问题

/etc/fstab 中对应squid cache目录的文件系统
/dev/sda6 /var reiserfs defaults,notail, noatime,nodiratime 0 1

== 提高squid响应速度

/etc/sysctl.conf
vm.swappiness = 0
net.ipv4.tcp_low_latency = 1
(以上参数避免squid内存中得东西交换到磁盘上)


== iptables部分

iptables -t nat -A PREROUTING -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 3128iptables -t nat -A PREROUTING -p tcp -m tcp –dport 8080 -j REDIRECT –to-ports 3128

重定向80和8080端口

  1. 2020年7月11日15:39

    优秀的文章。 要添加,在base64中进行解码和编码,还有另一种在线工具。 您也可以参考该工具
    https://url-decode.com/tool/base64-decode