还Shadowsocks一个清白


发这篇文章的原因基于品葱有大量的用户因为自己开的shadowsocks被封,机场三天两头用不了,或是在别的地方(例如v2ex)看到别人吹捧v2ray/ssrr 贬低shadowsocks。再加上党国爆出了一些所谓人工智能检测shadowsocks的论文,导致很多人认为shadowsocks已经是一个不安全的翻墙工具。因此在这里对shadowsocks配置做一个简单的科普。

先上结论,shadowsocks并没有失效,党国也没有手段来破解shadowsocks的加密,那篇基于lstm的人工智能论文在专业人士看来完全就是笑话,请敬请放心使用,如果你的ss用不了,请按照我以下列出的几部分一一进行检查:

【shadowsocks配置部分】

1、打开你的shadowsocks客户端,在加密那一栏里你会看到接近20种不同的加密算法,在其中可以粗略的分为AEAD加密和非AEAD加密,具体技术细节有兴趣了解的可以自行Google。结论就是现在请务必使用AEAD加密的算法(chacha20-ietf-poly1305、xchacha20-ietf-poly1305、aes-128-gcm、aes-192-gcm、aes-256-gcm),目前xchacha20-ietf-poly1305和aes-256-gcm是最佳的选择,由于各大平台的cpu现在对aes算法都有较好的优化,我个人推荐aes-256-gcm。

2、关于客户端的选择,应该去哪里下载shadowssocks客户端呢?答案是github,请不要去任何非github平台下载ss客户端(如果你买的机场不给你服务器相关信息,需要账号密码登录专用客户端,那就没办法了)。在这里要特别说一下iOS平台,iOS没有官方的shadowsocks客户端,很多免费应用都不支持AEAD算法,请买礼品卡在外区购买shadowrocket,或者使用免费的outline。

3、在自行配置shadowsocks服务器的时候,很多攻略仍然写的是基于Python的shadowsocks-server,请不要再参考这些攻略!!!基于python的那个版本已经三年没有更新了,很多教程甚至还在用五年前的2.8.2版,请尽快转用C语言的shadowsocks-libev,github地址:https://github.com/shadowsocks/shadowsocks-libev


【关于党国封禁shadowsocks服务器的策略】

1、当你shadowsocks发现用不了的时候,不要慌张,首先你要做的是排错,确定是哪部分出了问题。党国封杀服务器一般分为ip封杀和端口封杀,请务必先确认是服务器ip地址还是服务器ss端口被墙。要怎么确认呢?打开你电脑的cmd,先ping一下你的服务器地址,看看还通不通,如果发现是通的,使用命令 telnet 你的服务器地址 你的服务器端口(例如:telnet 1.1.1.1 8838)如果你服务器能ping通但是telnet你的服务器shadowsocks端口不通的时候,更换端口就可以了。

2、终于要提到党国的检测方式了,在文末我会放一篇相关文章来进行论证,在这里我还是只放出结论。党国封杀你服务器现在较为通用的方法是主动嗅探,举例来说,就是当发现一个让他怀疑的流量时,gfw会模拟一个shadowsocks请求发往你服务器的那个shadowsocks端口,由于密码是错的,这时候你的服务器会返还一个类似于密码错误的回包,这样gfw虽然无法连接你的服务器,但是他就可以猜测这台服务器是用来翻墙的。这就是主动嗅探的基本原理,只要你流量足够大,连接的人足够多,或者你服务器的ip是著名翻墙vps运行商(所谓脏ip),就有极大可能被封禁。在这里你可以看出,党国没有解密你的包,仍然无法知道你访问了什么网站,是不是真的用来翻墙,但是由于可能性很高,就被封禁了。

3、主动嗅探比起技术方式更像是一种社会工程学原理,无论什么样的翻墙技术手段,都会中招,并不是shadowsocks存在技术漏洞,而是党国对ss的回包已经很熟悉了而已。而这一点,我们完全可以通过技术手段进行避免。


【为你的服务器添加访问白名单】

1、如果你服务器只允许特定的ip进行访问,那党国防火墙的主动嗅探也就失去了作用,因为党国不知道你允许了哪些地址,所以它所有尝试嗅探的操作都会被你服务器的防火墙(以其人之道还治其人之身 笑)给拦下,相当于还没有到你ss服务已经被你的服务器给拦下来,这种拦截是不具备特征的,而在现实中各大公司的服务器也是这么操作的。例如你是不可能访问Google的内部服务器,因为Google限定了可访问机器的ip。

2、具体操作方法你可以使用iptables命令
iptables --append INPUT --protocol tcp --dport 1080 --jump DROP

先禁止所有人访问你的ss 1080端口
iptables --append INPUT --protocol tcp --src 1.1.1.1 --dport 1080 --jump ACCEPT

这条命令的意思是仅允许1.1.1.1访问你ss 1080端口
service iptables save
service iptables restart

记得保存和重启服务哦

3、我们现在都是动态ip,没有指定的地址要怎么办呢?事实上没办法,所以我建议你再开一台服务器做流量的转发,然后你ss服务器只允许你转发服务器的ip地址,如果说转发服务器在国内,就会形成一个点对点的ss访问,只有你转发服务器到你ss服务器之间过一次墙,流量又是两个固定ip之间在访问,对于隐蔽流量是大有裨益的,至于linux怎么配置端口转发这里就写不下了,欢迎Google。


【正文部分:Shadowsocks是如何被检测和封锁的】

这篇论文写的非常好,希望所有人都去看一看,对党国封锁机制做了很具体的实验


没有评论: