方院士近况(二)

唉。

1. obfsproxy
在编译安装 obfs 之前需要安装下面这些编译工具:
# apt-get install automake build-essential pkg-config

安装最新版本的 libevent2:
# mkdir /usr/local/libevent2/
# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
# ./configure --prefix=/usr/local/libevent2/
# make && make install

obfsproxy server 端的部署:
# git clone https://git.torproject.org/obfsproxy.git
# cat /etc/bash.bashrc

export libevent_CFLAGS=-I/usr/local/libevent2/include
export libevent_LIBS="-L/usr/local/libevent2/lib -levent"
export LD_LIBRARY_PATH=/usr/local/libevent2/lib
# ./autogen.sh
# ./configure
# make
# make install

假设服务器监听本地的 ssh 65534 端口:
# obfsproxy --log-min-severity=info obfs2 --shared-secret=password --dest=127.0.0.1:65534 server 210.XX.XX.XX:2222

对于客户端,mac 下使用 brew 安装:
# brew tap mtigas/tor
# brew install mtigas/tor/obfsproxy
# obfsproxy --log-min-severity=info obfs2 --dest=210.XX.XX.XX:2222 --shared-secret=password client 127.0.0.1:8022
# ssh [email protected] -p 8022 -D 65533

obfs 其实是一个单独的项目,除了给 ssh 做混淆,还可以给 vpn 等做混淆,这两篇(1, 2)文章还给出了 vpn 的混淆方法。


2. shadowsocks
除了使用 obfs 之外,还 g 到一个叫 shadowsocks 的项目,看 README 操作很简单,实际也确实很简单:
在 server 端修改 config.json:
server          your server ip or hostname
server_port     server port
local_port      local port
password        a password used to encrypt transfer

运行:
# nohup python server.py > log &

client 配置跟 server 一样,运行:
# python local.py

修改 ff 的 socks5。shadowsocks 默认使用的是 multi-thread ,如果需要提供性能的话(实际使用的过程中,没有明显感觉到差异),需要在服务端和客户端同时安装 gevent(1, 2)。

服务端:
# apt-get install libevent-dev
# apt-get install python-all-dev
# easy_install greenlet
# easy_install gevent

以上是 10.04 以及之前的,10.10 以后的可以直接使用 apt 安装:
# apt-get install python-gevent

客户端:
$ brew install python
$ brew install libevent
$ export CFLAGS=-I/brew/include
$ pip install gevent-0.13.6.tar.gz

3. sshxor
除了上面的几个,还有个叫 sshxor 的项目,同样是做混淆的,用起来蛮简单的,同时在 server, client 下载 sshxor.pl,a+x。
server 上安装 xinetd,起一个新的 xinetd.d/ssh:
service sshxor
{
        flags       = NAMEINARGS
        socket_type = stream
        protocol    = tcp
        wait        = no
        user        = nobody
        port        = 13107
        server      = /usr/local/bin/sshxor.pl
        server_args = sshxor.pl 127.0.0.1 22
}

# /etc/init.d/xinetd restart

在客户端的 .ssh/config 上加上类似下面的指令:
Host xxxx
        hostname your_ip
        IdentityFile ~/.ssh/id_rsa
        user jaseywang
        port 13107
        ProxyCommand ~/sshxor.pl %h %p

连接即完成:
$ ssh xxxx

aur 上有现成的 obfs-ssh 可以安装,实现的细节跟上面的不大一样,但是原理类似。

除此之外,这里还有其他(1, 2)的几个项目,或者可以自己修改 openvpn 的协议,没空折腾了,有需要的自己看看。