如何使用obfsproxy搭配shadowsocks-nodejs安全高效的访问互联网 (转)

2012/12/21

(via http://sae.chenshaoju.com/?p=14)


该文章无版权,请随意转载或修改。由于编写仓促,可能会有瑕疵,请多多谅解。
由于WordPress的特性,两个 – 符号可能会变成全角的 —— 符号,实际操作时请注意替换。
本教程将指导您如何使用shadowsocks-nodejs作为代理服务器,以及使用obfsproxy作为伪装躲避检查。
本教程的服务端基于CentOS 6.2进行,客户端为Windows 7,由于本人使用的CentOS并非初始(干净的)环境,可能会有误差,同时在其他操作系统上的操作可能会略有差异,请注意按照实际情况更改配置。
------以下是服务端的配置------
首先搭建shadowsocks-nodejs。
shadowsocks-nodejs是基于Node.js开发的高效网页代理,可以非常方便的在客户端建立一个SOCKS5代理,帮助用户通过VPS或物理计算机访问网络。
用您喜欢的方式(SSH或任何其他方式)登录您的VPS或服务器的终端控制台,进入一个目录,比如/tmp/,然后从 https://github.com/clowwindy/shadowsocks-nodejs.git 下载shadowsocks-nodejs。
cd /tmp
git clone https://github.com/clowwindy/shadowsocks-nodejs.git
提示:如果提示没有git命令,请运行 yum install git (CentOS)或 apt-get install git (Ubuntu)。
下载成功后,进入shadowsocks-nodejs目录:
cd shadowsocks-nodejs
用ls命令,可以看到许多文件,我们先修改配置以符合我们的要求,用编辑器打开config.json文件:
vi config.json
我们可以看到5行内容(忽略花括号),按下Insert按钮开始修改。第一行(server)可以不用修改,这是提供给客户端的。第二行(server_port)是服务器的监听端口,通常推荐换一个端口以防被发现,请务必要记住,在本例中,设置为12345端口。第三行(local_port)也是客户端使用的,暂时不用修改,第四行(password)是密码,通常推荐修改默认密码增加安全性,修改好后务必要记住。第五行(timeout)是超时设置,通常不用修改。
更换好端口和密码后,请务必要记下这些信息,因为稍后配置会用到它。按下ESC,输入 :wq 存盘退出。
现在回到终端控制台上,我们可以将这些内容移动到一个合适的目录,比如,我把整个shadowsocks-nodejs放到了/var目录下:
mkdir /var/shadowsocks
mv /tmp/shadowsocks-nodejs/* /var/shadowsocks
我们需要记住这个路径(/var/shadowsocks),因为稍后会用到。
现在,需要下载node.js的运行环境,截至到本文发布时,node.js的版本是0.8.16,下载地址是: http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz ,如果该链接已经失效,或者您的Linux是AMD64的,请访问 http://nodejs.org/download/ 获得最新或对应的二进制包。
下载命令为:
cd /tmp/
wget http://nodejs.org/dist/v0.8.16/node-v0.8.16-darwin-x86.tar.gz
稍等片刻,下载完了,我们下回来一个压缩包,现在需要解压:
tar zfvx node-v0.8.16-darwin-x86.tar.gz
解压完毕后用ls命令查看,会有一个node-开头的目录,进入这个目录:
cd node-v0.8.16-darwin-x86
然后进入 bin 目录
cd bin
用 ls 命令看一下,是否能找到一个 node 的文件,如果能,那么将这个文件复制到 /usr/bin/ 目录下:
mv node /usr/bin/
复制完毕后,说明现在已经完成了配置 shadowsocks-nodejs 的服务端环境,还需要将其加入开机自动启动的 rc.local 里,先运行以下命令:
vi /etc/rc.local
回车后,会进入编辑器,按下Instre按钮,然后新起一行,添加(包括括号):
(node /var/shadowsocks/server.js >/dev/null 2>&1 &)
注意,我的server.js文件(shadowsocks-nodejs解压出来的)在之前移动到了 /var/shadowsocks/ 目录下,如果您修改了路径,那么请按照实际情况对路径进行修改。
然后按下ESC按钮,并输入 :wq 存盘退出。
现在,shadowsocks-nodejs的搭建已经完成了,只需要重启VPS或计算机即可立即启动,但是由于shadowsocks-nodejs存在一些特征,容易被不可抗力捕获并屏蔽,因此推荐再利用obfsproxy进行二次封装。
obfsproxy的主要目的是将各种网络通信封装为一种混杂通信--数据包经过加密,并且参杂了无用信息,使得不可抗力难以侦测到有效流量,从而降低被屏蔽的可能性。
obfsproxy需要较多的组件,首先先准备开发环境:
CentOS: yum install autoconf autotools-dev gcc git pkg-config libtool libevent-2.0-5 libevent-dev libevent-openssl-2.0-5 libssl-dev
Ubuntu: apt-get install autoconf autotools-dev gcc git pkg-config libtool libevent-2.0-5 libevent-dev libevent-openssl-2.0-5 libssl-dev
注意,CentOS会缺少许多包,或者版本不对,对于这种包只能一个个的编译。比如版本不对的 libevent ,通过Google这个名字可以发现官方网站是 http://libevent.org/ ,而官方网站也提供了下载链接: https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz ,因此需要下载回来,然后进行编译,下面的部分教程是将如何编译 libevent ,如果已经具备该包,或者您是对Linux比较了解的用户,请跳过。
------如何编译libevent------
首先,从 http://libevent.org/ 获得最新版本的下载地址,截至到本文发布时,版本是 2.0.21-stable ,我们使用wget命令下载:
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
然后解压:
tar zxvf libevent-2.0.21-stable.tar.gz
解压结束后,进入 libevent-2.0.21-stable 目录
cd libevent-2.0.21-stable
注意,这个地方有点不一样,如果您的操作系统是CentOS,并且已经安装了1.x版本的libevent,那么可能在obfsproxy的编译过程中找不到,所以需要编译到其他目录,比如/home/tord/event2/目录。
./configure –prefix=/home/tord/event2
make
make install
编译结束后,路径会到 libevent 会安装到/home/tord/event2目录,然后设置变量:
export libevent_CFLAGS=-I/home/tord/event2/include
export libevent_LIBS=”-L/home/tord/event2/lib -levent”
export LD_LIBRARY_PATH=/home/tord/event2/lib/
现在,就可以开始编译obfsproxy了。
-------如何编译libevent结束------
开发环境下载完后,从官方源获取obfsproxy的源码:
cd /tmp/
git clone https://git.torproject.org/obfsproxy.git
然后运行ls命令看看是否有一个obfsproxy的目录,如果有,则继续:
cd obfsproxy
./autogen.sh
./configure
make
make install
提示,如果缺少软件包,那么必须使用yum install或apt-get install 命令安装,或者Google缺少的软件包的名字,重新编译安装后,再尝试编译。
在编译完成后, obfsproxy 会存放在 /usr/local/bin/ 目录中。
由于我么之前指定了libevent的路径,因此还需要将libevent的库文件拷贝到公共目录中:
cp /home/tord/event2/lib/libevent-2.0.so.5 /usr/lib/
最后,重新打开 rc.local 文件:
vi /etc/rc.local
然后按下Insert按钮,进入编辑模式,新起一行,然后增加(包括括号):
(/usr/local/bin/obfsproxy obfs2 –dest=127.0.0.1:12345 server 0.0.0.0:54321 >/dev/null 2>&1 &)
注意,上图中的 12345 是在shadowsocks-nodejs的config.json文件中配置的端口,而 54321 是 obfsproxy 负责接收和发送混杂数据的端口,推荐按照实际情况为obfsproxy设置一个新端口。
确认无误后,按下ESC键,并输入 :wq 存盘退出。
现在,只需要重启VPS或计算机即可让其生效。
提示:对于CentOS 6.2,可能还需要修改 /etc/sysconfig/iptables 文件允许obfsproxy的端口通过。
而对于没有端口防火墙的用户,推荐使用iptalbes屏蔽shadowsocks-nodejs的端口(本例中为TCP 12345),以防止被外界扫描到。
------以上就是服务器端的配置------
下面,开始客户端的配置(Windows)。
首先,从Tor官方网站 https://www.torproject.org/projects/obfsproxy.html.en 下载包含Obfsproxy的Tor包,当然,我们只需要用里面的Obfsproxy。
截至本文发布时,Windows的包的下载地址是 https://www.torproject.org/dist/torbrowser/tor-obfsproxy-browser-2.4.6-alpha-2_en-US.exe ,请按照实际情况下载。
下载回来是一个7-Zip自解压压缩包,解压后会生成四个目录和一个可执行文件,我们将App目录里的东西复制到一个合适的位置(比如 D:\FQ\ )。
访问 http://nodejs.org/download/ ,下载Windows的程序包,截至到本文发布时,x86的下载包是 http://nodejs.org/dist/v0.8.16/node.exe ,AMD64的下载包是: http://nodejs.org/dist/v0.8.16/x64/node.exe ,直接将下载回来的文件放入之前所指定的目录即可( D:\FQ\ )。
访问 https://github.com/clowwindy/shadowsocks-nodejs ,点击界面上的ZIP按钮,将压缩包下载回来解压,将shadowsocks-nodejs-master文件夹中的内容也移动到之前设定的目录( D:\FQ\ )。
用记事本打开config.json文件,将password行修改为之前所指定的密码,server_port和server_ip无需修改。
注意:如果1080端口冲突,请更换一个端口,并在稍后修改浏览器的代理服务器的地方设置为您所指定的端口。
提示:如果您有整理癖,请按照您的习惯放置,不过在稍后的批处理中,需要按照指定路径进进行访问。
进入该目录,右击空白区域,新建文本文件,并设定一个名字,然后双击打开,输入:
START node.exe local.js
START obfsproxy obfs2 –dest=111.111.111:54321 client 127.0.0.1:8388
EXIT
注意:上面的111.111.111.111是您的VPS或服务器的IP地址,54321是您的服务器上的obfsproxy端口,如果您修改了,请按照实际情况填写!
然后保存并退出,并将新建的文本文件的扩展名修改为.BAT。
提示:如果看不到扩展名,请打开我的电脑(或计算机),点击工具菜单(如果看不见,先按一下Alt按钮),点击文件夹选项,转到查看选项卡,并取消“隐藏已知文件类型的扩展名”,然后确定,就能看到刚才的文本文件末尾多出来了 .txt ,将其修改为 .bat 即可。
双击所建议的FQ.BAT,会自动打开两个新窗口,这说明启动成功。
最后,打开您的浏览器,配置代理为SOCKS5,IP 127.0.0.1 ,端口1080即可(或者您指定的端口)。
以上就是本教程的全部部分。
补充1:如果不在乎速度,而在乎安全,可以加上 –shared-secret=PASSWORD 参数,其中PASSWORD是设定的obfsproxy协商密码,比如:
服务器:
(/usr/local/bin/obfsproxy obfs2 –dest=127.0.0.1:12345 –shared-secret=PASSWORD server 0.0.0.0:54321 >/dev/null 2>&1 &)
客户端:
obfsproxy obfs2 –dest=111.111.111:54321 –shared-secret=PASSWORD client 127.0.0.1:8388
我加上了加密参数后变得很慢(比SSH还慢),可能在不同的环境下可能不一样,请酌情测试。
特别感谢:
@jimmy_xu_wrk
@radaiming
@fdb713
参考资料:
https://github.com/clowwindy/shadowsocks-nodejs/wiki
http://nodejs.org/api/
https://www.torproject.org/projects/obfsproxy-instructions.html.en
https://trac.torproject.org/projects/tor/ticket/5009#comment:17
http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/
http://www.cnblogs.com/bluesky23/archive/2012/11/30/2796251.html

Related Posts