【还Shadowsocks一个清白】Shadowsocks是如何被检测和封锁的,兼谈ss配置策略

Shadowsocks是如何被检测和封锁的
作者: Anonymous, Anonymous, Anonymous, David Fifield, Amir Houmansadr
日期: 2019年12月29日,星期日
English Version: How China Detects and Blocks Shadowsocks
论文地址:https://gfw.report/blog/gfw_shadowsocks/zh.html
(只想看是如何被检测和封锁的点这里,后文是兼谈ss配置策略)


发这篇文章的原因基于品葱有大量的用户因为自己开的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是如何被检测和封锁的】

这篇论文写的非常好,希望所有人都去看一看,对党国封锁机制做了很具体的实验
Shadowsocks是如何被检测和封锁的
https://gfw.report/blog/gfw_shadowsocks/zh.html


【最后私货部分】
1、我感觉还有很多细节没写到,之后尽力补充
2、个人认为多用户、多地区使用ss是相当容易引起gfw的操作
3、个人认为ssr的tls混淆属于掩耳盗铃,反而更容易让gfw发现
4、本文用了大量比喻,试图用人话来说明计算机术语,不周全的地方望专业人士见谅
54
分享 2020-01-12

43 个评论

SS作者一开始也说过,SSR的混淆处理更容易被识别到
@某人临时小号
这是从一篇论文谈开的,为什么要转新手区不能放深度讨论?

由于原文太长,并且我试图兼论ss配置问题,所以没有全文转载论文

我认为转新手区依据不足
SSR貌似不是开源的?


刚开始不是,被喷了就老实了
这是从一篇论文谈开的,为什么要转新手区不能放深度讨论?由于原文太长,并且我试图兼论ss配置问题,所...

已经给您的贴子加精。目前品葱在整理文章,技术贴暂时分在新手区
已经给您的贴子加精。目前品葱在整理文章,技术贴暂时分在新手区

啊 了解了.. 感谢加精
俺以为,要查封一个翻墙服务器ip甚至定位到个人其实很简单
只需要有关部门和国产app. 的公司
【联合执法】
其实这并不难
假设你手机翻墙软件设置的是全局翻墙,
登录的QQ和微信是用的外国ip,和你的gps定位不符合(微信和扣扣都是需要获取位置权限的),那么就可以判定该用户翻墙!然后直接精准封锁該ip,所以说,手机上开国产软件相当于 【实名翻墙】
获取一个静态IP,选择有两个:购买国外的另一台VPS,然后再连接运行ss的VPS,那么在连接国外的转发VPS本身就需要过墙,部署ss就失去了意义。而使用国内的VPS,又面临着提供墙内VPS的商家有可能监控你的后台进程,并且无疑会把你的信息交给朝廷的风险。。。
这是悖论啊
俺以为,要查封一个翻墙服务器ip甚至定位到个人其实很简单只需要有关部门和国产app. 的公司【联合执...

目前情况下党不在乎一般人翻墙,只在乎你有没有在社交媒体传播言论。如果你twitter发言被网警发现才会出现联合执法。每个翻墙都喝茶的话那几乎所有大学生都得去了。。
我来补充几点:AES-gcm,全称:galois counter mode。一种计算消息验证码(mac)的加密模式,mac提供一种密码校验和。

128,192,256的区别在密钥长度和轮数,所以在TLS 1.3会用AES-128-gcm实现数据流快速传递。

个人建议:设置预存密钥长度要超过200位二进制数,用于抵御量子计算机Grover算法。
感谢分享

关于SS+TLS,个人的实验结果是

新搭的服务器,从头开始就用TLS,那么这个SS基本不会被爆破
如果从中途开始用TLS,那么连通性会增加,但仍然有被爆破的可能
获取一个静态IP,选择有两个:购买国外的另一台VPS,然后再连接运行ss的VPS,那么在连接国外的转...

被墙内vps商家监控和被电信监控感觉上没差别,不出啥事墙内vps商家不会莫名其妙来查你,目前的任务是如何不被gfw的脚本把服务器给墙了。ss翻墙风险还是很大的,要抓还是比较容易
俺以为,要查封一个翻墙服务器ip甚至定位到个人其实很简单只需要有关部门和国产app. 的公司【联合执...

