利用obfsproxy混淆任意流量
本文原地址: http://www.feitianzhi.com/boke/index.php/archives/19/
转载请注明出处,有疑问或错误请发邮件到xiaozhi@fslib.org 或加QQ群:869598376
本文纯探讨技术实现,请大家抱着学习交流之目的进行阅览。
测试环境:
服务器端:CentOS 7.0、openvpn-2.3.10
客户端 :Fedora 23
服务器端安装与配置:
安装obfsproxy
1、[root@1st ~]# yum install gcc python-pip python-devel
2、[root@1st ~]# pip install obfsproxy
3、[root@1st ~]# obfsproxy
usage: obfsproxy [-h] [-v] [–log-file LOG_FILE]
[–log-min-severity {error,warning,info,debug}] [–no-log]
[–no-safe-logging] [–data-dir DATA_DIR] [–proxy PROXY]
{managed,obfs2,dummy,obfs3,scramblesuit,b64} …
以上三步,我们就完成了obfsproxy的安装工作,接下来我们开始配置。obfsproxy一般使用obfs3或者scramblesuit模式,scramblesuit是obfs3的加强版,使用密码加密。这样就无法模拟obfs客户端来探测被混淆的是什么。下面以scramblesuit作为示范。
注意:scramblesuit的密码必须为BASE32字符。
BASE32字符是由:ABCDEFGHIJKLMNOPQRSTUVWXYZ234567组成,且必须为32位。
[root@1st ~]# obfsproxy –data-dir ~/.obfs/ scramblesuit –dest 127.0.0.1:1194 –password ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 server 0.0.0.0:1234 &
由于我们是通过obfsproxy来实现服务器端与客户端之间的加密通信,所以openvpn不用监听在服务器端的IP地址上,可以监听在127.0.0.1这样的本地地址。上面的命令中:127.0.0.1:1194就是需要被混淆的端口(协议),0.0.0.0:1234是混淆后对外监听的端口。如果不需要后台运行则去掉最后的 & 。
运行成功后应该会提示:
2015-08-21 22:54:12,282 [WARNING] Obfsproxy (version: 0.2.13) starting up.
2015-08-21 22:54:12,282 [ERROR]
Do NOT rely on ScrambleSuit for strong security!
至此服务端已经配置完成。
客户端安装与配置
关于在Windows和Fedora 23下的openvpn客户端配置,不再本文的讨论范围之内。
Windows客户端
首先:需要在python官方网站上下载你windows对应python版本,本文中下载的是python-2.7.11.amd64,因为测试系统是windows 7 64位。
其次:需要在http://www.voidspace.org.uk/python/modules.shtml这个网站下载pycrypto-2.6.win-amd64-py2.7,如果没有这个文件,将会在安装obfsproxy是报错。
第三:在正确安装上述两个软件后,需要从新启动一下你的操作系统。
第四:在命令行状态下执行:C:\>pip install obfsproxy,如果一切顺利,就可以执行下面的命令了:
c:>obfsproxy scramblesuit –dest xxx.xxx.xxx.xxx(此处是openvpn所在服务器的IP地址):1234 –password ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 client 127.0.0.1:56789 &
fedora 23客户端
首先,用dnf命令检查python-crypto.x86_64、gcc.x86_64、redhat-rpm-config软件包是否安装,如果没有安装,请参照下面的命令进行安装。
[root@f23 ~]# dnf install python-crypto.x86_64
[root@f23 ~]# dnf install gcc.x86_64
[root@f23 ~]# dnf install redhat-rpm-config
[root@f23 ~]# sudo dnf install redhat-rpm-config
此命令解决:gcc: error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory的报错
[root@f23 ~]# pip install obfsproxy
[root@f23 ~]# obfsproxy scramblesuit –dest xxx.xxx.xxx.xxx(此处是openvpn所在服务器的IP地址):1234 –password ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 client 127.0.0.1:56789(此处的端口号何以随意指定,不超出范围就好)
在本地客户端,我们通过obfsproxy将所有流量发给服务器端obfsproxy监听的端口,再由obfsproxy重定向到 OpenVPN,这样OpenVPN客户端就不知道服务器IP是多少,没办法对到 OpenVPN 服务器的流量进行特殊处理,所以我们需要手动将到服务器的路由固定下来,假设你的服务器端IP为xxx.xxx.xxx.xxx,本地客户端的网关地址是192.168.1.1,我们以fedora 23为例,添加路由的命令:
[root@f23 ~]# route add -host xxx.xxx.xxx.xxx gw 192.168.1.1(这一点非常重要)
OK,万事具备,祝大家有一个愉快的开始!