创建一个加密的squid代理通道

众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用ssh tunnel实际上效率是很低的,因为ssh不是为了这个目的而开发,今天我们要介绍的是具有普遍的意义的代理服务器squid和stunnel。

其实这二者组合并不新鲜,也并不罕见,下面说说这个组合的 应用条件:

1,一台运行在自由世界的服务器,或者虚拟机。
2,这台服务器上安装了squid。
3,当然,你必须要可以从中国大陆连接它。

首先我们来配置安装好的squid,很多旧的案例使用stunnel加密squid端口,然后在客户机上使用stunnel解密,这是多走了一个弯路,squid自身已经支持加密的代理方法,在服务器上,我们根本就不需要运行stunnel,例如我们要将这个加密的代理运行在服务器IP地址为216.218.186.2的443端口,具体配置参数如下:

https_port 216.218.186.2:443    cert=/etc/squid/hnair.com.crt key=/etc/squid/hnair.com.key

其中,hnair.com.crt和hnair.com.key是使用openssl生成用于加密的数字证书和密钥,关于自行生成数字证书的方法,可参考如下:

openssl req -new > hnair.com.csr

openssl rsa -in privkey.pem -out hnair.com.key

openssl x509 -in hnair.com.csr -out hnair.com.crt -req -signkey hnair.com.key -days 3650

然后启动squid即可。

接下来,我们需要对客户端进行配置,不管你是Windows还是Linux,都可以到这里下载:ftp://ftp.stunnel.org/stunnel/

将相应的stunnel压缩包解压缩或者安装,添加一个配置文件(stunnel.conf)至程序的目录:

client = yes
[ssl2http]
accept = 127.0.0.1:8080
connect = 216.218.186.2:443

注意,有些Linux发行版中,例如Ubuntu,在进行apt-get安装stunnel的时候,stunnel v3和v4都会安装上去,此时应该使用stunnel4来运行,直接运行 /usr/bin/stunnel4 即可,在Windows中不存在这个问题。

然后,我们将浏览器的代理服务器设置为本机的8080端口,也就是127.0.0.1:8080,即可使用一个加密的通道,自由的访问互联网了,实际上,这个方法被广泛应用在XX功的网站上,只不过他们用的是Apache做反向代理,因为上面还有他们的网站,虽然总是胡说八道来着,由于我们不需要在上面运行网站,所以squid代理服务器是最佳选择。

我很好奇为什么那么多人在卖ssh代理,却没有人卖加密的squid,在squid上添加用户身份验证,即可达到类似的效果,究其原因,其实还是有两个:

第一,ssh代理可以实现socks请求转发,有些应用可能需要。

第二,ssh代理本身效率不高,可以防止用户滥用,流量超荷,而加密的squid如果没有流量限制,那显然是一场悲剧。

苹果的另一面:开源软件重镇

刚才一个苹果网站的链接在很短时间内成为Hacker News的头条。这个普通的网址却揭开了以封闭著称的苹果公司不太为人所知的另一面:开源社区的积极一员。

正如这个网页上苹果自己所说的,它是第一个将开源软件作为关键战略的主要计算机公司。了解苹果历史的人肯定知道此言不虚。苹果最重要的软件产品——Mac OS X的内核XNU再加上一些驱动等核心组件合称为Darwin,就是一个开源项目。这个开源项目有个可爱的吉祥物Hexley(达尔文的斗犬赫胥黎是也,不过为什么是鸭子的形状,是因为混合吗?),熟悉FreeBSD的人应该发出会心一笑吧:

这是一个堪称完美的混合内核,著名学院派操作系统Mach的微内核提供了足够的灵活性,也支持着系统的任务、线程、进程、消息传递(IPC)、RPC、SMP调度支持、保护式内存、虚拟内存管理等主要底层功能;而Unix正宗FreeBSD则满足了足够的性能要求,并提供了POSIX API、文件系统、网络栈、安全、抢占式多任务、用户与组管理、权限管理等特性;此外还有Apple独有的面向对象设备驱动框架I/O Kit。这个内核的模块性如此之好,以至于苹果的架构师们能够比较自由地为Mac电脑以及iOS设备选择底层硬件,从PowerPC到Intel,再到ARM……

Darwin架构图

作为目前普通用户最多的类Unix操作系统,Mac OS X中还内置了Unix中常见的各种开源软件,包括Ruby、Python、Perl等语言开发环境以及各种工具。也难怪现在越来越多程序员将Mac OS作为开发机,并渐渐“沦为果粉”……

苹果的另一个著名开源项目大家应该都听说过,但未必知道出自苹果。这就是浏览器引擎WebKit。WebKit(开源项目网址)是1998年苹果工程师开发的一个(KDE开源项目旗下)KHTML与KJS派生版本,开始的时候代码会提交到KDE项目中,但后来双方产生了矛盾而分裂。2005年6月,苹果宣布WebKit开源,成为一个独立的项目。

除了Safari之外,排名第三的开源浏览器Chrome也是基于WebKit的,甚至Adobe的AIR和Creative Suite CS 5也使用它来渲染HTML。当然,使WebKit日益重要的是手机,目前大多数智能手机浏览器包括Android、iPhone、黑莓、Symbian都基于WebKit,据估计目前用户已经超过4亿。今天的WebKit项目开发团队中,除了苹果的工程师外,Google也是生力军,此外还有不少RIM公司的人,他们应该是来自被黑莓收购的Torch浏览器开发团队。

苹果还有几个在更专业的领域里非常重要的开源项目,比如编译器框架LLVM,异构编程框架OpenCL,服务发现协议实现Bonjour等。其中,LLVM现在已经成为语言创新的温床,看看都有哪些项目因此而如虎添翼吧。

了解了苹果在开源方面的贡献,你对它的印象是否已经有所改观?其实也不稀奇,苹果是一家工程师文化深厚的公司,开源本来就是应该是工程师文化的一部分。