前两天,ShadowsocksR作者做了一个 公益站,同时演示了 如何将ShadowsocksR服务端的流量伪装成正常网站的流量,有点意思,写一点简单的教程。
如果只是单纯的去伪装ShadowsocksR流量,那么不需要安装Nginx/Apache这些功能多但是配置相对也复杂一点的HTTP服务器,用Caddy就好了。
本文章主要是实现:
首先我们要知道 SSR 的混淆插件中的 HTTP HTTPS 混淆伪装均为 伪·伪装,仅仅是模拟为 HTTP HTTPS 访问流量,容易被主动探测识破,况且很多人连混淆参数都不填,更是进一步降低其伪装混淆安全性,而该教程就是为了加强混淆伪装,使 伪·伪装 变成 真·伪装!
访问 http://xxx.xx 域名(http 80端口)
,能正常看到网站内容,但如果你链接这个网站服务器上面的ShadowsocksR服务端账号(也是80端口),也能正常使用。实现了同端口网站和ShadowsocksR共存。
而对于墙或者运营商来说,当他们检测你传输的流量特征的时候,会看到你的流量是去访问海外服务器的 80 端口,就算跟踪过去,也会发现是一个正常的海外网站(随便搞一个静态的 HTML 英文页面),一个没有敏感词的海外英文网站,墙和运营商是不会去注意的。
所以就实现了伪装ShadowsocksR服务端流量的功能,每天国内访问海外网站(80/443端口)的流量非常庞大,在这个伪装中,可以很大程度的降低被发现(匹配流量特征)的几率,所以有兴趣的可以折腾玩玩。
文章里的原理:
你链接你的服务器 80端口(SSR服务端端口),然后就会链接到ShadowsocksR服务端,ShadowsocksR服务端会判断你是链接SSR,还是访问网站,如果是访问网站,就会把你的流量数据重定向到网站监听的端口(2333端口),然后你就显示网页了。
注意:如果要用这个同端口伪装功能,请不要开启 协议(origin)和混淆插件(obfs)的兼容原版模式(_compatible),不要使用原版SS链接!
同时,Shadowsocks-libev版服务端的simple-obfs功能,并不能实现本教程所说的同端口共存功能!
推荐一个伪装配置
这个伪装配置不需要你服务器上面搭建网站,而是把HTTPS访问的网页信息转发到微软的网站,实现伪装HTTPS访问微软!
目前已知这种设置方式可以有效降低 IP 被墙几率(非 100%)。
# 服务端端口设置为: "server_port": 443, # 客户端服务器端口填写:443 # 服务端混淆插件设置为: "obfs": "tls1.2_ticket_auth", # 客户端混淆插件选择:tls1.2_ticket_auth 或 tls1.2_ticket_fastauth # 服务端 redirect 设置为: "redirect": ["*:443#HK2SCH130083c18593.wns.windows.com:443"], # 客户端混淆参数填写:HK2SCH130083c18593.wns.windows.com
至于其他的加密方式、协议插件等都不影响什么都行。
SSR 客户端的混淆参数记得填写为:HK2SCH130083c18593.wns.windows.com
前提准备
其实也没什么要准备的,就是你需要有个域名,然后将域名解析为你的SSR服务器IP
例如:
toyoo.pw 域名,记录名为 @ ,解析类型为 A,解析IP为 服务器IP。
abc.toyoo.pw 域名,记录名为 abc ,解析类型为 A,解析IP为 服务器IP。
免费域名申请教程:教你申请.tk/.ml/.cf/.gq/.ga等免费域名
Caddy 配置步骤
安装 Caddy
Caddy 是 Go语言编译好的二进制程序,所以只有一个 Caddy 文件(还需要生成一个配置文件),但是为了管理方便,所以我做了个一键脚本。
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install http.filemanager
安装Caddy成功后,我们就继续下面的步骤。
配置 Caddy
Caddy的特点之一就是,配置文件非常的简单,继续下面看就知道了。
注意:以下示例域名皆为 toyoo.pw
,请注意更换为自己的域名,并做好域名解析。
HTTP(80端口)
假设你要伪装 80端口(ShadowsocksR服务端端口为 80),那么你可以在 Caddy中随便配置一个监听端口。
HTTPS(443端口)
如果你想要伪装 443端口(ShadowsocksR服务端端口为 443),那么你可以在 Caddy中随便配置一个监听端口。
然后我们新建一个 虚拟主机文件夹
mkdir /usr/local/caddy/www && mkdir /usr/local/caddy/www/ssr
然后去网上随便下载一个 HTML的网页模板(很好找的,这类模板非常多,随便找个英文模板就好了),解压后把网页文件通过SFTP 上传到刚才新建的虚拟主机文件夹中:/usr/local/caddy/www/ssr
然后我们重启 Caddy,当然这个时候我们还只能通过 http://toyoo.pw:2333
来访问我们的网站,我们还需要继续配置ShadowsocksR服务端。
/etc/init.d/caddy restart
使用说明
启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志: tail -f /tmp/caddy.log
Caddy配置文件位置:/usr/local/caddy/Caddyfile
ShadowsocksR 配置步骤
打开你的配置文件(假设你的ShadowsocksR服务端安装在 /root
文件夹内):
nano /root/shadowsocksr/user-config.json
然后我们会看到配置文件,我们需要找到 server_port 和 redirect 参数
并修改就行了
修改完成后,按 Ctrl+X 退出,会提示你是否保存,输入 y 代表保存,然后会提示你要保存的文件名,直接回车覆盖。输入 n 代表不保存,直接退出。
HTTP(80端口)
按照上面Caddy的HTTP配置(监听2333端口),
# 把 server_port 参数改成这样: "server_port": 80, # 把 redirect 参数改成这样: "redirect": ["*:80#127.0.0.1:2333"],
HTTPS(443端口)
按照上面Caddy的HTTPS配置(监听6666端口),
# 把 server_port 参数改成这样: "server_port": 443, # 把 redirect 参数改成这样: # 如果是配置的HTTP转HTTPS,那么也是使用下面这个配置(只需要设置一个 443的转发即可) "redirect": ["*:443#127.0.0.1:2333"],
多端口配置
如果你的Caddy和SSR服务端同时配置了多个端口(比如 888和666),
# 那么把 redirect 参数改成这样: "redirect": ["*:888#127.0.0.1:2333", "*:666#127.0.0.1:6666"],
然后重启ShadowsocksR服务端(假设你的ShadowsocksR服务端安装在 /root
文件夹内,并且是单用户):
bash /root/shadowsocksr/shadowsocks/run.sh
注意:如果要用这个同端口伪装功能,请不要开启 协议(origin)和混淆插件(obfs)的兼容原版模式(_compatible),不要使用原版SS链接!
同时,Shadowsocks-libev版服务端的simple-obfs功能,并不能实现本教程所说的同端口共存功能!
然后现在你可以尝试访问 http://toyoo.pw
,会发现不需要加端口号( http://toyoo.pw:2333
)也可以正常访问了!
客户端混淆设置
这时候为了加强该伪装的作用,还需要客户端混淆插件和混淆参数设置一番。
- 如果你是伪装的 80 端口,请选择 http_simple 混淆插件,混淆参数填写你的域名(示例 toyoo.pw)。
- 如果你是伪装的 443 端口,请选择 tls1.2_ticket_auth 或 tls1.2_ticket_fastauth 混淆插件,混淆参数填写你的域名(示例 toyoo.pw)。
- SSR客户端的服务器地址填写 你的域名(示例 toyoo.pw)
- SSR客户端的服务器端口填写 80 或 443 端口(取决于服务端端口)。
所以这个就实现了,伪装 ShadowsocksR 服务端流量为 正常海外网站流量的目的,同时也可以说实现了 网站和ShadowsocksR 同端口共存。
其他说明
启动显示成功,但是实际未运行
Nginx配置说明
参考资料:https://breakwa11.blogspot.ru/2017/01/shadowsocksr-mu.html?m=1
转载请超链接注明:逗比根据地 » ShadowsocksR服务端伪装成 正常网站流量,以更好的欺骗流量匹配
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!
可以尝试再执行以下设置开机启动的命令,然后重启试试,如果还是无法启动,可能是系统服务相关问题吧,请报告你的系统和位数。
另外,下面这种示例是[一个]完整的命令,需要全部复制,然后直接粘贴在SSH软件中回车运行(就像运行普通命令一样),而不是直接粘贴到配置文件内,这样绝对报错。
本教程正常结果应该是,假如用80端口 而网站是2333端口,访问 http://域名/ 80端口能正常访问,通过 80端口链接SSR能正常链接,当然 http://域名:2333 端口也能外部访问。
Centos6 Debian7 Ubuntu14 系统我都测试过,但不保证所有系统都正常,使用
cat /tmp/caddy.log
查看启动日志。ulimit -n 8192
来临时设置文件并发数,但重启后会失效。 也可以永久的设定:你访问 谷歌,你只需要输入
www.google.com
,然后浏览器会自动加上协议 http:// 和端口 80
,完整的地址应该是:http://www.google.com:80
,不过http的默认端口就是80,所以浏览器隐藏了端口。HTTPS也一样,隐藏了443端口,当你设置其他端口的话,你就需要手动加上端口了,比如
https://xxx.xx:2333
这样http://ip:2333
也能访问网站,你通过http://ip:80(80默认是隐藏的)
你就会访问到ShadowsocksR服务端,然后ShadowsocksR服务端会根据配置去把 流量重定向到http://ip:2333
。不过需要这注意的是,我的教程里的写入配置文件代码,都是 清空配置文件然后再写入的,最后一句代码:
ssr用的是你的一键脚本安装的
请问大大哪里错了
另外我的ssl证书是.KEM,不是.KEY.这个影响https配置吗