まいける's Tech Blog

LAMP関係のメモなどを不定期に掲載します

中国方面からの Bittorrent 攻撃を防ぐ

 運用しているサーバ宛に

xxx.xxx.xxx.xxx - - [18/May/2015:03:18:27 +0900] "GET /announce/?info_hash=(以下略) HTTP/1.0" 404 371 "-" "Bittorrent"

こんな感じのログが大量に残されていました。見る人が見ればわかるように、Bittrorrent によるアクセスです。

 当然のことながら、運用しているサーバでは Bittorrent を立ち上げていません。あまりに多くのホストから大量のアクセスを受けるので、原因を調べてみたところ、中国の DNS サーバが(わざと?)間違った IP アドレスを返しているようで、その間違えて返す先がうちのサーバになっている様子。

 Fail2Ban を使って頻繁にやってくるホストについては、アクセスを遮断していたのですが、減りそうな気配もないため、さらに調べると、Bittorrent の中の人が、404(Not Found)を返すより、410(Gone)を返したほうが早く収束すると書いていたので(A Note on the DDoS Attacks)、それに従って

<Location ~ "^/announc">
ErrorDocument 410 "d14:failure reason13:not a tracker8:retry in5:nevere"
</Location>

を追加したのですが、テストしても 404 を返すばかり。
 実はこのディレクティブ、410 のエラーになったときのメッセージを変更するだけで、ステータスコードを変更する指定をしていないのです。

 なので、

RewriteEngine On
RewriteRule ^/announc - [G]

<Location ~ "^/announc">
ErrorDocument 410 "d14:failure reason13:not a tracker8:retry in5:nevere"
</Location>

のように、最初に mod_rewrite を使って指定の URL に対するアクセスに対して 410 を返したうえで、ErrorDocument の指定をする必要があります。