"Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)"のアクセスが酷い
前から同じような意味不明なアクセスがあったのだが、今回あまりに酷かったので本腰を入れて調べてみた。
挙動からしてブラウザプラグインっぽい。
何のソフトなのか
script.module.youtube.dlというモジュールでこのUser-Agent文字列は過去に使われている。(現在のmasterのHEADでは"Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/20.0 (Chrome)"で、その文字列を持ったアクセスも確認している)
リクエストヘッダ全体を比べると
Connection: close Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: en-us,en;q=0.5 Host: example.com
と、必須なConnectionとHost以外は一致しているし、Connection: closeとするのはHTTPライブラリをそのままで使うと多い挙動(コネクションプールなし)なので確度は高そうだ。ただウェブページに無差別にアクセスする挙動はこれを直接利用する本来のアプリケーションによるものではないかもしれない。
Yahoo!知恵袋にはRealDownloaderのものだと書いてあったのだが、確認はしていない。ただブラウザで表示しているデータを直接参照する能力が無いようなので実体が上記のような本体と協調して動く別プログラムなのは間違いないし、上記モジュールのコアを流用するというのはありそうな話だ。
症状
基本パターンとしてはブラウザがページ遷移するとロード完了時にそのページURLに対してHEADとGETリクエストを発行する。
* - - [../.../....:..:35:59 +0900] "GET / HTTP/1.1" 200 * "-" "Mozilla/5.0 (...) Chrome/..." * - - [../.../....:..:36:00 +0900] "GET /style.css HTTP/1.1" 304 - "http://example.com/" "Mozilla/5.0 (...) Chrome/..." * - - [../.../....:..:36:00 +0900] "GET /script.js HTTP/1.1" 304 - "http://example.com/" "Mozilla/5.0 (...) Chrome/..." * - - [../.../....:..:36:10 +0900] "HEAD / HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)" * - - [../.../....:..:36:10 +0900] "GET / HTTP/1.1" 200 * "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)"
HEADに先行してGETを余計に発行する場合もある。
* - - [../.../....:..:36:20 +0900] "GET /page.html HTTP/1.1" 200 * "http://example.com/" "Mozilla/5.0 (...) Chrome/..." * - - [../.../....:..:36:23 +0900] "GET /page.html HTTP/1.1" 200 * "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)" * - - [../.../....:..:36:23 +0900] "HEAD /page.html HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)" * - - [../.../....:..:36:23 +0900] "GET /page.html HTTP/1.1" 200 * "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0 (Chrome)"
ログから推測する限りキャッシュ機構の類をどのレイヤーにも持っていないらしく、利用者がページを行き来してページURLが変わるとブラウザ側がキャッシュやbfcacheを使ったとしても必ずこれらリクエストが発生する。
サーバ側は転送量が倍増〜三倍増するだけでなく、動的コンテンツで完全なレスポンスキャッシュができない場合は負荷も増える。
利用者側は当然、ネットワーク帯域が無駄になる上、CPU負荷も馬鹿にならなそうだ。