Pages

Thursday, 30 July 2015

OpenVPN开启tls-auth降低DDoS风险


最近搭建了到美国的OpenVPN隧道。 但是在实际的使用中,容易遭受到DDoS的攻击和莫名其妙的连接已重置,Google了一下,找到了解决方案:开启OpenVPN的tls-auth功能。
服务器端配置
选择一个你想放置TLS协商的Key文件的位置(比如我放在 /etc/openvpn/easy-rsa/2.0/keys/ 目录下),进入该目录,运行:
openvpn –genkey –secret ta.key
运行结束后,可以用cat命令看一下是否存在该文件。
打开OpenVPN的配置文件(注意,由于配置不一致,请按照实际情况输入路径和文件名)
vi /etc/openvpn/easy-rsa/2.0/conf/server.conf
打开后,用 /tls- 命令搜索“#tls-auth ta.key 0 # This file is secret”行,并去掉前面的注释,然后将ta.key就改为你所放置 ta.key 文件的路径。我的配置结果是:
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0 # This file is secret
然后重启OpenVPN服务。
客户端配置
将 /etc/openvpn/easy-rsa/2.0/keys/ta.key 文件通过WinSCP或任何你喜欢的方式拷贝回本地,放在OpenVPN所在目录的config目录下,然后打开你的OpenVPN配置文件(这里以client.ovpn为例)。
在client.ovpn文件中找到 #tls-auth ta.key 1 行,并去掉前面的井号,然后保存并退出编辑器,这样就完成了配置。
Android配置
如果你使用的是cyanogenmod 7,只需要修改一下OpenVPN的配置即可。首先将ta.key文件拷贝到存储卡里,然后进入“虚拟专用网设置”,按住你的OpenVPN配置文件不 松,再点击修改网络,然后按Menu键,点击高级,选中 TLS-Auth ,并在 TA key file location 里指定你拷贝到存储卡里的 ta.key 文件的目录(比如 /mnt/sdcard/openvpn/ ),然后将 Tls-Auth Key direction设置为1,然后按返回退出即可(如下图)-http://files.blogcn.com/wp06/M00/09/76/wKgKDFCqXGEAAAAAAAGJWHOHtVY551.png


以前GFW封vpn一般都是直接封域名和IP,这次GFW封VPN是封的IP+端口,也就是特定IP上封锁特定端口(或特定端口上封锁特定IP)。
这样就导致 IP可以ping通,其他端口正常使用就是VPN端口被封连接不上,既不是以前的封锁IP也不是封锁所有IP的某个端口,这种封锁对VPN针对性很强,误 杀减少,有利于加大封锁规模。
这次openvpn也受影响严重,即使是自己VPS搭建的OpenVPN在正常使用一段时间后可也能就会被封锁端口,然后切换OpenVPN为其他 端口连接时又恢复正常,不过使用一段时间还可能被封锁,所以说其应该是根据某些特征封锁,并且GFW应该有自动学习和记忆功能。
感觉是和封tor网桥类似,毕竟他们的伪装还存在缺陷,具体是不是这样也不清楚,毕竟GFW的运作是黑箱作业。GFW里有高人,国家有钱就能找到有本事的人来搞网络封锁。正如推友@gfwrev所说:
“GFW对于网民无论是在网络控制上还是政治保障上都有压倒性的优势。它唯一的弱点就是它一切动作的基本还是检测。既然如此,继续这个猫鼠游戏才是 争取空间的最好方式。从这些年GFW技术的巨变不难看出,这只猫的实力越来越强。我们的时间很有限,不能浪费在无谓的事情上。”
当然对于此类干扰除了不停换端口或者上文的用TCP协议的TPKT协议重叠的端口(比如TCP 3389)并启用TLS-AUTH防止墙主动探测外也不是说只能坐以待毙,OpenVPN的wiki上给出另外两种方法,有兴趣的可以研究下是否有 效:https://community.openvpn.net/openvpn/wiki/TrafficObfuscation