ボットのアクセスでデータ転送量10GB越えしてた話

くらし

最終更新日:2024/10/25

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

追記:2024年10月25日

下記の方法だけではfacebookのbotは止まらない(なんとrobots.txtを読まない!)ので、htaccessで対応する必要がありそうです。

下記にもhtaccessの例はありますが、下記のコードでは不十分、というか今回facebookがホスト名を引けないIPアドレスでbotしてきた(もうほぼスパムだしサーバー攻撃ですよね…これ)ので、さらにユーザーエージェントでもアクセス制限するようにしたhtaccessのコード例を改めて載せておきますね。

htaccess

SetEnvIf User-Agent "facebookexternalhit" spam

order allow,deny
allow from all
deny from .fbsv.net
deny from env=spam

1行目と6行目を下記コードに追加した形。

やってる事は、1行目でアクセスしてきた人(bot含む)のユーザーエージェント情報を見て、その中に「facebookexternalhit」の文字が入っていれば「spam」っていう環境変数をセット!んで6行目で環境変数「spam」が設定されてたらdenyするよ!って言ってます。

つまりまとめると「ユーザーエージェントにfacebookexternalhitという文字が含まれてたら拒否するからね!」ってコトになります。ちなみにですが「spam」の文字は何でもオッケーです。「block」でもいいし「sugoi_egui_bot」でもいいです。

このブログのほかにも趣味で作ってるサイトがいくつかあるんですが、そのうち1個へのボットアクセスが毎日10GB超えてた…、というお話です。

レンタルサーバーさんから一時的に制限食らってようやっと気づく始末。サーバー管理画面やメールで通知してくれたらいいのに、してくれないっぽいです。

そしてそんな10GBも毎日クロールしてくるなんてどういう違法なボットなの?と思ったんですが、なんと違法じゃなくてフェイスブックのボット(サーバーのアクセスログ見ると「facebookexternalhit」っていうユーザーエージェント名のボットで、ホスト名は「fbsv.net」でした)。

ここではボットのアクセスが多すぎてサーバーの負荷がすごくなったときの対処法、というかrobots.txtの書き方とhtaccessの書き方を両方紹介しますね。

robots.txtの書き方

例としてフェイスブックのボット(ユーザーエージェント名「facebookexternalhit」、ホスト名「fbsv.net」)をはじくrobots.txtの書き方を紹介しますね。

robots.txt

User-agent: facebookexternalhit
Disallow: /

User-agent: *
Allow: /

ファイル名をrobots.txtとしてファイルを作成して、その中身に上記をコピペ。そしてホームページのhtaccessと同じ場所に置けばオッケーです。

置き場所については上記はちょっとざっくり言い過ぎで、本当はワードプレスとかlaravelとか使ってるフレームワークで変わってきます。laravelだと「public」フォルダ直下ですし、ワードプレスだとどうやらプラグイン経由でrobots.txtを編集する必要があるみたい(ワードプレスの場合はrobots.txtというファイルが実際に存在するわけじゃなくて、robots.txtが必要になった時々でワードプレス内部で自動的に生成してるらしいです)。

そもそもrobots.txtとは?
robots.txtはボットにどうやって自分のサイトをクロールしてほしいかを伝えるファイル。人が見る時には一切関係ないやつです。上の例だと1,2行目が「facebookexternalhitさんはクロール禁止!」と言ってる個所で、4,5行目が「それ以外のボットさんはクロール自由にしてね!」と設定してる事になります。
「Disallow:」が空白の場合は?
laravelのrobots.txtの話なんですが、初期状態で作られてるrobots.txtは「Disallow:」の値が空白なんですよね。空白だとどういう意味になるんだろ?と調べてみたところ、これはルールを無視、つまり何も気にせずクロールしまっせ!という事になるんですね。つまり何もrobots.txtに記述してない、そもそもrobots.txtを置いていないのと同じってコト。グーグルさんに答えが載っていました。

htaccessの書き方

次にアクセス制限といえばhtaccess!という事でこっちの書き方も。でもフェイスブックは悪質なボットじゃないと思うんで、上のrobots.txtだけでオッケーだとは思うんですが、一応、ですね。

order allow,deny
allow from all
deny from .fbsv.net

これをhtaccessに追記すればオッケー。

1行目でアクセス制限の順番を指定してて、今回の場合だと「最初に許可する一覧書いて、後から個別に制限するリストを書くからねー!」といっています。

2行目は許可する一覧を書いています。一覧といっても1行だけなんですがallをallowしているんで日本語に直すと「どんとこいっ!どんなIPアドレスでも受け付けるぜ!」といっています。

で3行目が拒否する一覧。こっちも一覧といって1行だけなんですが、今回フェイスブックのボットからのアクセスをはじきたいんで、フェイスブックのボットのホスト名である「.fbsv.net」を指定。日本語に直すと「あ、全部受け付けるって言ったけど、「.fbsv.net」だけは拒否するからっ!」といっています。

「.fbsv.net」とドットが冒頭についているのは「○○○.fbsv.net」とか「△△△.fbsv.net」とかをまるまる全部弾く書き方になります。

まとめ

ボットによるアクセス数がすごすぎてサーバーに負荷がかかりすぎている時の対処法について書きました。

robots.txtの方だけで本来はオッケーなんですが、一応保険でhtaccessの方の書き方も見ました。今回はフェイスブックという悪質じゃない(でも毎日10GBもクロールしてくるのはやってることはえげつない気がしますが…)ボットなのでrobots.txtの中身をちゃんと見てくれるはずですが、悪質なボットはそもそもrobots.txtの中身なんて見ませんから、そういう場合はhtaccessで弾くのがおすすめです。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /