最近几天,我注意到一些服务器受到未知请求的冲击。
它们中的大多数如下所示:
60.246.*.* - - [03/Jan/2015:20:59:16 +0200] "GET /announce.php?info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1 HTTP/1.1" 200 -
经过一些记录和搜索后,我发现一些中国 ISP(根据 whatsmydns.net 的结果可能是 CERNET)和一些土耳其 ISP(可能是 TTNET)响应 dns 查询,例如a.tracker.thepiratebay.org
使用与 piratebay 无关的各种 IP或种子。换句话说,他们似乎出于某种奇怪的原因进行了某种 DNS 缓存中毒。
因此,这些国家/地区的数百个(如果不是数千个)bittorrent 客户端向我的网络服务器发出大量“通知”,这几乎导致 DDoS 攻击填满了所有 Apache 的连接。
目前我完全屏蔽了中国和土耳其,它确实有效,但我想找到一种更好的方法来屏蔽这些请求。
我正在考虑使用基于 HTTP Host 标头的 mod_security 阻止这些请求。
所有这些请求都包含一个 HTTP Host 标头,例如a.tracker.thepiratebay.org
(或 thepiratebay.org 域的许多其他子域)。
这是通过 PHP$_SERVER
变量转储的请求标头。
DOCUMENT_ROOT: /usr/local/apache/htdocs
GATEWAY_INTERFACE: CGI/1.1
HTTP_ACCEPT_ENCODING: gzip
HTTP_CONNECTION: Close
HTTP_HOST: a.tracker.thepiratebay.org
HTTP_USER_AGENT: uTorrent/342(109415286)(35702)
PATH: /bin:/usr/bin
QUERY_STRING: info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1
REDIRECT_STATUS: 200
REMOTE_ADDR: 60.246.*.*
REMOTE_PORT: 3445
REQUEST_METHOD: GET
REQUEST_URI: /announce.php?info_hash=%80%85%8e%9bu%cfJ.%85%82%e9%25%bf%8e%9e%d7%bf%c5%b0%12&peer_id=-UT3420-v%8bN%aa%60%60%fd%5d%d1%b0Ux&port=15411&uploaded=48588531&downloaded=0&left=0&corrupt=0&key=9E124668&numwant=200&compact=1&no_peer_id=1
SCRIPT_FILENAME: /usr/local/apache/htdocs/announce.php
SCRIPT_NAME: /announce.php
SERVER_ADDR: *.*.*.*
SERVER_ADMIN: *@*.*
SERVER_NAME: a.tracker.thepiratebay.org
SERVER_PORT: 80
SERVER_PROTOCOL: HTTP/1.1
SERVER_SIGNATURE:
SERVER_SOFTWARE: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1e-fips mod_bwlimited/1.4 mod_perl/2.0.8 Perl/v5.10.1
UNIQUE_ID: VKg8BJBMIPQAD01XYzgAAAAD
PHP_SELF: /announce.php
REQUEST_TIME_FLOAT: 1420311556.43
REQUEST_TIME: 1420311556
argv: Array
argc: 1
所以我的问题是,如何根据请求域(HTTP 主机标头)阻止对 Apache 的传入请求?请记住,请求在各种 URL 上,而不仅仅是 /announce.php,因此通过 URL 阻止是没有用的。
这种方法是否可行,或者它会导致过多的负载,我应该在它们到达 Apache 之前继续丢弃这些请求?
更新:
事实证明,这个问题已经影响了全球许多国家的许多人。
有很多关于它的报告和博客文章以及阻止这种流量的各种解决方案。
我收集了一些报告来帮助任何来这里寻找解决方案的人来阻止这个。
神秘的误导中文流量:如何找出一个HTTP请求使用的DNS服务器?
奇怪的 Bittorrent 登录我的服务器
http://blog.devops.co.il/post/108740168304/torrent-ddos-attack
https://www.webhostingtalk.com/showthread.php?t=1443734
http://torrentfreak。 com/zombie-pirate-bay-tracker-fuels-chinese-ddos-attacks-150124/
https://isc.sans.edu/forums/diary/Are+You+Piratebay+thepiratebayorg+Resolving+to+Various+Hosts/ 19175/
http://furbo.org/2015/01/22/fear-china/
http://www.jwz.org/blog/2015/01/chinese-bittorrent-the-gift-that-keeps-on-给予/
这里同样的问题。我正在使用 mod_security 来阻止用户代理
在您确认它正在工作后,我会将日志更改为 nolog,以避免填满您的日志文件
我们的客户网站之一遇到了完全相同的问题。我在他们的顶部附近添加了以下内容:
注释掉的 RewriteCond 可以取消注释以仅阻止特定的用户代理。但他们在announce 或announce.php 中没有内容,所以我们将其全部屏蔽。
我写了一篇关于如何正确告诉 BitTorrent 客户端离开并且永远不会回来的博客文章,类似于 Dan 所做的,但使用的是 nginx。
/announce
Torrent 跟踪器(通常)有一个以or开头的标准 URL/scrape
,所以我不会这么快就放弃按 URL 过滤。有用。完整的帖子位于 - http://dvps.me/ddos-attack-by-torrent
我现在遇到了同样的问题,让洪流跟踪器指向我的服务器。在过去的几天里,我对 iptables 进行了试验,检查了请求的标头和模式,并将其缩小到几个 iptables 规则,这些规则过滤了几乎所有来自亚洲(中国、马来西亚、日本和香港)。
以下是规则。希望它可以帮助某人。
我从 http://www.wizcrafts.net/chinese-blocklist.html中获取了中文 IP 范围, 并在我的 csf 防火墙中阻止了它们,这是您想要复制并粘贴到 csf 拒绝 ip 列表中的范围: