Nos últimos dias, notei alguns servidores sendo martelados com solicitações desconhecidas.
A maioria deles é como segue:
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 -
Depois de um pouco de registro e pesquisa, descobri que alguns provedores chineses (provavelmente o CERNET de acordo com os resultados do whatsmyns.net) e alguns provedores turcos (provavelmente o TTNET) respondem a consultas DNS como a.tracker.thepiratebay.org
com vários IPs que não tem nada a ver com piratebay ou torrents.
Em outras palavras, eles parecem fazer algum tipo de envenenamento de cache DNS por algum motivo bizarro.
Assim, centenas (senão milhares) de clientes bittorrent nesses países fazem toneladas de 'anúncios' para os meus servidores, que resultam em um ataque DDoS, preenchendo todas as conexões do Apache.
No momento, bloqueei totalmente a China e a Turquia e isso funciona, mas gostaria de encontrar uma maneira melhor de bloquear essas solicitações.
Eu estava pensando em bloquear essas solicitações com mod_security com base no cabeçalho do host HTTP.
Todas essas solicitações incluem um cabeçalho de host HTTP como a.tracker.thepiratebay.org
(ou muitos outros subdomínios do domínio thepiratebay.org).
Aqui está um dump dos cabeçalhos de solicitação através da variável $_SERVER
do PHP.
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
Então, minha pergunta é: como bloquear solicitações recebidas para o Apache com base no domínio de solicitação (cabeçalho do host HTTP)?
Lembre-se de que as solicitações estão em vários URLs e não apenas em /announce.php, portanto, o bloqueio por URL não é útil.
Além disso, essa abordagem é viável ou causará muita carga, e eu devo continuar soltando essas solicitações antes mesmo de elas acessarem o Apache?
Atualização:
Acontece que esta questão afetou muitas pessoas em muitos países ao redor do mundo.
Houve inúmeros relatórios e postagens de blog sobre isso e várias soluções para bloquear esse tráfego.
Coletei alguns dos relatórios para ajudar qualquer um que esteja vindo aqui pesquisando uma solução para bloquear isso.
Tráfego chinês mal direcionado e misterioso: como posso descobrir qual servidor DNS uma solicitação HTTP usou?
Estranho Bittorrent Log On My Server
link
link
link
link
link
link