ホーム > Linux > DLツールの防ぎ方?

2010年05月10日(月曜日) 12時23分

りでぃすとりびゅ~しょんはBlogとして運用していますが、同じ鯖&ドメインで
リディストリビュ~ションという18禁ゲームの体験版・デモムービー等のダウンロードミラー
のサイトも運用しています。
#ミラーサイトがメインでBlogはついでだったり(@@;)

体験版とかのファイルは1ファイル数百MB(最近は500BM以上)が多くなっています。
うちは元々回線が脆弱なのでDLツールを使われると鯖と回線への負荷が大変なことになってます。
ってことで閉め出すのが一番と判断・・・。

※かなり端よった記事になってます。

分割ツールが何故迷惑なのかは・・・某サイト様で掲載されていたのを引用
ダウンロードツールには初期設定で10分割ダウンロードとなっているものが少なくないと思います。
これはファイル全体を10個に分けて、10並列でダウンロードしていると理解しているかも
しれませんが、それは間違いです。

実際には10回より多くのダウンロードが行われていて、数百~数千回のダウンロードを
行うケースが多いのです。
数百~数千のダウンロードが実行されると、それぞれに不正アクセス対策の検査が行われるため、
転送効率が大きく悪化します。

最速でダウンロードを行うことを意図しているのか、トリッキーな挙動が観測されています。
例えば、途中でダウンロードを中断してダウンロードサイズをどんどん小さくしていく場合や、
最初から小さいサイズでダウンロードを多数実行するケースが多く見られます。

20MBのファイルを16KBずつダウンロードすると1,280回になりますし、
200MBのファイルを16KBずつダウンロードすると12,800回にもなります。
(16KBは観測される最小のサイズです)

このように一人が数百~数千回のダウンロードを連続して行うと、アクセスの検査に
10秒前後かかることがあります(ディスクのアクセスの待ち時間よりもはるかに長くなります)。
そして、実際のデータ(16KB)のダウンロードには0.1秒もかかりません。
つまり、分割ダウンロードするため転送速度が百分の一以下に落ちているのです。

転送速度を測りながらサイズを小さく変更するダウンロードツールの場合、
最初は100KB~1MBのサイズで分割するものの、上の状況の通り転送速度が
低めに出るために16KBにサイズを下げてしまいます。
そして、状況をさらに悪化させます。

ダウンロードツールが10分割ダウンロードしたくても、Webサーバーが混雑しているために
全て(10個)は受け付けられない場合がよくあります。
また、サイトによって同時接続数を制限しているところが多数あります。

そのような状況でも、常に10個のダウンロードのリクエストを<待ち時間無し>で出し続ける
ダウンロードツールが多いので、処理不可能なリクエストを延々と出し続ける→
サーバーの処理の負荷が上がったままになるという状況になります
(エラーで応答する場合でも処理コストがかかります)。

このために、状況を悪化させる→応答速度が悪くなる→転送速度が落ちるという悪循環になります。

ダウンロードツールでは重複したダウンロードを防ぐ仕組みが用意されていないのです。

例えば、あるサーバーでダウンロード設定をしたものの、なかなかファイルが落ちてこないので、
別のサーバーでダウンロード設定をしたらすぐに落とせた場合、
最初のダウンロード設定を残したままにするケースがあります。
そのため、混雑しているサーバーのリクエストが残ったまま減らない困った状況になります。

分割ダウンロードはサーバー運用コストを本来の10倍以上に引き上げる迷惑行為です。

.htaccessでの締め出し

USER AGENTで有名どころのDLツールをお断り。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*【USER AGENTの文字列】.*$ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*【USER AGENTの文字列】.*$ [NC]
RewriteRule .*$ http://www.google.co.jp/ [L]
</IfModule>

こんな感じで【USER AGENTの文字列】にHitするものがあればGoogleさんへ
飛ばしてお引き取りしてます。

iptablesでの締め出し

# 1秒間に○回を超える80番へのリクエストはログを記録して破棄
# ※DLTool攻撃対策
iptables -N LOG_DLTOOLDEATH
iptables -A LOG_DLTOOLDEATH -m limit --limit 1/s --limit-burst ○ -j ACCEPT
iptables -A LOG_DLTOOLDEATH -j LOG --log-prefix '[IPTABLES DLTOOLDEATH] : '
iptables -A LOG_DLTOOLDEATH -j DROP
iptables -A INPUT -p tcp --dport 80 -j LOG_DLTOOLDEATH

※「–limit-burst ○ -j ACCEPT」の「○」に回数を数字で指定
例:「–limit-burst 5 -j ACCEPT」
これで1秒間に指定した回数のリクエストを送ってきたら接続を拒否されます。

その他の方法での締め出し

Apacheのモジュールでmod_dosdetector(DOS攻撃対策)やmod_limitipconn
(同時ダウンロード数制限)を導入するのも効果的です。
さらにSWATCH(ログ監視ツール)で監視してFWでカットさせるのもいいかもです。
また、DLツールにはクッキー非対応の物があるのでDL時にクッキーを発行して
あるかないかのチェックをさせるのもいいかもです。

弊害?

iptablesでの締め出しの場合、全パケットを審査するので・・・
表示速度が落ちます(;゚ロ゚)
しかしかなりのDLツールを閉め出せます。
効果>利便性 となっていまいます(;´Д`)

また、SWITCHはあまりシビアな設定にすると・・・・
メモリをスワップまで食いつぶしてくれることになります。
#iptablesでの締め出しを未適用の時。
処理が追いつかないで鯖が死亡とかになります・・・。

その他

これ以上の締め出し設定は利便性がさらに犠牲になるので無理でしょうね。
効果>>>利便性 みたいな感じに?
これ以上する場合は、鯖の分離(Web用とデータ置き場用)にして・・・
ルーターもいいやつに買い換えてとかしないと駄目そうです。

まぁ素人が設定してるのでプロからしたら、なんちゅ~設定してるんじゃ!
ってなるかもでしょうけどね(;゚ロ゚)

「DLツールの防ぎ方?」 について、Twitterでつぶやく

関連記事

コメントを書く

メールアドレスは公開されません。
*」は必須項目です。

*
*

トラックバックを送る

トラックバック送信先URL
言及リンクが含まれないトラックバックは削除する場合があります。
DLツールの防ぎ方? from りでぃすとりびゅ~しょん