Category: Tech

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

    众所周知,在大陆不能自由的访问互联网,为此人们想出了各种办法,真是八仙过海各显神通,然而,很多办法是既绕圈子,又没有普遍应用的意义,使用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如果没有流量限制,那显然是一场悲剧。

  • 既狠不下心来拒绝别人,又觉得自己不情不愿

    小萝莉在扣扣上纠结着要不要见一个追她的同学,这位男同学老是找借口跑到她工作的地方来,就是,既狠不下心来拒绝别人,又觉得自己不情不愿,金牛座似乎不至于这样纠结吧。

    有时候我觉得方校长其实很郁闷的,因为当他接受那些不可能完成的任务时,心里一定在暗暗的骂领导:你MB的加密数据老子又解不了密,怎么去封,封毛啊。但又不得不对领导满脸堆笑,说我们一定加大人手,努力攻关,争取不放过任何一个漏洞!今天补充说一下关于vpn的问题,因为我明白过来,DNS强奸并不是简单的强奸了那么一些个域名,而是因为vpn方式的多样化,l2tp,ipsec,pptp,其中,某些方式或某些设置,是会调用本地DNS以加快网络速度的,而被强奸的DNS,则再次充当了这一重要de流氓角色,虽然我已经使用了一段时间的vpn,也已经将国内流量和国际流量分离,但还是要提一下在形势越来越严峻的国内网络环境中越来越流行的ssh tunnel,其实类似的方式早已有之,并不是很罕见,在近十年前的XX功破网软件中,stunnel就已经被广泛应用,甚至XX网的建议是让大家使用这种tunnel方式以保证访问的安全,这里要声明一下,其实很多人使用这样那样的方式穿越,只是为了看一眼武藤兰和高树玛丽亚,而非神马贵国天朝之类。总之呢,opensslopenssh的应用,其实是一个很传统的东西,并非什么新生事物,那么,为什么它们没有被封掉呢?

    因为他们是不能被封掉的,运行在443端口,基于ssl的web访问构建起了当今互联网的页面安全,运行在22端口,基于ssh的服务器访问构建起了当今互联网之一切的基石,没有ssl和ssh的互联网时代,存在过,但那个时候中国大陆还没有互联网。当今的支付网站,银行网站,无一不使用ssl来加密用户对其网页的访问,以防止可能的金融信息泄漏,当今的任何一个网站,无一不使用ssh来进行服务器的管理和维护,以避免明文通信可能造成的服务器风险。很显然,基于这个事实,这两种类型的加密访问,是永远也不可能被封掉的,所以,这两个月以来gmail的不正常表现,也只能理解为流量限制,而非基于ssl层面的屏蔽。

    前段时间CNNIC有了颁发全球服务器证书的资格,一众惊呼,ssl劫持变为可能,甚至提出删除各种浏览器中的CNNIC根证书,虽然说,这种劫持是完全可能的,但我不认为它会发生,这种劫持首先需要伪造一个网站出来,至少是一个登录入口,然后还要篡改DNS,最后再颁发一个虚假的证书,for what purpose呢?仅仅是为了获取你的用户名和密码?这也太TM费油了吧……制作一个特定的病毒,直接伪造一封熟人的mail给你不是更方便,像雅虎网易这些邮件运营商,肯定是相当乐意合作的,要我选,肯定不会用第一种方法来获取信息。

    目前被广泛使用的ssh穿越,有它的局限性,socks连接数量,响应速度等等,在服务器上架设一个http proxy会很好的解决这些个问题,缓存的添加能够更好的提升用户体验,但对于一些应用而言,http proxy并不能满足需求,可是,很显然,绝大多数人的需求仅仅是基于http的,是基于网站的,ssh穿越已经能够很好的满足他们的需求,同类的方法还有基于stunnel的proxy加密,可以将将加密之后的代理服务器运行在80或者443端口以避免通信被窃听(http://www.stunnel.org/static/stunnel.html),这大概是唯一类似于ssh tunnel的方法,因为vpn已经不是在端口的层面进行加密了。

    但是,并非所有的人都有一台在美国的虚拟主机或者VPS,也并非所有的人都认识那些有一台在美国的虚拟主机或者VPS的人,所以,基于GAE的代理应用,层出不穷,但我粗略的看了一下,都没有用到公开的openssl库,是不会用呢还是GAE有限制,这个就不得而知了,由于GAE的操作难度较大,而虚拟主机或者VPS的价格,随着美元贬值,变得越来越容易让人接受,以及GFW三天两头对GAE的整肃,我觉得GAE不会流行。

    至于vpn,不用说,跨国公司在大陆都有vpn,需要连接到总公司进行日常办公,要保持经济增长,vpn就绝不可能会被屏蔽掉,构建vpn虽然需要一定的技术积累和良好的英文理解能力,但是很显然,vpn是最为完美的穿越方式,它将整个路由通信转换至加密隧道,当然,我们可选某些IP地址依然使用原来的路由,我觉得路由这两个字真是恰如其分,告诉非死不可的IP你从那个路由走,告诉腾讯的IP地址你从这个路由走。

    由于DNS被强奸的缘故,在使用Google public dns或者OpenDNS的时候,需要指定DNS的IP地址通过vpn路由走,然而,这样有一个问题,就是,由于DNS的查询和路由都通过了vpn,使得它的速度不够快,那么,建立一个本地的DNS缓存就很有必要,如果是使用路由器进行穿越,那么这个问题不用考虑,因为路由器上有DNS缓存,如果是使用PC进行穿越,那么需要在操作系统中中安装DNS缓存软件,由于我现在已经改用Linux,一般来说我建议使用DNRD,至于网上普遍传播的DNSmasq,我觉得它的体积太过庞大,DNRD全名是Domain Name Relay Daemon,它小巧精致,兼具DNS缓存和DNS负载均衡的功能,运行起来很简单,一行命令而已,将其加入rc.local即可:

    /usr/sbin/dnrd –server=8.8.4.4 –userid=www

    表忘记将/etc/resolv.conf中的DNS服务器改成127.0.0.1喔~

  • cifs mount under ubuntu

    很显然,由于ubuntu中太过智能化的automount,导致了mount之后我找不到目录在什么地方,我嚓!只好卸载之后重新在cmd里面mount:

    mount -t cifs //192.168.1.9/photo /mnt/photo -o username=kenbaby,password=kenbaby,iocharset=utf8

    我上次给洋人反馈的问题得到了证实,当然,这是毫无疑问的,虽然出了一个bug修复的包,不过这种程序在后台feedback的行为我还是比较歧视,所以我决定继续使用屏蔽其域名的办法,但是,这种方法适用的范围不广,大部分使用虚拟主机的用户必须update这个压缩包,虽然我没有更新,不过相信后台的操作是没有取消,大抵是增加了超时或者连接次数,时效的限制。

    Down Time and Framework Update