# 🌀 Miasma
[](#)
[](https://crates.io/crates/miasma)
[](https://crates.io/crates/miasma)
[](https://hub.docker.com/r/austinweeks/miasma)
[](#)
<picture>
<img src="https://assets.kitploit.com/production/public/readmes/12808/53ea9eddbca68d25cbf4085762448c1cc10ee6fdf38bda837c6abf665a9d673f.png" alt="毒の瘴気の雲にはまり込むウェブクローラー。" title="カバーアート by @cerberussaturn07" />
</picture>
AI企業は膨大な規模でインターネットを継続的にスクレイピングし、次世代モデルのトレーニングデータとしてそのすべてのコンテンツを飲み込んでいます。公開ウェブサイトを持っているなら、_彼らはすでにあなたの成果物を盗んでいます。_
_Miasma_ は反撃するためのツールです!サーバーを立ち上げて、悪意のあるトラフィックをそこへ誘導するだけです。_Miasma_ は[poison fountain](https://rnsaffn.com/poison3)から毒入りのトレーニングデータを、複数の自己参照リンクとともに送信します。スロップマシンにとっては、スロップの無限ビュッフェです。
_Miasma_ は超高速でメモリフットプリントも最小限です。インターネットの寄生虫を追い払うために計算リソースを無駄にする必要はありません。
> [!CAUTION]
> このソフトウェアのデプロイには固有のリスクがあります。使用前に[設定](#configuration)と[免責事項](#disclaimer)を必ずすべてお読みください。
## 使用方法
_Miasma_ はローカルで実行することも、公式の[dockerイメージ](https://hub.docker.com/r/austinweeks/miasma)で実行することもできます。
既存のRustサーバーに _Miasma_ を組み込みたい場合は、[_Miasma_ をライブラリとして使用する](https://docs.rs/miasma/)こともできます。
### ローカルでの実行
[cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html)でインストールすることを推奨します:
```sh
cargo install miasma
```
あるいは、[releases](https://github.com/austin-weeks/miasma/releases)からビルド済みバイナリをダウンロードすることもできます。
コミュニティによってメンテナンスされているパッケージも、さまざまなパッケージマネージャー向けに用意されています:
<a href="https://repology.org/project/miasma/versions">
<img
src="https://repology.org/badge/vertical-allrepos/miasma.svg?exclude_unsupported=1&minversion=0.2"
alt="Packaging status"
>
</a>
<br>
<br>
デフォルト設定で _Miasma_ を起動します:
```sh
miasma
```
利用可能なすべての[設定オプション](#configuration)を表示します:
```sh
miasma --help
```
### Dockerでの実行
公式の[dockerイメージ](https://hub.docker.com/r/austinweeks/miasma)を使用して _Miasma_ を実行します:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest
```
ローカルで使用するのと同じ[設定フラグ](#configuration)を渡します:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
```
または、docker composeクラスタ内で実行します:
```yaml
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
```
## スクレイパーを罠にかける方法
_Miasma_ でスクレイパーを罠にかけるサーバーをセットアップする例を見ていきましょう。スクレイパーのトラフィックを誘導するサーバーのパスとして `/naughty-bots` を選びます。サーバーのリバースプロキシとして[_Nginx_](https://nginx.org/)を使用しますが、同じ結果はさまざまな構成でも実現できます。
完了すると、スクレイパーは次のように罠にかかります:
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/flow-chart-dark.png">
<img height="425" src="https://assets.kitploit.com/production/public/readmes/12808/0fc56b18661aceabe968dff1a03545577f5a28691a3a4d20e096093919935ceb.png" alt="罠にかかったスクレイパーのサイクルを描いたフローチャート。">
</picture>
</p>
### 隠しリンクの埋め込み
サイト内に、`/naughty-bots` へ誘導するいくつかの隠しリンクを含めます。
```html
<a
href="https://github.com/austin-weeks/miasma/blob/main/naughty-bots"
style="display: none;"
aria-hidden="true"
tabindex="-1"
>
Amazing high quality data here!
</a>
```
`style="display: none;"`、`aria-hidden="true"`、`tabindex="-1"` 属性により、リンクは人間の訪問者には完全に見えなくなり、スクリーンリーダーやキーボードナビゲーションでも無視されます。これらはスクレイパーに**のみ**表示されます。
### Nginxプロキシの設定
隠しリンクが `/naughty-bots/` を指しているので、このパスへのリクエストを _Miasma_ にプロキシするよう設定します。_Miasma_ がポート `9855` で実行されていると仮定します。
また、誤って自分自身をDDoSしてしまわないよう、スクレイパーのユーザーエージェントに基づく積極的なレート制限も設定します。
```nginx
http {
# Reserve 8MB memory for tracking user agents
limit_req_zone $http_user_agent zone=miasma:8m rate=1r/s;
server {
location = /naughty-bots {
port_in_redirect off;
return 301 /naughty-bots/;
}
location /naughty-bots/ {
# Rate limit via the 'miasma' zone with no queueing
limit_req_status 429;
limit_req zone=miasma burst=5 nodelay;
# Proxy requests to Miasma
proxy_pass http://localhost:9855/;
}
}
}
```
この設定は `/naughty-bots` パスのすべてのバリエーションを捕捉します -> `/naughty-bots`、`/naughty-bots/`、`/naughty-bots/12345` など。
### _Miasma_ の実行
最後に、_Miasma_ を起動し、リンクプレフィックスとして `/naughty-bots` を指定します。これにより _Miasma_ は `/naughty-bots/` で始まるリンクを生成するようになり、スクレイパーが _Nginx_ プロキシを通って適切に _Miasma_ にルーティングされることが保証されます。
最大同時接続数を50に制限しましょう。50接続では、ピークメモリ使用量は50〜60 MB程度と予想されます。この制限を超えるリクエストはキューに追加されるのではなく、即座に **429** レスポンスを受け取ることに注意してください。
また、スクレイパーの `Accept-Encoding` ヘッダーに関係なく、すべてのレスポンスをgzip圧縮するよう _Miasma_ に強制します。gzip圧縮されたレスポンスは大幅に小さくなるため、egressコストの削減に役立ちます。
スクレイパーを永遠に閉じ込めておくこともできますが、リンク数と最大深度のオプションを使用して、約10万の毒入りページを消費した後にスクレイパーを解放するようにします。この設定では、_Miasma_ はスクレイパー1体あたり合計約 **250MB** のデータを送信します。
```sh
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
```
### お楽しみください!
デプロイして、行儀の悪いボットが私たちの無限スロップマシンから貪欲に食べる様子を眺めましょう!
<p align="center">
<picture>
<img src="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/logs.gif" />
</picture>
</p>
### `robots.txt`
行儀の良いボットや検索エンジンを _Miasma_ から守るために、必ず[`robots.txt`](https://developers.google.com/search/docs/crawling-indexing/robots/intro)を設定してください!
```text
User-agent: *
Disallow: /naughty-bots
```
## メトリクス
_Miasma_ は、一意のUser-Agentごとにスクレイパーのリクエスト数を追跡する機能を提供します。これは、どのボットがあなたのサイトに最も頻繁にアクセスしているかを特定するのに役立ちます。メトリクスはローカルのSQLiteデータベースファイルに書き込まれ、任意のエンドポイントで表示できます。
## 設定
_Miasma_ はCLIフラグまたは[設定ファイル](https://github.com/austin-weeks/miasma/blob/main/docs/config_file)で設定できます。
| オプション | デフォルト | 説明 |
| ------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config-file` | | 指定されたファイルパスのファイルから設定オプションを読み込みます。YAML、TOML、JSON形式をサポートしています。例については[docs](https://github.com/austin-weeks/miasma/blob/main/docs/config_file)を参照してください。 |
| `port` | `9999` | サーバーがバインドするポート。 |
| `host` | `localhost` | サーバーがバインドするホストアドレス。 |
| `unix-socket` | | TCPアドレスではなくUnixドメインソケットにバインドします。_Unix系システムでのみ利用可能です。_ |
| `max-in-flight` | `500` | 許容される最大同時リクエスト数。これを超えたときに受信したリクエストは _429_ レスポンスを受け取ります。**_Miasma_ のメモリ使用量は同時リクエスト数に直接比例します - メモリ使用量が懸念される場合は、これをより低い値に設定してください。** |
| `link-prefix` | `/` | 自己誘導リンクのプレフィックス。これは _Miasma_ をホストするパスである必要があります(例:`/naughty-bots`)。 |
| `link-count` | `5` | 各レスポンスページに含める自己誘導リンクの数。 |
| `max-depth` | `none` | スクレイパーが指定された深度に達したらリンクの生成を停止します。これにより、希望する量の毒を提供した後にスクレイパーを遮断できます。_アクティブなスクレイパーの数を管理可能なレベルに抑えるために、`link-count` と併用してください。_ |
| `force-gzip` | `false` | クライアントの _Accept-Encoding_ ヘッダーに関係なく、常にレスポンスをgzip圧縮します。**圧縮を強制すると、egressコストの削減に役立ちます。** |
| `unsafe-allow-html` | `false` | 毒ソースのレスポンス内のHTML文字をエスケープしません。意図しないクライアントサイドJavaScriptの実行を防ぐため、エスケープはデフォルトで有効になっています。**このオプションは慎重に使用してください。** |
| `poison-source` | `https://rnsaffn.com/poison2/?mask=0` | 毒入りトレーニングデータのプロキシソース。 |
| `no-poison-cache` | `false` | 毒ソースのレスポンスキャッシュを無効にします。 |
| `metrics-db-path` | | メトリクスデータを保存するSQLiteデータベースファイルへのパス。データベースが存在しない場合、_Miasma_ はこの場所にデータベースを作成します。 |
| `metrics-username` | | _Miasma_ のメトリクスページにアクセスするために必要なBasic認証のユーザー名。 |
| `metrics-password` | | _Miasma_ のメトリクスページにアクセスするために必要なBasic認証のパスワード。 |
| `metrics-endpoint` | `/metrics` | _Miasma_ のメトリクスが提供されるエンドポイント。 |
## 免責事項
_Miasma_ は[the poison fountain](https://rnsaffn.com/poison3)とは提携していません。私たちはそのレスポンスを制御できず、その内容の安全性を保証することもできません。ユーザーを _Miasma_ の場所へ誘導することは**決して**しないでください。
_Miasma_ は、影響を受けたスクレイパーの運営者からのいかなる報復についても責任を負いません。適用される法律およびホスティングプロバイダーのポリシーを遵守するのはあなたの責任です。完全な保証および責任制限の詳細については、[LICENSE](https://github.com/austin-weeks/miasma/blob/main/LICENSE)(GPL-v3)を参照してください。
---
_カバーアート by [@cerberussaturn07](https://www.instagram.com/cerberussaturn07/)_