mirror of
				https://github.com/Mabbs/mabbs.github.io
				synced 2025-11-03 20:55:19 +08:00 
			
		
		
		
	
		
			
	
	
		
			61 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								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要丢包谁也没办法,不过可以试试CloudFlare,CloudFlare可以不使用原网站的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
							 |