You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mabbs/_posts/2019-04-27-antiban.md

61 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
layout: post
title: Mayx的Anti-Ban计划
tags: [Mayx, Anti-Ban]
---
经过研究,网关管理没什么好怕的!<!--more-->
# 起因
众所周知由于某些原因互联网总是被上层网关所限制所以为了解决这个问题我研究了一下Ban的原理和Anti-Ban的方法。
# Ban的原理
Ban网站的原理大概分为以下几点
1.DNS缓存污染(Ban域名)
2.IP地址或传输层端口封锁(BanIP)
3.TCP重置攻击
具体内容请自行前往[Wikipedia](https://zh.wikipedia.org/wiki/%E4%BA%92%E8%81%94%E7%BD%91%E5%AE%A1%E6%9F%A5
)自行查询(这个链接可没有特指哦~),在此不再详述。
# Anti-Ban的方案
## 针对Ban域名的方案
DNSSEC、DNSCrypt、DoT、DoH等等都可以解决这个问题或者是不通过DNS直接获得IP然后发送Host头来获取网页内容也可以。我的想法是建立一个本地Proxy先通过前面几种方案获得IP然后发送Host这里需要注意的是要通过HTTPS发送但是不使用SNI因为SNI是不加密的而且用代理就没必要一定要获得正确的证书。
防火墙会对SNI进行拦截所以需要注意。
## 针对BanIP的方案
BanIP是真的绝因为网络控制毕竟在网关Ta要丢包谁也没办法不过可以试试CloudFlareCloudFlare可以不使用原网站的IP而且很多网站都使用CloudFlare所以BanCloudFlare的IP肯定不是好选择。
## TCP重置攻击
HTTPS基本上可以避免这个问题除了会受SNI没加密的影响TLS1.3可解但是证书……没关系靠本地Proxy对证书的要求不是很多。这个解决方案基本上就是加密让网关不知道你在干什么也就不能对你发RST包了。
# 计划
制作一个本地Proxy小程序用Python是个不错的选择绕过DNS和TCP Reset再配上CloudFlare基本上网关应该就Ban不了你了。
不过Python的学习成本还挺高的感觉比PHP难……回头有时间可以试试看。
# 结果
Python对我来说果然还是太难了QAQ所以我觉得使用Nginx就够用了配置如下
```
location / {
proxy_pass https:// #填写目标IP;
proxy_redirect off ;
proxy_set_header Host #填写目标域名;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300; #跟后端服务器连接超时时间,发起握手等候响应时间
proxy_send_timeout 300; #后端服务器回传时间,就是在规定时间内后端服务器必须传完所有数据
proxy_read_timeout 600; #连接成功后等待后端服务器的响应时间,已经进入后端的排队之中等候处理
proxy_buffer_size 256k; #代理请求缓冲区,会保存用户的头信息以供nginx进行处理
proxy_buffers 4 256k; #同上告诉nginx保存单个用几个buffer最大用多少空间
proxy_busy_buffers_size 256k; #如果系统很忙时候可以申请最大的proxy_buffers
proxy_temp_file_write_size 256k; #proxy缓存临时文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
proxy_max_temp_file_size 128m;
}
```
果然,搞事情还是用自己熟悉的搞比较好~23333
# 事实
我果然还是图样图森破了~我想的方案其实就是[域前置](https://zh.wikipedia.org/wiki/%E5%9F%9F%E5%89%8D%E7%BD%AE)所以该计划作废QAQ