
Locken Sie KI-Web-Scraper in eine endlose Giftgrube.
# 🌀 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="Web crawlers getting stuck in a cloud of poison miasma." title="Cover art by @cerberussaturn07" />
</picture>
KI-Unternehmen durchkämmen das Internet kontinuierlich in enormem Umfang und verschlingen all seine Inhalte, um sie als Trainingsdaten für ihre nächsten Modelle zu verwenden. Wenn du eine öffentliche Website betreibst, _stehlen sie bereits deine Arbeit._
_Miasma_ ist hier, um dir beim Zurückschlagen zu helfen! Starte den Server und leite jeden bösartigen Datenverkehr dorthin. _Miasma_ sendet vergiftete Trainingsdaten aus dem [poison fountain](https://rnsaffn.com/poison3) zusammen mit mehreren selbstreferenziellen Links. Es ist ein endloses Buffet aus Slop für die Slop-Maschinen.
_Miasma_ ist blitzschnell und hat einen minimalen Speicherbedarf – du solltest keine Rechenressourcen verschwenden müssen, um die Blutsauger des Internets abzuwehren.
> [!CAUTION]
> Die Bereitstellung dieser Software birgt inhärente Risiken. Bitte lies vor der Verwendung vollständig die [Konfiguration](#configuration) und den [Haftungsausschluss](#disclaimer).
## Verwendung
Du kannst _Miasma_ lokal oder mit dem offiziellen [Docker-Image](https://hub.docker.com/r/austinweeks/miasma) ausführen.
Wenn du _Miasma_ in einen bestehenden Rust-Server integrieren möchtest, kannst du auch [_Miasma_ als Bibliothek verwenden](https://docs.rs/miasma/).
### Lokal ausführen
Installation mit [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) (empfohlen):
```sh
cargo install miasma
```
Alternativ kannst du ein vorgefertigtes Binary von [releases](https://github.com/austin-weeks/miasma/releases) herunterladen.
Von der Community gepflegte Pakete sind auch für eine Vielzahl von Paketmanagern verfügbar:
<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>
Starte _Miasma_ mit der Standardkonfiguration:
```sh
miasma
```
Alle verfügbaren [Konfigurationsoptionen](#configuration) anzeigen:
```sh
miasma --help
```
### Mit Docker ausführen
Führe _Miasma_ mit dem offiziellen [Docker-Image](https://hub.docker.com/r/austinweeks/miasma) aus:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest
```
Übergebe dieselben [Konfigurationsflags](#configuration), die du auch lokal verwenden würdest:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
```
Oder führe es innerhalb eines Docker-Compose-Clusters aus:
```yaml
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
```
## So fängst du Scraper
Lass uns ein Beispiel durchgehen, wie du einen Server einrichtest, um Scraper mit _Miasma_ zu fangen. Wir wählen `/naughty-bots` als Pfad unseres Servers, um Scraper-Datenverkehr dorthin zu leiten. Wir verwenden [_Nginx_](https://nginx.org/) als Reverse-Proxy unseres Servers, aber dasselbe Ergebnis lässt sich mit vielen verschiedenen Setups erzielen.
Wenn wir fertig sind, werden Scraper wie folgt gefangen:
<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="Flow chart depicting cycle of trapped scrapers.">
</picture>
</p>
### Versteckte Links einbetten
Innerhalb unserer Website fügen wir ein paar versteckte Links ein, die zu `/naughty-bots` führen.
```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>
```
Die Attribute `style="display: none;"`, `aria-hidden="true"` und `tabindex="-1"` stellen sicher, dass die Links für menschliche Besucher völlig unsichtbar sind und von Screenreadern und Tastaturnavigation ignoriert werden. Sie werden **nur** für Scraper sichtbar sein.
### Unseren Nginx-Proxy konfigurieren
Da unsere versteckten Links auf `/naughty-bots/` zeigen, konfigurieren wir diesen Pfad so, dass Anfragen an _Miasma_ weitergeleitet werden. Nehmen wir an, wir betreiben _Miasma_ auf Port `9855`.
Wir richten außerdem eine aggressive Ratenbegrenzung basierend auf dem User-Agent des Scrapers ein, um sicherzustellen, dass wir uns nicht versehentlich selbst DDoS-en.
```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/;
}
}
}
```
Diese Konfiguration fängt alle Varianten des Pfads `/naughty-bots` ab -> `/naughty-bots`, `/naughty-bots/`, `/naughty-bots/12345` usw.
### _Miasma_ ausführen
Zuletzt starten wir _Miasma_ und geben `/naughty-bots` als Link-Präfix an. Dies weist _Miasma_ an, Links mit `/naughty-bots/` zu beginnen, was sicherstellt, dass Scraper ordnungsgemäß durch unseren _Nginx_-Proxy zurück zu _Miasma_ geleitet werden.
Begrenzen wir die Anzahl der maximal gleichzeitigen Verbindungen auf 50. Bei 50 Verbindungen können wir mit einer Spitzenspeichernutzung von 50-60 MB rechnen. Beachte, dass alle Anfragen, die dieses Limit überschreiten, sofort eine **429**-Antwort erhalten, anstatt in eine Warteschlange gestellt zu werden.
Wir zwingen _Miasma_ außerdem, alle Antworten gzip-komprimiert zu senden, unabhängig vom `Accept-Encoding`-Header der Scraper. Da gzip-komprimierte Antworten deutlich kleiner sind, hilft uns dies, Egress-Kosten zu senken.
Während wir Scraper für immer gefangen halten könnten, verwenden wir die Optionen für Link-Anzahl und maximale Tiefe, um Scraper freizulassen, nachdem sie etwa 100K vergiftete Seiten konsumiert haben. Mit diesem Setup sendet _Miasma_ etwa **250MB** Gesamtdaten pro Scraper.
```sh
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
```
### Viel Spaß!
Lass uns bereitstellen und zusehen, wie sich fehlverhaltende Bots gierig an unserer endlosen Slop-Maschine bedienen!
<p align="center">
<picture>
<img src="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/logs.gif" />
</picture>
</p>
### `robots.txt`
Schütze wohlverhaltende Bots und Suchmaschinen unbedingt vor _Miasma_ über deine [`robots.txt`](https://developers.google.com/search/docs/crawling-indexing/robots/intro)!
```text
User-agent: *
Disallow: /naughty-bots
```
## Metriken
_Miasma_ bietet die Möglichkeit, Scraper-Anfragezahlen pro eindeutigem User-Agent zu verfolgen. Dies kann nützlich sein, um zu identifizieren, welche Bots deine Website am stärksten belasten. Metriken werden in eine lokale SQLite-Datenbankdatei geschrieben und können an einem Endpunkt deiner Wahl eingesehen werden.
## Konfiguration
_Miasma_ kann über CLI-Flags oder eine [Konfigurationsdatei](https://github.com/austin-weeks/miasma/blob/main/docs/config_file) konfiguriert werden.
| Option | Standard | Beschreibung |
| ------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config-file` | | Lade Konfigurationsoptionen aus einer Datei am angegebenen Dateipfad. Die Formate YAML, TOML und JSON werden unterstützt. Siehe [docs](https://github.com/austin-weeks/miasma/blob/main/docs/config_file) für Beispiele. |
| `port` | `9999` | Der Port, an den der Server gebunden werden soll. |
| `host` | `localhost` | Die Host-Adresse, an die der Server gebunden werden soll. |
| `unix-socket` | | Binde an einen Unix-Domain-Socket statt an eine TCP-Adresse. _Nur auf Unix-ähnlichen Systemen verfügbar._ |
| `max-in-flight` | `500` | Maximale Anzahl zulässiger gleichzeitiger Anfragen. Anfragen, die bei Überschreitung eingehen, erhalten eine _429_-Antwort. **_Miasmas_ Speicherverbrauch skaliert direkt mit der Anzahl gleichzeitiger Anfragen – setze dies auf einen niedrigeren Wert, wenn der Speicherverbrauch ein Problem darstellt.** |
| `link-prefix` | `/` | Präfix für selbstleitende Links. Dies sollte der Pfad sein, unter dem du _Miasma_ hostest, z. B. `/naughty-bots`. |
| `link-count` | `5` | Anzahl der selbstleitenden Links, die in jede Antwortseite aufgenommen werden. |
| `max-depth` | `none` | Beende die Generierung von Links, sobald der Scraper die angegebene Tiefe erreicht. Dies ermöglicht es dir, Scraper abzuschneiden, nachdem eine gewünschte Menge Gift ausgeliefert wurde. _Verwende dies zusammen mit `link-count`, um die Anzahl aktiver Scraper auf einem überschaubaren Niveau zu halten._ |
| `force-gzip` | `false` | Komprimiere Antworten immer mit gzip, unabhängig vom _Accept-Encoding_-Header des Clients. **Erzwungene Komprimierung kann helfen, Egress-Kosten zu senken.** |
| `unsafe-allow-html` | `false` | HTML-Zeichen in den Antworten der Giftquelle nicht escapen. Escaping ist standardmäßig aktiviert, um unbeabsichtigte clientseitige JavaScript-Ausführung zu verhindern. **Verwende diese Option mit Vorsicht.** |
| `poison-source` | `https://rnsaffn.com/poison2/?mask=0` | Proxy-Quelle für vergiftete Trainingsdaten. |
| `no-poison-cache` | `false` | Deaktiviere das Caching der Antworten der Giftquelle. |
| `metrics-db-path` | | Pfad zur SQLite-Datenbankdatei zum Speichern der Metrikdaten. _Miasma_ erstellt an diesem Ort eine Datenbank, falls noch keine existiert. |
| `metrics-username` | | Basic-Auth-Benutzername, der für den Zugriff auf _Miasmas_ Metrikseite erforderlich ist. |
| `metrics-password` | | Basic-Auth-Passwort, das für den Zugriff auf _Miasmas_ Metrikseite erforderlich ist. |
| `metrics-endpoint` | `/metrics` | Endpunkt, an dem _Miasmas_ Metriken bereitgestellt werden. |
## Haftungsausschluss
_Miasma_ ist nicht mit [dem poison fountain](https://rnsaffn.com/poison3) verbunden. Wir haben keine Kontrolle über dessen Antworten und können die Sicherheit seiner Inhalte nicht garantieren. Du solltest **_niemals_** Benutzer auf deinen _Miasma_-Standort leiten.
_Miasma_ ist nicht verantwortlich für Vergeltungsmaßnahmen von Betreibern betroffener Scraper. Es liegt in deiner Verantwortung, geltende Gesetze und Richtlinien deines Hosting-Anbieters einzuhalten. Siehe [LICENSE](https://github.com/austin-weeks/miasma/blob/main/LICENSE) (GPL-v3) für vollständige Garantie- und Haftungsbeschränkungsdetails.
---
_Cover art von [@cerberussaturn07](https://www.instagram.com/cerberussaturn07/)_