kmyblueの『NGルール』設定方法
kmyblueのバージョン11.3で「NGルール」機能が追加されました。
これ、2024年の3月ころに搭載した機能で、2月のスパム騒動を受けて作ったものです。
NGワード機能ならすでにあったんですが、2月のスパムはNGワードで規制しようとすると他の正常な投稿まで規制されてしまうというか、
正常な投稿を最大限残しつつ、規制したいものだけ規制する、誤検出率をできる限り下げて検出率をできる限り最大化するのを目的に作りました。
ですがこのNGルール機能は設定項目が非常に多くたいへん複雑です。NGルールのメリットを最大限に活かすためにはそれなりの知識が必要になります。
スパム対策って、あんまり外に出したくないんですよ。対策されてしまいますから。なのでこういう記事もあまり書きたくなかったんですが、10月のスパム騒動をうけて、せっかく便利な機能があるのに使い方がわからなければないのと同じと思い至りまして、こうして記事を書きました。
NGルールは、Mastodonフォークであるkmyblueに標準搭載されています。つまりサーバーの設定を変えたりUNIXのコマンド打ったりむずい設定しなくても、ブラウザから簡単に設定できるものです。
その性質上、あまり凝ったことはできませんが、NGワードと比べるとできることはちょっとだけ多いです。
NGルールの設定方法
「入力:複数チェックボックス」にわりと重要なことが書いてあるので、最低限そこだけは読んでください。
NGルールを設定するための権限
「NGワードを管理」権限が必要になります。これがないとNGルールは設定できません。
ですがこの権限、Adminロールでは、バージョン15.0 LTS以前で立ち上げたサーバーではデフォルトでオフになっています。AdminからNGルールを設定したい場合、OwnerでログインしてAdminの権限を追加する必要があります。
あとModeratorにはデフォルトで権限ありません。
どうしてデフォルトでオフにしたかといいますと、悪意あるモデレーター、信頼できないモデレーターにはあまり使わせたくない設定なので。
変に設定いじられると正常な投稿がどんどん見えなくなっていきます。しかも、見えるはずのものが見えないのに気づくにも時間がかかります。そんなわけで、権限ばらまくときはそのへん気をつけてくださいねと。
正規表現も下手に書くとサーバーの負荷になります。サーバーとおはぎの可用性を下げる攻撃の余地がありますので気をつけてください。
NGルールはモデレーションメニューにあります。
条件の組み合わせ
NGルールでは「アカウント」「投稿」「リアクション」の3つのセクションがあります。このうち規制されうるのは、以下の条件を満たしたものです。
「アカウント」「投稿」の両方を満たした投稿
「アカウント」「リアクション」の両方を満たしたリアクション
アカウントが単体でブロックされることはなく、投稿やリアクションだけがブロックされます。
また、各セクションにあるすべての設定項目にマッチすることで、初めてそのセクションの条件を満たしたものとみなされます。設定した条件に1つでも当てはまらなければ、条件を満たしていないことになります。
入力:複数行テキスト
入力欄には種類がありますけども、複数行テキストの場合、1行に条件を1つずつ入力します。条件が複数あれば、そのうちのどれか1つを満たしていればOKです。
例えば以下画像の場合、IDが「askyq」または「ohagi」または「official」であれば条件を満たしたものと見なされます。
そして、例えばこのような入力の仕方をすると、ドメインが「kmy.blue」または「example.com」、つまり規制されるアカウントは以下の6つになります。
@askyq@kmy.blue/@ohagi@kmy.blue/@official@kmy.blue/@askyq@example.com/@ohagi@example.com/@official@example.com
で、空欄の場合、その条件は無条件で通過したものとみなされます。この場合、全てのドメインが条件を満たすものとみなされます。
複数行入力で最も重要なポイントは、正規表現が使えるということです。行頭を「?」で始めると、2文字目以降が正規表現と見なされます。
例えば以下の場合、「abc4」や「abc35」がマッチして、「abcd」「abc」はマッチしません。
NGルールにおける正規表現では「^」「$」を多用するかと思います。
正規表現を設定する前に、Rubularなどの正規表現チェッカーであらかじめ確認しておくのをおすすめします。(冒頭の「?」はRubularでは入力せずNGルールでは入力します。ミスに気をつけて)
RubularはNGルール設定画面からもリンクされています。
正規表現を活用することで、例えば文字数とか使われる文字とか、多種多様な指定が可能になります。
正規表現知らない人は勉強することをおすすめします。
入力:有り無し
アイコン画像、ヘッダー画像など一部の設定項目では、このような選択肢になります。
不問・・・あってもなくても条件を満たします
有り・・・あった場合のみ条件を満たします
無し・・・ない場合のみ条件を満たします
入力:数値
-1・・・この条件は無条件で満たされます
0以上の値・・・その数値が条件判定に使用されます
例えば画像の「メンション数の上限」について、
「-1」を指定するとメンションの数に関係なく条件を満たします。
「3」を指定すると、メンションの数が3より大きい場合にのみ条件を満たします。
「0」を指定すると、メンションが1つでも指定されていると条件を満たします。
入力:複数チェックボックス
公開範囲、検索許可などはデフォルトでこうなっています。
これ、デフォルトでは全てにチェック入っていませんが、「常に条件を満たさない」ということになります。つまりここにちゃんとチェックを入れないと、他の条件をちゃんと入力していてもNGルールは動作しません。
複数行テキストを空にした場合と感覚が違いますし、今後改善の余地はあると思います。
NGルールを設定する場合、必ずここに1つでもチェック入っているか確認するようにしましょう。
よくわからなければとりあえず全部にチェック入れておきます。
リアクションについて
「リアクション」セクションがありまして、例えば特定の条件を満たしたアカウントによるお気に入りを拒否するとかができますけども、これ、自分が実際に使ってみたところ、どう設定しても誤検出やおはぎがわりと多かったです。
これは、まあ、リアクションを用いたスパムが実際に出てきてから使うでもいいんじゃないかなと思ってます。
検出履歴を見ながらNGルールを調整する
「ここ一週間で~」をクリックすると、検出履歴を確認できます。誤検出がないかをここで確認して、必要に応じてNGルールを調整する形での運用になります。
公開投稿、非収載投稿の場合、投稿本文と投稿したアカウント、元の投稿のURIが表示されます。
非公開投稿の場合、「このアカウントの投稿がブロックされましたよ」とだけ表示されます。
アカウントが表示されていないものは、リモートでアカウントが削除されたものです。
この履歴は1週間たつと消えてしまいます。
設定例。。。
書こうと思ったけど対策される気がするので、申し訳ないですが各自考えてください。 @askyq@kmy.blue あてに質問してきたら、あまり複雑でなければできるだけ答えます。
対策されると、正常な投稿が誤って検出されるようなルールを書かなければいけません。NGルールを回避できる対策はいくらでもあります。
その場合、最終的にはホワイトリストを使って防衛する形になります。
といっても、新しくリモートで作られたアカウントを自分のサーバーで保留状態(=事実上のサスペンド)にするという設定でして、指定したドメインのアカウントであれば無条件で承認するんですけども、これをホワイトリストと呼んでいるだけです。
最後に
冒頭にも書きましたけど、やっぱり自分でプログラミングできる人は自分の言葉で調整したほうが一番強いと思います。