-
Notifications
You must be signed in to change notification settings - Fork 13
Home
VPS 搭建TLS 443代理实现翻墙上网
GFW越来越强大了,
很多代理模块,
花样不管怎么变化,
加密算法不管多么强大,
最后都会被特征捕获而面临封禁可能。
私认为目前最有效的伪装应该是TLS,
使用443端口模仿web https访问,
使得流量看起来和正常web https访问完全一致,
GFW探测时拿到的和正常https 443结果是一样的。
- VPS搭建 nginx 服务端,提供http和https访问应答。
- VPS的 nginx服务端应答https后进行应答分流,
普通请求返回web页面,特殊请求转发给后端例如v2ray进行处理。 - 前端客户机器使用websocket封装请求,再交给https进行TLS封装。
流量和普通web访问无任何差异。 - 这样大大降低了前端和后端的运算负担,只有一个TLS加密。
绝大部分平台CPU都有硬件加速,纳秒级别,
不管后端使用什么做法,都不需要再额外进行加解密运算,
只需要转发请求完成代理功能即可。
虽然流量特征看起来是绕过了GFW探测,
但是仍然可以通过社会工程学人为判断该IP站点是否可疑。
因为如果你的客户机器一直访问一个IP地址,
而那个IP地址仅仅提供一个简单web页面应答,
或者Baidu之类的镜像地址转发,
却产生了巨额的访问流量,
那么这个IP地址就是可疑的,
这就会带来被封禁的可能性。
但是比起其它的加密代理方法,
这个已经是天花板级别的了。
如果这样子还不幸被封禁,
那么其它的代理其实也很难幸免,
解决办法是多备几个VPS吧。
下面开始实际操作,将会涉及:
VPS是搭建代理的基础,
购买海外的服务商提供的云服务,
可以根据个人经济状况和宽带速度稳定性来进行选择。
需要注意的点是:
远离华人背景的供应商,搞不好什么时候他被统战,
你就被当猪仔卖掉了,你的信息也就完全暴露
这里我不做广告了(有需求的可以发邮件给我咨询哪些VPS好用)
拿到VPS的IP地址之后,选择预装Ubuntu 20.04系统
使用ssh登录到VPS:
1.1 关闭ssh的密码认证登录。
1.2 开启ssh key认证登录。
1.3 将端口22更改为其它不常用的端口。
1.4 安装v2ray:
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
1.5 更新系统
apt update && apt upgrade -y
这些操作是为了防范恶意扫描和攻击。
操作细节请自行搜索。
如果访问不了这个安装脚本,可以发邮件给我要一个。
Name.com有很多on sale的域名,
有些甚至低到2美刀,不建议去搞免费域名。
随机输入一些不起眼的名字,点击search,
等待结果,可以看到很多打折的域名,
选择心仪的域名添加到购物车然后买单。
第2步购买了域名之后,
这里开始绑定之前购买VPS的IP地址到域名上。
Domain列表中可以看到已经购买的域名。
点击你的域名进入配置菜单,
然后滑动到Domain Details列表,
选择DNS列的Manage DNS Records。
Host中填*,ANSWER中填IP地址,代表所有未匹配的子域名都会由DNS解析匹配到这个IP地址。
Host中填www,ANSWER中填IP地址,代表www.ip.xx的域名会由DNS解析匹配到这个IP地址。
Host中填子域名,比如subhello,ANSWER中填IP地址,代表subhello.ip.xx会由DNS解析匹配到这个IP地址。
TTL默认即可。
没有测试过最多可以添加多少个DNS记录,
我平常使用添加了5个DNS记录给3个VPS使用,
没有发现问题。
每次输入完成之后,点击ADD RECORD添加DNS解析记录。
添加完成之后最迟24小时生效,一般是几分钟就可以ping域名查看是否生效了。
在拥有了域名和IP地址之后,
就可以申请个人web站点的域名证书了。
这里选择个人建站广泛使用的letsencrypt来申请证书。
下面开始使用ssh登录到VPS进行命令操作。
安装证书申请工具:
apt install socat
bash <(curl https://get.acme.sh)
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
acme.sh --set-default-ca --server letsencrypt
申请证书(需要80端口,请确保该端口没有被占用,如果nginx开了,记得关闭):
-d 后面接你要申请证书的域名,
一次可以为多个域名申请证书,
但是建议一个VPS的IP申请一个域名证书即可,方便管理。
这里必须确保域名是已经和VPS的IP绑定了的。
acme.sh --issue -d example.com -d www.example.com --standalone -k ec-256 --force
稍等片刻,静候证书下发。
安装证书:
acme.sh --installcert -d example.com -d www.example.com --ecc --key-file /usr/local/etc/v2ray/server.key --fullchain-file /usr/local/etc/v2ray/server.crt
将所有申请到的证书都安装至v2ray的配置文件目录。
也可以是其它目录,但是要记下来后面要用到。
就像之前说的,一般只建议一个VPS域名申请一个证书。
这里为了方便举例使用了之前的2个域名证书的例子。
开启证书工具自动维护:
acme.sh --upgrade --auto-upgrade
安装nginx:
apt install nginx
这里以镜像站转发访问baidu作为举例,
如果会自己编写开发web站点,
那请自行修改为你自己的web服务。
配置文件内容:/etc/nginx/nginx.conf
这一段是负责正常访问的返回,简单的将访问重定向到baidu页面:
location / {
proxy_pass https://www.baidu.com/;
proxy_redirect off;
sub_filter_once off;
sub_filter "baidu.com" "example.com";
proxy_set_header Host "www.baidu.com";
proxy_set_header Referer $http_referer;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Accept-Encoding "";
proxy_set_header Accept-Language "zh-CN";
}
实操中需要将example.com替换为VPS绑定的域名。
重定向的域名可以选择微博网易baidu或者bing之类的。
下面这一段是将特殊访问转发给v2ray处理:
location /3d9a9a26-4966-11ed-afa8-5752d2b08905 {
proxy_redirect off;
proxy_pass http://127.0.0.1:8388;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
路径3d9a9a26-4966-11ed-afa8-5752d2b08905是用uuid命令生成的值。
这个路径ID请使用uuid命令自行生成并且保密不要轻易泄露。
最后一段不列出来了,
那是将80端口的http访问转为https返回。
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
如果访问不了这个安装脚本,可以发邮件给我要一个。
配置文件:/usr/etc/local/v2ray/config.json
"id": "e089144a-4968-11ed-a04c-2fd85d90a885" 是使用uuid命令生成的。
请使用uuid命令自行生成并且保密不要轻易泄露。
"path": "/3d9a9a26-4966-11ed-afa8-5752d2b08905" 的值和
nginx.conf的转发路径值一致。
如果证书过期由于各种未知原因没有自动续
则手动续证书:
systemctl stop nginx
acme.sh --renew-all
因为续证书需要80端口,所以需要短暂关闭nginx
成功之后重启nginx即可
systemctl restart nginx

systemctl enable v2ray
systemctl enable nginx
systemctl start v2ray
systemctl start nginx
systemctl status v2ray
systemctl status nginx
Have Fun.
开启web服务后,
有很多爬虫或者二逼的访问攻击,
可以配置一下把这些IP的访问禁止掉。
- 查看哪些IP访问我们的VPS
awk '{print $1}' /var/log/nginx/access.log |sort |uniq -c|sort -n | less
该命令会搜集所有访问的IP地址,
并按照访问的频繁度进行排序。
- 在/etc/nginx/目录创建配置文件
cd /etc/nginx
touch deny_ip.conf
vi deny_ip.conf
将前几名频繁访问VPS的IP添加到deny_ip.conf文件。
添加格式如下:
deny 66.249.79.248;
deny 66.249.79.93;
deny 66.249.79.91;
deny 66.249.79.89;
- 配置nginx
打开nginx.conf文件,
vi nginx.conf
在location / 的section中添加:
include deny_ip.conf;
使用命令测试:
nginx -t
测试通过之后reload并重启服务即可:
systemctl reload nginx
systemctl restart nginx