最近几天,我注意到一些服务器受到未知请求的冲击。
其中大多数如下所示:
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客户端向我的Web服务器发出大量的“公告”,这几乎导致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的传入请求?请记住,请求不仅在/announce.php上而且在各种URL上,因此按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+Resolvening+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-给予/