Mastodonにおけるスパム対策

# はじめに

公開していると、どうしてもスパムがやってきます。
それらの対策について、ケースごとに紹介します。

**スパマー許すまじ**

（他にやれそうなことがあったら教えてください）

※ この記事は、項目肥大化により [Mastodon 保守メモ](https://qiita.com/kumasun/items/bf4997f181f893130041) から分離したものです。


# スパムアカウント対処の重要性について

スパム投稿と一口に言っても、迷惑な宣伝スパムだけでなく、フォロースパム、個人攻撃、ヘイトスピーチなど様々な種類があるが、どれも好ましくはない。

自身のサーバーにスパムアカウントが作られ、有害な活動が行われた場合…

* 自分のサーバー等のリソースを不当に利用される可能性がある
* 自他サーバーの利用者に迷惑が掛かる可能性がある
* 想定外の使われ方をした結果、法的リスクを抱える可能性がある

などなど害しかないので、予防と封じ込めを徹底しなければならないと考えている。


# 予防

自分のサーバーをスパマーの巣にしない、させない
居場所を守る

## ユーザーができること

* 明らかに怪しい投稿やユーザーを見たら躊躇わず通報する
 通報することで、管理者やモデレータに気づきを与えることができる。
とはいえ、乱発は禁物。
通報を乱発すると、それはそれでモデレータの手を煩わせることになってしまう。(逆にスパム扱いされてしまうかも)

## 管理者ができること

* できる限りアクティブであること
モデレータがアクティブに活動していないと、情報収集や有事の際の初動が遅れて手遅れになる可能性がある。
せっかく立てたサーバーなんだから、どんどん使おう。

* サーバーOSやMastodon本体のアップデートを怠らない
ソフトウェアの脆弱性を突くタイプの攻撃に備える。

* 機械的な登録を防ぐ
新規登録を「承認制」とすることで、登録者を事前にレビューすることができる。
1件1件人の目でチェックが必要となるため、大規模サーバーでは向かない手法かもしれない。
また、後述するCAPTCHA認証(hCAPTCHA)などを導入することで、機械的な登録をある程度防ぐことができる。

* 攻撃の兆候を見逃さない
WebサーバーやWAFのログを確認し、異常なアクティビティが発生していないかチェックする。
たとえば日本語話者向けのサーバーの場合、海外からのアクセスはWAFでチャレンジを表示させるなどの方法も考えられる。




# 初動

スパム投稿を発見したときの行動について

## 他のサーバーからスパム投稿が送られてくる場合

連合を組んでいる他のサーバからスパム投稿が飛んでくることがあります。

### ユーザーができること

* **慌てない。反応しない。**
 慌てふためいている様子を見て楽しむ、いわゆる愉快犯も存在する
 そのような相手を利することがないよう、リアクションをとらないことが重要。
* 問題のユーザーを「転送」を有効にして通報する
 他サーバのモデレーターが適切に判断できるよう、必ず理由を添える。
 相手サーバーのモデレータが使っている言語に翻訳したものを用意すると好ましい。
 相手方のネイティブ言語が不明な場合は、英語を用いればよいかもしれない。
* ミュートやブロックを行って自衛する

### 管理者ができること

* 通報内容を確認し、自身のサーバーのルールに違反していると判断した場合は、投稿の削除やサイレンス、サスペンドなど適切な処置を講じる
* 相手方のサーバーがスパムアカウントだらけになっており、まるごと封じたい場合は、「既知のサーバー」より「ドメインブロック」を行う
* **対応内容について迂闊に公表しない**
 「〇〇サーバーをドメインブロックした！」などと大っぴらに公表しない。
 スパマーがそれに気づいたら違う手法に出てくるかもしれないため、情報の公開には慎重になる。
 ただし、内外に対して対応中である旨を主張する必要はあるため
「状況について把握しており、順次対応中である。通報に協力してほしい」といった程度に留めるとよいかもしれない。


## 自分のサーバーにスパムアカウントが作られた場合

### ユーザーができること

* ユーザーを通報する
 モデレーターが適切に判断できるよう、必ず理由を添える。
 不快であれば、ミュートやブロックを行って自衛する。

### 管理者ができること

* 通報内容を確認し、自身のサーバーのルールに違反していると判断した場合は、投稿の削除やサイレンス、サスペンドなど適切な処置を講じる
* 機械的にアカウントを作るれてしまって収拾がつかなくなってしまった場合は、いったん「サイト設定」内の「新規登録」を「誰も許可しない」もしくは「承認制」に設定し、順次スパムアカウントの「サスペンド」「活動停止」を実行する
* **油断しない**
 今あるスパムアカウントの対処し終わったからとって、何も対策せず再解放すると、再び嵐のようなスパム登録が行われる可能性が高いので、後述するメールブロックリストの設定や、アクセス制限を設定してから解放する。




# 対策

初動でスパムアカウントの封じ込めを行いつつ、継続的にやってくるであろうスパムに対抗処置を講じていく。


## ユーザができること

* **特にありません**
 前述の通り、悪質な投稿を見つけたら通報機能で自他サーバーのモデレーターに教えてあげたり、ミュートやブロック機能を活用して自衛しましょう


## 管理者ができること

外部サーバーに対して行える有効な対策はありません。
自分のサーバーにスパムアカウントが作られ、加害者側に回らないよう対策を講じる。

### CAPTCHA認証(hCaptcha)の導入

MastodonはCAPTCHA(画像によるチャレンジレスポンス認証)に対応している。

[Captcha - Mastodon documentation](https://docs.joinmastodon.org/admin/optional/captcha/)

hCaptcha公式サイトにてユーザー登録し、アクセストークンを設定ファイル(`.env.production`)に書き込むことで有効化できる。

これにより、機械的な登録について大幅に排除できると期待できる。


### メールドメインブロック

メールドメインブロックとは、スパムアカウントの登録に使われたメールアドレスのドメインをまるごと弾く設定のこと。
特定のドメイン、もしくはサーバー上のメールアドレスからの登録を阻止することができる。


#### Step1: メールアドレスのドメイン部を調べる

まず、スパムアカウントのメールアドレスのドメイン部を調べる。
たとえば、 `alice@evil.example.com` というメールアドレスが使われていた場合
ドメイン部は `evil.example.com` である。
まずこれを控えておく。

#### Step2: メールドメインブロックの追加を行う

**Web UIから設定する場合**

1. 管理者権限でMastodonへログインする
1. [設定] → [モデレーション] → [メールブラックリスト] と辿り、メールドメインブロック画面を表示する
1. [新規追加] ボタンを押下する
1. [ドメイン]欄に、Step 1 で調べた「メールアドレスのドメイン部」を記入する
1. [ドメインのMXレコードとIPアドレスを含む] にチェックを入れる（任意だが推奨）
1. [ドメインを追加] ボタンを押下する

**コマンドライン(tootctl)で設定する場合**

`tootctl email_domain_blocks add` を用いる。
参考資料 → [勝手 Mastodon tootctl リファレンス - メールドメインブロックを追加する(add)](https://qiita.com/kumasun/items/870769d7db4d95cde238#%E3%83%A1%E3%83%BC%E3%83%AB%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8Baddv320rc1)


#### おまけ： 捨てアドサービスについて

スパマーは、登録の際に匿名性を担保するために捨てアド（匿名で一時的に使えるメールボックスサービス）を使うことがある。
これらのドメインをメールドメインブロックすることで、被害軽減に役立つかもしれない。

[Google検索 - disposable email domains](https://www.google.com/search?q=disposable+email+domains)



### IPアドレスでのアクセス制限

特定のIP、もしくはIP範囲からのアクセスをWebサーバー側で阻止する。

性質上、巻き添えが発生する可能性があるため、どうしてものときの最終手段とした方がよい。



#### Step1: スパマーのIPレンジを調べる

* 「設定」→「モデレーション」画面から該当ユーザを探し、「直近のIP」を控える。(例：`192.168.0.5`)
* IPの範囲を検索し、CIDR表記にする。(例：`192.168.0.0/24`)

[CMAN ドメイン/IPアドレス サーチ](https://www.cman.jp/network/support/ip.html) などを使うと調べられるかも？


#### Step2: IPレンジをIPルールに登録する

**Web UIから設定する場合**

1. 管理者権限でMastodonへログインする
1. [設定] → [モデレーション] → [IPルール] と辿り、IPルール画面を表示する
1. [ルールを作成] ボタンを押下する
1. [IP]欄に、Step 1 で判明したIPアドレス、またはIPアドレスのCIDR表記を記入する
1. [有効期限]、[ルール]、[コメント] を設定する（任意）
1. [ルールを作成する] ボタンを押下する

これで完了。

**コマンドライン(tootctl)で設定する場合**

`tootctl ip_blocks add` を用いる。
参考資料 → [勝手 Mastodon tootctl リファレンス - IPルールを追加する(add)](https://qiita.com/kumasun/items/870769d7db4d95cde238#ip%E3%83%AB%E3%83%BC%E3%83%AB%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8Badd-v330rc1)



#### おまけ： Torについて

アクセス元を隠匿するタイプのネットワーク(Tor)が存在する。
それらは世界中の「出口ノード」と呼ばれるIPアドレスからランダムにアクセスしてくるため、ブロックするにはすべての出口ノードのIPアドレスからのアクセスを拒否するしかない。

ただし、正規ユーザーも巻き込む恐れがあるので、影響範囲を見極めてからブロック処置を行うことが望ましい。

また、Torの出口ノードのIPアドレスは動的に変化するので、できれば後述するWAFによる制限か、あるいはブロックリストを動的に更新するようなバッチを書くことが好ましい。
[Google検索 - tor exit node list](https://www.google.com/search?q=tor+exit+node+list)


### WAF(Web Access Firewall)でのアクセス制限

Cloudflare等のプロキシーサービスに付属しているWAF（Web Application Firewall）を使って、特定のURIへのアクセスを制限することができる。

たとえば登録ボット除けを行うためには
`/auth` や `/auth/sign_up`に対するアクセスに対してCAPTCHAによるチャレンジを付加するなどの方法が考えられる。

実例をnote記事に起こしたので、具体的な設定方法などはそちらへ
→ [(Mastodon)スパマーとの終わりなき戦い #2](https://note.com/kumasunorz/n/n1bd39c3f42a0#aa86i)



# 監視

スパムの動向について、継続的に監視を行う。

自分のサーバーのリソースを極端に食いつぶす(DoS、DDoSといったサイバー攻撃に該当する)状況であったり
管理者やユーザーに危害が及んでいる(脅迫メッセージ等が届いている)場合は
可能な限り情報を保全し、関係機関へ相談・通報を行う。

* [警察庁 サイバー警察局 相談窓口](https://www.npa.go.jp/bureau/cyber/soudan.html)
* [内閣サイバーセキュリティセンター ポータルサイト 相談窓口紹介](https://security-portal.nisc.go.jp/support/)

(他に相談に乗ってくれそうなところがあれば教えてください)


# あとがき

* 自分用にメモした内容です。必要に応じて読み替えてください。
* 使用は自己責任でお願いします。何か不具合が起こっても責任取れません。
* こうしたほうがいいよ的なアドバイス、誤記や記載漏れ、動作の違い等の指摘を頂けると大変助かります。
* 連絡先： [Mastodon1](https://nagoyadon.jp/@kumasun)