Pleromaのスパム対策

Posted: 2024/02/22
Category: 知性

更新履歴

Pleroma でスパムフィルターとか設定したい場合、MRF(Message Rewrite Facility)で書き換えやreject等のルールが投入できるのでこれを使う。

https://docs-develop.pleroma.social/backend/configuration/mrf/

Admin FEが有効ならSettings -> MRFで設定できる。

Policiesで各種ポリシーの有効・無効化設定できるので、必要そうなものを選んで有効にする。ここでは例としてKeywordPolicyを追加したとする。

Policy追加してSubmitするとMRF設定内にキーワード設定欄が出現するので、Reject欄に受信を拒否したいキーワードを並べていくと当該文字列を含むポストの受信を拒否できる。正規表現も使える。受信拒否ではなく特定文字列だけ隠したいとかであればReplaceに正規表現のパターンを入れれば良い感じに書き換えられるはず(未検証)。

https://gitlab.com/soapbox-pub/rebased/-/blob/main/CHANGELOG_soapbox.md#unreleased

この記事は執筆日現在で流行しているFediverseスパム祭りに対抗するために投入した設定をまとめるために書いた。基本的に手の内明かすのはアホなんだけど突破されたからといって別に問題ないのでどのフィルターが有効だったか以下にまとめる。

Pleromaドキュメント内のConfiguration Cheat Sheetにポリシーごとの効果が記載されているのでこれを見た方が早いかもしれないが、結局は細かい設定見てね、みたいなのも多いので、とりあえず以下の紹介を読んだ上でAdmin FE上で有効にするポリシーを選び、細かい設定内容が知りたければConfiguration Cheat Sheetを当たるという感じで良いんじゃないかと思う1

KeywordPolicy

上でも紹介した基本中の基本。基本だが大変有効なのと設定しやすいのがメリットであり、一方で相手も対応しやすいのが最大のデメリット。 一手目としては最適だと思う。

SimplePolicy

Reject欄にインスタンスのFQDNを突っ込むことで特定インスタンスからのポストを全拒否する。当該インスタンスの正規ユーザーからのポストも拒否してしまう大変乱暴なポリシーだが無法地帯からの攻撃を防御する際には必要と言える。

一方で世界には無法地帯がいくつも存在するので、やる気のあるスパマーがいろんな無法地帯を渡り歩いていろんなインスタンスからスパムを投げてきた場合はあんまり効果がないことも問題点として挙げられる。

HellthreadPolicy

大量に@usernameを含むような地獄っぽいメンションをフィルタするためのポリシー。例えば10個以上@を含むようなポストについては受信拒否、といった制御ができる。

これの問題点は正規ポストとスパムポストの線引きが難しく、かつ相手も制限を回避しやすいことだ。@減らすとスパム投稿の効率は悪くなるだろうがそもそも捨て垢はいくらでもあるはずなのでスパマーとしては回避しやすいポリシーかもしれない。

AntiMentionSpamPolicy

実のところこれはPleromaに標準搭載されているものではなく、Pleromaをforkして作られたRebased特有?のポリシーであるようだ。自分はフロントエンドとしてSoapboxを使うためにバックエンドをPleromaからRebasedに置き換えていたのでいつの間にか使えるようになっていた。Rebasedからソースコード持ってきてPleromaをリビルドすれば組み込めるんだろうけど試していない。 だいぶ最近開発されたポリシーのようで、Rebased v3.0.0にはまだ含まれていない。Rebasedを導入する際もGitでmainブランチを持ってくる必要がある。

ソースコードを見る限り、どうも初めて自インスタンスにポストが流れてきたユーザーからのMentionについてはReject、という動作をしているように見える。

フォロー外からのMention全無視に近いような感じもするが、たぶんRepostとかで以前にポストが1つでも流れてきていれば許可という動作をするんじゃないかなと推測している。まあまあ偽陽性出そうな感じはするけどフォロー外全無視よりは副作用少ないんじゃないかなという感じ。


  1. 結局挙動がよくわからんみたいなことは起きるので最初からGitLabで検索かけてMRFのコード読んだ方が早いかもしれない。例→https://git.pleroma.social/search?search=AntiLinkSpamPolicy&nav_source=navbar&project_id=2&group_id=3&search_code=true&repository_ref=develop ↩︎