W ciągu ostatnich kilku dni zauważyłem, że niektóre serwery są hamowane nieznanymi żądaniami.
Większość z nich wygląda następująco:
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 -
Po pewnym zalogowaniu i wyszukiwaniu dowiedziałem się, że jakiś chiński dostawca usług internetowych (prawdopodobnie CERNET według wyników whatsmydns.net) i turecki dostawca usług internetowych (prawdopodobnie TTNET) odpowiada na zapytania dns, takie jak a.tracker.thepiratebay.org
różne adresy IP, które nie mają nic wspólnego z piratebay lub torrenty. Innymi słowy, wydają się robić jakieś zatrucie pamięci podręcznej DNS z jakiegoś dziwnego powodu.
Tak więc setki (jeśli nie tysiące) bittorrentowych klientów w tych krajach przekazuje mnóstwo „zapowiedzi” moim serwerom internetowym, które powodują atak DDoS wypełniający wszystkie połączenia Apache.
W tej chwili całkowicie zablokowałem Chiny i Turcję i spełnia to zadanie, ale chciałbym znaleźć lepszy sposób na zablokowanie tych wniosków.
Myślałem o zablokowaniu tych żądań za pomocą mod_security na podstawie nagłówka hosta HTTP.
Wszystkie te żądania obejmują nagłówek hosta HTTP, taki jak a.tracker.thepiratebay.org
(lub wiele innych subdomen domeny thepiratebay.org).
Oto zrzut nagłówków żądań poprzez $_SERVER
zmienną 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
Więc moje pytanie brzmi: jak mogę blokować przychodzące żądania do Apache na podstawie domeny żądania (nagłówek hosta HTTP)? Pamiętaj, że żądania dotyczą różnych adresów URL, a nie tylko /announce.php, więc blokowanie według adresów URL nie jest przydatne.
Czy to podejście jest wykonalne, czy też spowoduje zbyt duże obciążenie i powinienem porzucić te żądania, zanim dotrą one do Apache?
Aktualizacja:
Okazuje się, że problem ten dotknął wiele osób w wielu krajach na całym świecie.
Pojawiło się wiele raportów i postów na blogu oraz różne rozwiązania blokujące ten ruch.
Zebrałem niektóre raporty, aby pomóc każdemu, kto tu przyjdzie, szukając rozwiązania tego problemu.
Tajemniczy źle skierowany ruch chiński: Jak mogę dowiedzieć się, jakiego serwera DNS użyło żądanie HTTP?
Dziwne Bittorrent Zaloguj się na moim serwerze
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-attack-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- dający/