创建一个加密的代理服务器

众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用ssh tunnel实际上效率是很低的,使用GAE是朝不保夕的,使用VPN是时快时慢的,因为ssh不是为了这个目的而开发,GAE也不是,VPN就更不是为了高速访问而设置的了,今天我们要介绍的是具有普遍的意义的代理服务器squid和stunnel,力求让我们的穿越达到一个保持高速访问,但又经过了加密的境界。

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

1,一台运行在自由世界的服务器,或者虚拟机,比如美帝或者香港。
2,这台服务器上安装了squid,或者可以安装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如果没有流量限制,那显然是一场悲剧。

8 thoughts on “创建一个加密的代理服务器

  1. Creke

    很多人用SSH是因为他的解决方案比较成熟,有自动化脚本。
    不知道这种解决方案的并发性能怎么样?

    Reply
  2. fish

    hi.
    我运行squid时,出现错误提示:

    # /usr/local/squid/sbin/squid
    2013/03/08 03:02:16| aclParseAclList: ACL name ‘ssl::certUntrusted’ not found.
    FATAL: Bungled Default Configuration (postscriptum) line 1: sslproxy_cert_sign signUntrusted ssl::certUntrusted
    Squid Cache (Version 3.3.2): Terminated abnormally.
    CPU Usage: 0.012 seconds = 0.000 user + 0.012 sys
    Maximum Resident Size: 19648 KB
    Page faults with physical i/o: 0

    看到此页面http://www.squid-cache.org/Doc/config/acl/关于Changes in 3.3 acl的说明,但不明白什么意思,可否解释一下以及如何解决这个错误?

    Reply
  3. StanleyZ

    非常感谢.
    一开始低估了GFW, 用Squid架了个代理, 发现虽然可以用, 但是被屏蔽的网站一样连不上.
    抓包才发现居然遭到了RST攻击. 真是小瞧了GFW…

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *