さてと、相変わらずサーバへのbotアクセスとの戦いは続いております。
アクセス数ナンバー1じゃなくて負荷率ナンバー1という不名誉な称号を頂いている今。
同じサーバーに暮らしてはる皆さんには何とも申し訳がありません。
そうです、重くしてるのは僕です。

対策 ― BUbiNGというBotからのアクセス急上昇中

この前のrobots.txtでこのBUbiNGというBotは弾く事が出来たのですが、サーバログを見てるとどうもWordpressの画像アップロードフォルダに凄まじいまでの直アクセスがあるんですな。
最近はナリを潜めましたが、まとめ系のWebなんぞは画像だけを直リンして使う輩も多かったりするし、これは直接対策したってもええんちゃうやろかと思ったわけです。

そこで.htaccessに以下の記述をします。

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://sample-hoge.com [NC]
RewriteCond %{HTTP_REFERER} !google\. [NC]
RewriteCond %{HTTP_REFERER} !yahoo\. [NC]
RewriteCond %{HTTP_REFERER} !bing\. [NC]
RewriteCond %{HTTP_REFERER} !search\?q=cache [NC]
RewriteCond %{HTTP_USER_AGENT} !(twitter|facebookexternalhit|google) [NC]
RewriteRule \.(jpg|png|gif)$ - [F]

基本的にアクセス遮断のやり方は「根こそぎ遮断しておいてから、許可するものだけを書く」というやり方なので上記の書き方を。
まず、2行目は自分のサイトのURLに書き換えて下さい。
これは自サイトのドメインからのリファラーがあるものだけアクセスを許可する、という意味です。
なので、画像のURLを直接ブラウザで表示させようとしても表示されません。

3-5行目はGoogle、Yahoo!、Bingの画像検索の表示は許可する、という事。
6行目は検索エンジンのキャッシュ表示の際に画像表示を許可するか、という事。
両方とも必要じゃなければ削除しても大丈夫。

7行目はSNSへのカード表示を許可するか、という事。
このご時世、これは大事なので必ず許可しておきましょう。
これはTwitter、Facebook、Google+の3つが書かれています。

今回は書きませんでしたが、検索サイトのクローラーbotをUser-Agentで許可する書き方は以下。

RewriteCond %{HTTP_USER_AGENT} !(|googlebot|yahoo|bingbot) [NC]

しかし、最近はUser-Agentを偽装してるBotもめちゃめちゃ多いので悩める所です。
今回はこれは外す事にしました。

そして、最終行は「以上の条件を満たしたアクセス元に対してどのファイルの表示を禁止するか」です。
画像アップロードフォルダなのでJPEG,PNG,GIFの3つで大丈夫でしょう。
403エラーを返すので、直リンされてるサイトには画像が表示されません。

この.htaccessをWordpressの画像アップロードフォルダのルートにアップします。これ大事。
初期設定ならWordpressの設置ディレクトリから見て/wp-content/uploads/になります。

これでしばらく様子を見てみる事にしましょうか。。
それにしてもWordpressってめっちゃめちゃ狙われてるんやなあ、と今回の騒動でひしひしと感じました。