其实很多国产手机的系统本身就是有后门的。
其实很多国产手机的系统本身就是右后门的。


哦…我想看看你所指👆的后门位置和代码段。
可是我翻墙的手机没有国产软件,而且现在shadowsocks,v2ray可以设置分应用代理以及绕过大...

你的安全措施做的很到位,可惜普通翻墙网民根本就不懂这些,一边翻墙一边很起劲的玩国产软件
https://github.com/cbeuw/Cloak这个SS插件了解一下

已经换V2+ws+tls了。SS只是备用连接,就用之前的simple-obfs算了。
都说了按流量特征来识别还扯什么加密嗅探,
只要流量特征符合gfw就封锁,它们才不会解密叻,嗅探更是不可能,它封你需要确认吗?
通篇都把gfw想的这么绅士,可惜gfw没那么幼稚啦
哦…我想看看你所指👆的后门位置和代码段。


这是常识吧。http://forums.internetfreedom.org/index.php?topic=22511.0

还有最近抖音海外版的案子。

你可能以为后门就是远程操作。对不起,未经许可发送统计信息,就算是匿名的,也算后门。更何况国产手机系统发送统计信息都是带设备识别码的。
实际上也不完全如此,shadowsocks自带一个叫privoxy的工具,这个工具的用途就是可以根据发起连接的软件或者被连接的服务器来决定是否对这个连接进行代理。

比如,用户可以设置“仅代理访问外国ip的连接”和“仅给youtube、opera提供代理”。由于国产软件肯定不会请求国外服务器,且它们也不在你设置的分应用代理名单中。因此理论上并不会出现“从外国的代理服务器登录,GPS定位却在国内”的情况。
目前情况下党不在乎一般人翻墙,只在乎你有没有在社交媒体传播言论。如果你twitter发言被网警发现才...


你高估了翻墙的大学生的数量
这篇文章写的很好。
根据机场主的反馈。现在根本无法甄别ss的流量。只是因为脏IP+流量,就会封掉。
gfw会模拟一个shadowsocks请求发往你服务器的那个shadowsocks端口,由于密码是错的,这时候你的服务器会返还一个类似于密码错误的回包,

这是你的主观臆想,shadowsocks 早就不会返回任何错误。同时也证明你没仔细阅读论文。
这是你的主观臆想,shadowsocks 早就不会返回任何错误。同时也证明你没仔细阅读论文。

我他妈外行不懂重放攻击是什么意思,反正事实上就会被他妈的嗅探,符合人身攻击条件,你可以举报我了傻逼
哦…我想看看你所指👆的后门位置和代码段。

明面上 系统自带的各种安全/云服务就是 比如明面上出于病毒检测目的,上传你的一些应用信息,至于后台会不会滥用 你说呢?
其次如果有那种间谍后门的话 会很巧妙的 隐藏 加密 并编译成机械码,一般情况下 是很难找到的
准确来说 SSR/SS 是党国留的一个口子
如果想要,完全可以全部封掉

如果想要在国内科学上网的话 有一个口子
去大型外企工作,大型外企 一般会拉几条的光纤到境外
途中无审查,下班了 也允许员工用vpn连接公司网络使用
国内服务器太贵了,尤其是带宽
国内服务器太贵了,尤其是带宽

阿里云基本上1块钱1g,最低配月租费也不高,我觉得是可以承受的,非常省心
如果退而求其次,只允许某些ip段访问1080端口呢?如何设置?
这篇文章的末尾也提到了:"我们仍不清楚主动探测与Shadowsocks服务器被封之间的关系"。也就是说研究者依然没有搞清到底GFW主动探测到了什么就会引发阻断和封锁。下面说说我个人的看法:传统的shadowsocks及其各种衍生品靠的都是给数据加密来过GFW,简单来说就是让GFW不知道你这股流量是什么从而放行,这就有了一个问题,当越来越多加密的未知流量汇聚到GFW后,这个不包含任何固定特征的加密方式就成了最大的特征。时下,走各种加密和混淆的花活儿把自己加密成“神秘人”过墙的这种思路已经有些过时了,把自己伪装成正常流量才是更好的方向,就好比大街上把自己全副武装捂得严严实实和伪装成正常人你觉得哪一种能更好潜伏?

