MastodonサーバーでAIクローラーをブロックする:Nginx版
AIクローラーによる過剰なスクレイピングでサーバーが過負荷になった経験に基づき、Nginxを使ってMastodonサーバーでAIクローラーをブロックする方法を紹介します。具体的な手順として、nginx-block-ai-bots.confの使用とrobots.txtの更新を説明し、クローラーの問題を軽減します。
夜中にサーバーからアラート通知を受け取るほど最悪なことはほとんどありません。冗長構成は機能しているか、消火器を取るべきかと頭が巡り、ベッドで光るSSHセッションが配偶者を起こしてしまうことを知っています。そうなれば問題が二つになります。
先日、私にそんな出来事が起こりました。なんと、Mastodonサーバーを動かしている質素なシングルインスタンスでのことです。このサーバーはリソースが非常に少なく、ほとんど必要ありません。私だけが毎日アクティブユーザーで、他の家族はたまに使う程度です。負荷は問題になりませんが、その夜、何かがネットワークを非常に不安定にしていました。
それはAIでした。もちろんAIです。具体的には、AIクローラーが理由もなくひたすらアクセスしてリソースを消費していました。以前から気づいてはいましたが、自分のMastodonサーバーで見つけたのは初めてです。
対抗するため、すぐにMastodonのNginx設定にincludeを追加してAIクローラーをブロックしました。ベースにしたのはnginx-block-ai-bots.confで、他のインフラでもフロントとして使っているものです。
Mastodonのドキュメントにはこれに関する具体的な説明はありません(あるはずがありません)。しかし、避難所を求める人のために、これが役立つことを願います。
Mastodonサーバーで、ai-robots-txt/ai.robots.txtリポジトリをクローンして関連するnginx-block-ai-bots.confを入手するか、curlスクリプトを書いてcronジョブで毎週取得してください。
MastodonのNginxインストールドキュメントに従っていれば、/etc/nginx/sites-available/mastodonまたは関連するNginx設定ファイルがあるはずです(私の設定はドメイン名ベースでバーチャルホストを設定しているため異なりますが、どこかに必ずあります)。
そのファイルには、次のようなサーバーブロックがあります:
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; ssl_protocols TLSv1.2 TLSv1.3; # などなど }
そのサーバーブロック内にnginx-block-ai-bots.confへのincludeを記述します:
server { # できるだけ多くのAIクローラーをブロックして、$$$$を支払わないようにする include /your/path/here/nginx-block-ai-bots.conf; listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; ssl_protocols TLSv1.2 TLSv1.3; # などなど }
Nginxをリロードします(systemctl reload nginx.serverなど、サーバーの設定に従ってください)。
以上です。おまけとして、${Mastodonのディレクトリ}/public/robots.txtを更新し、ai.robots.txt/robots.txtのリストを追加することもできます。
これでその夜の波は収まり、再び眠りを妨げられることはありませんでした。これはますます深刻化する問題であり、経験不足で無頓着、そして露骨に搾取的な企業やスタートアップが運営する悪質なクローラーとルールとの戦いであり、最終的には負ける追跡でもあります。
ハッカーよ、こんなふうにウェブをスキャンするものではない。ですから、シールドを上げて。