任意のIPアドレスからの新規登録を防ぎたい

自宅サーバーなどでサービスを運営していると、少なくない数のスパムや荒らしの登録という事象に見舞われます。

運用をグループで行っているような大規模サーバーや企業サーバーなどでは24/7で監視でき、即座に対応しているのでしょうが、私のような個人が趣味で運営しているような泡沫サーバーでは、サーバーの管理にかけることのできる可処分時間というものがあまりありません。

しかしながら、迷惑な方々は大規模鯖や個人鯖関係なしにやってきて、荒らしてきます。
そのため、自動的に対応できる方法を考えなければなりません。

CloudflareのWAF

jo3qma.comcopi.peでは主にDDoS対策としてCloudflareを導入しています。
Cloudflareでは無償プランでも基礎的なCDNを提供してくれます。

Cloudflareの提供している機能の一つにWebアプリケーションファイアウォール(WAF)というものがあり、悪意のあるリクエストなどをブロックしてくれます。

WAFとはSQLiやXSS、ディレクトリトラバーサルのようなリクエストを未然に防いだり、とあるルールに沿ってリクエストをさばいたりブロックしたりしてくれるものです。

こちらも無償プランでも基礎的な機能は提供しており、その範疇で任意のIPアドレスからの任意のアクセスを弾くということができます。

これを利用して、迷惑な人の新規登録を防ごうと思います。

Misskeyの登録のためのエンドポイント

雑に解析したら/api/signupというURIにPOSTすることで登録処理を行っていることがわかりました。

雑に対応するためにはということはこのURIに対するPOSTアクセスを拒否してやれば良さそうです。

WAFのカスタムルール

Cloudflareダッシュボード => Webサイト => セキュリティ => WAF
からカスタムルールを作成可能です。

受信要求が一致する場合...の項目を3つANDで接続し、

フィールド オペレーター
完全URI 等しい https://example.com/api/signup
リクエストメソッド 等しい POST
ソースIPアドレス 等しい 任意のIPアドレス

という風にに設定してやるとよさそうです。

IPアドレスが複数ある場合はリストを作成しておき、リストに含まれるを選択すればよいと思います。

アクションはブロックでよいでしょう。

テスト

実際に弾かれるかどうか、テストしてみました。
自分はIPv6でアクセスすることが可能なので、自分のIPv6アドレスを指定しルールを設定します。

その後、いつも通り登録の手順を踏むと、登録画面の「始める」ボタンを押下しても、リクエストが拒否され、
その後の登録プロセスに進むことができなくなります。

とりあえずの対策としてはこれで良さそうです。

誤ブロック対策として、回避策を提示するのが親切なのでしょうが、そのへんの処理はCloudflareのしごとではなく、MisskeyのしごとなのでMisskey本体に手を加える必要がありそうです。

この辺はおいおい・・・。

まとめ

今回はIPアドレス単位で新規登録を防ぎましたが、条件に国を選択することができるので、国別ブロッキングなんてことも可能ですね。

主に日本人向けにサービスを提供しているようなところでは、こういった方法で望まぬ登録を未然に防ぐのもよいかもしれません。