5
通过http-host标头阻止mod_security
最近几天,我注意到一些服务器受到未知请求的冲击。 其中大多数如下所示: 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: …