过去一周,我收到了来自大量中国 IP 地址的大量流量。这些流量似乎来自普通用户,他们的 HTTP 请求表明他们认为我是:
- 海盗湾
- 各种 BitTorrent 追踪器,
- 色情网站
所有这些听起来都像是人们会使用 VPN 做的事情。或者会让中国长城愤怒的事情。
User-agent 包括浏览器,Android,iOS,FBiOSSDK,Bittorrent,IP地址为中国正规商业提供商。
如果主机不正确或者用户代理明显错误,Nginx 将返回 444:
## Deny illegal Host headers
if ($host !~* ^({{ www_domain }})$ ) {
return 444;
}
## block bad agents
if ($http_user_agent ~* FBiOSSDK|ExchangeWebServices|Bittorrent) {
return 444;
}
我现在可以处理负载,但有些时候流量会高达每分钟 2k。我想找出它们来找我的原因并阻止它。我们也有合法的 CN 流量,因此禁止地球上六分之一的流量不是一个选择。
它可能是恶意的,甚至是个人的,但也可能只是那边的 DNS 配置错误。
我的理论是,这是一个配置错误的 DNS 服务器,或者可能是人们用来绕过防火墙的一些 VPN 服务。
给定客户端 IP 地址:
183.36.131.137 - - [05/Jan/2015:04:44:12 -0500] "GET /announce?info_hash=%3E%F3%0B%907%7F%9D%E1%C1%CB%BAiF%D8C%DE%27vG%A9&peer_id=%2DSD0100%2D%96%8B%C0%3B%86n%8El%C5L%11%13&ip=183.36.131.137&port=11794&uploaded=4689970239&downloaded=4689970239&left=0&numwant=200&key=9085&compact=1 HTTP/1.0" 444 0 "-" "Bittorrent"
我可以知道:
descr: CHINANET Guangdong province network
descr: Data Communication Division
descr: China Telecom
- 我如何才能知道这些客户正在使用什么 DNS 服务器?
- 有没有办法确定 HTTP 请求是否来自 VPN?
- 这到底发生了什么事?
答案1
理论上有一种确定客户端 DNS 解析器的方法,但这种方法非常先进,我不知道有什么现成的软件可以帮你做到这一点。除了 nginx 之外,你肯定还得为此运行一个权威 DNS 服务器。
如果 HTTP 主机标头不正确,则提供错误文档,并针对记录到数据库的每个请求向动态创建的唯一 FQDN 包含请求。例如。
只要中国的防火墙不干扰该请求,并且客户端从该唯一的 FQDN+URI 请求文档,那么每个请求都会导致对您的权威 DNS(例如 example.com)进行新的 DNS 查找,您可以在其中记录 DNS 解析器的 IP,然后将其与您动态生成的 URI 相关联。
答案2
我听说防火墙曾经将“被阻止”的流量重定向到少数虚假 IP,但这导致他们的阻止很容易被发现(我不确定这是否允许轻易颠覆)。无论如何,管理员已经开始重定向到随机 IP。这显然导致一些中国用户访问色情内容,而不是 Facebook 或 VPN。
我怀疑您的某个 IP 已成为被阻止的中国流量的接收者 - 因此您看到了 Facebook IPI 用户代理。
这意味着主机头检查应该很好。目前大多数用户代理都支持 SNI,因此您应该能够相对轻松地丢弃无主机头流量。
编辑: http://www.infosecurity-magazine.com/news/great-firewall-upgrade-redirects/
答案3
我如何才能知道这些客户正在使用什么 DNS 服务器?
联系 Chinanet 询问?说真的,DNS 可以在客户端配置。大多数人通过 DHCP 获取 DNS 设置,但如果您无法更改它们,OpenDNS 和 Google 的 DNS 产品就没有商业模式了。
有没有办法确定 HTTP 请求是否来自 VPN?
不是的,只不过该 IP 属于 VPN,而不是中国的最终用户。
这到底发生了什么事?
我不能告诉你,但也许存在某种配置错误中国防火墙?