不过,我悲观的认为,无论你用什么方式过墙,只要体量大到一定程度,就一定会被封锁,毕竟无论你再怎么加密和伪装,始终不是真正的正常流量,总有办法被攻破,只是时间问题罢了。
谢谢科普关于SS的配置。
不过我也想指出V2RAY天然就带有免疫握手攻击的特性,所以其实可以理解大家更愿意使用更加「开箱即用」的工具。根据V2RAY自己的官方页面,其默认使用的VMess协议 是一个无状态协议,即客户端和服务器之间不需要握手即可直接传输数据,每一次数据传输对之前和之后的其它数据传输没有影响。 VMess 的客户端发起一次请求,服务器判断该请求是否来自一个合法的客户端。如验证通过,则转发该请求,并把获得的响应发回给客户端。

https://www.v2ray.com/developer/protocols/vmess.html
绝大多数云服务提供商都会禁止ping,所以你Ping不通往往不能代表任何问题。
ss已经挂了很久了,用自带的连通测试,似乎能ping通但是无法访问任何网站……
啊 了解了.. 感谢加精

iOS的shadowrocket也不是开源的,怎么知道它是安全的呢?另外,请问反党哥,shadowsocks-libev怎么查看有多少客户端连接呢?netstat在SSI上不知道怎么用了。
一直都没问题,不懂有些人在搞什么。共匪只会一招,就是封VPS商的IP。
啊 了解了.. 感谢加精

请问,iOS上的shadowrocket也不是开源的,怎么就知道是安全的呢?
用tls加密,传输,ss被封了以后我用这个,就再也没有出过问题。域名可以freenom免费申请一个,买的话也不贵。
我们程序小白就是通过这样的文章慢慢积累慢慢学习的. 谢谢转帖.
       实名反对作者的观点。
       首先作者完全曲解了“主动嗅探”的概念,主动嗅探不是服务器主动和服务器取得被服务器认可的TCP连接,和所谓的社工更是沾不到一点边,完全属于乱套概念。相反,最初版本的SS存在TCP包头部漏洞,导致GFW会主动发送精心构造好的数据包,诱导服务器返回特定的字符,继而判断服务器是否在翻墙,所以后续的ss-libev改进了TCP头部并添加了GCM杜绝了“重放攻击”,也就是真正所谓的“主动嗅探”;
        其次,GFW虽然不知道通过SS具体的数据内容,但是,GFW对积累3年的大量SS流数据,通过机器学习,已经在去年年后的深度包检测中,能以极高的成功率,检测出加密流量中,用户具体浏览过的网址,这是效率极高的被动检测,造就广泛应用在各大运营商的网络节点上了。
        最后,我还要说明下,目前以大陆GFW的实力,想知道你翻墙那是分分钟的事,用SS或者其他免费代理,也基本等同于你直接暴露了浏览的内容。但至于ZF管不管你,只要你别太出格,一般不会管你。但还是建议大家,如果出于保护隐私的目的,那还是首推VPN(非PPTP),其次可以TLS代理。或者干脆直接Tor套前置代理。
支持你的观点,一直用shadowsocks-libev最新版,6个vps都装了,从未翻车,包括敏感时期。
你高估了翻墙的大学生的数量


你高估了翻墙键政大学生数量。
       实名反对作者的观点。       首先作者完全曲解了“主动嗅探”的概念,主动嗅探不是服...

ss被封不是因为深度包检测,而是GFW更新策略,只要是黑名单VPS段+未知流量就会封端口。
最简单的办法,换v2ray或者trojan。

要回复文章请先登录注册

要回复文章请先登录注册

发起人

消灭了尖锐的批评声,温和的批评声就变得刺耳了。 消灭了温和的批评声,连沉默都变得居心叵测。 当沉默也被消灭时,夸赞的不够卖力就是一种犯罪。