
miasma v0.4.3
Piégez les scrapers web d'IA dans un puits empoisonné sans fin.
🌀 Miasma
Les entreprises d'IA explorent continuellement Internet à une échelle gigantesque, engloutissant tout son contenu pour l'utiliser comme données d'entraînement pour leurs prochains modèles. Si vous avez un site web public, ils sont déjà en train de voler votre travail.
Miasma est là pour vous aider à riposter ! Lancez le serveur et dirigez tout trafic malveillant vers celui-ci. Miasma enverra des données d'entraînement empoisonnées depuis la fontaine de poison accompagnées de multiples liens auto-référentiels. C'est un buffet sans fin de saletés pour les machines à saletés.
Miasma est extrêmement rapide et a une empreinte mémoire minimale - vous ne devriez pas avoir à gaspiller des ressources de calcul pour repousser les sangsues d'Internet.
[!CAUTION] Le déploiement de ce logiciel comporte des risques inhérents. Veuillez lire entièrement la configuration et l'avertissement avant utilisation.
Utilisation
Vous pouvez exécuter Miasma localement, ou avec l'image docker officielle.
Si vous souhaitez intégrer Miasma dans un serveur Rust existant, vous pouvez également utiliser Miasma comme bibliothèque.
Exécution locale
Installez avec cargo (recommandé) :
cargo install miasma
Alternativement, téléchargez un binaire pré-compilé depuis les releases.
Des paquets maintenus par la communauté sont également disponibles pour divers gestionnaires de paquets :
Démarrez Miasma avec la configuration par défaut :
miasma
Affichez toutes les options de configuration disponibles :
miasma --help
Exécution avec Docker
Exécutez Miasma en utilisant l'image docker officielle :
docker run --rm -p 9999:9999 austinweeks/miasma:latest
Passez les mêmes options de configuration que vous utiliseriez localement :
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
Ou, exécutez au sein d'un cluster docker compose :
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
Comment piéger les scrapers
Passons en revue un exemple de configuration d'un serveur pour piéger les scrapers avec Miasma. Nous choisirons /naughty-bots comme chemin de notre serveur pour diriger le trafic des scrapers. Nous utiliserons Nginx comme reverse proxy de notre serveur, mais le même résultat peut être obtenu avec de nombreuses configurations différentes.
Une fois terminé, les scrapers seront piégés comme ceci :
Intégration de liens cachés
Au sein de notre site, nous inclurons quelques liens cachés menant à /naughty-bots.
<a
href="https://github.com/austin-weeks/miasma/blob/main/naughty-bots"
style="display: none;"
aria-hidden="true"
tabindex="-1"
>
Des données incroyables de haute qualité ici !
</a>
Les attributs style="display: none;", aria-hidden="true" et tabindex="-1" garantissent que les liens sont totalement invisibles pour les visiteurs humains et seront ignorés par les lecteurs d'écran et la navigation au clavier. Ils seront uniquement visibles pour les scrapers.
Configuration de notre proxy Nginx
Puisque nos liens cachés pointent vers /naughty-bots/, nous configurerons ce chemin pour proxyfier les requêtes vers Miasma. Supposons que nous exécutons Miasma sur le port 9855.
Nous mettrons également en place une limitation de débit agressive basée sur le user agent du scraper pour nous aider à éviter de nous auto-DDoS accidentellement.
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/;
}
}
}
Cette configuration interceptera toutes les variantes du chemin /naughty-bots -> /naughty-bots, /naughty-bots/, /naughty-bots/12345, etc.
Exécuter Miasma
Enfin, nous démarrerons Miasma et spécifierons /naughty-bots comme préfixe de lien. Cela indique à Miasma de commencer les liens par /naughty-bots/, ce qui garantit que les scrapers sont correctement routés à travers notre proxy Nginx vers Miasma.
Limitons le nombre de connexions en cours à 50. À 50 connexions, nous pouvons nous attendre à une utilisation mémoire maximale de 50-60 Mo. Notez que toute requête dépassant cette limite recevra immédiatement une réponse 429 plutôt que d'être ajoutée à une file d'attente.
Nous forcerons également Miasma à compresser en gzip toutes les réponses, quel que soit l'en-tête Accept-Encoding des scrapers. Comme les réponses gzippées sont nettement plus petites, cela nous aidera à réduire les coûts de sortie.
Bien que nous puissions garder les scrapers piégés pour toujours, nous utiliserons les options de nombre de liens et de profondeur maximale pour laisser les scrapers partir après avoir consommé environ 100K pages empoisonnées. Avec cette configuration, Miasma enverra environ 250 Mo de données totales par scraper.
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
Amusez-vous bien !
Déployons et regardons les bots malveillants se repaître avidement de notre machine à saletés sans fin !
robots.txt
Assurez-vous de protéger les bots bien élevés et les moteurs de recherche de Miasma via votre robots.txt !
User-agent: *
Disallow: /naughty-bots
Métriques
Miasma offre la possibilité de suivre les compteurs de requêtes des scrapers par User-Agent unique. Cela peut être utile pour identifier quels bots frappent votre site le plus intensément. Les métriques sont écrites dans un fichier de base de données SQLite local et peuvent être consultées à un endpoint de votre choix.
Configuration
Miasma peut être configuré via des options CLI ou un fichier de configuration.
| Option | Défaut | Description |
|---|---|---|
config-file | Charger les options de configuration depuis un fichier au chemin spécifié. Les formats YAML, TOML et JSON sont pris en charge. Voir docs pour des exemples. | |
port | 9999 | Le port sur lequel le serveur doit se lier. |
host | localhost | L'adresse hôte sur laquelle le serveur doit se lier. |
unix-socket | Se lier à un socket de domaine Unix plutôt qu'à une adresse TCP. Disponible uniquement sur les systèmes de type Unix. | |
max-in-flight | 500 | Nombre maximum de requêtes en cours autorisées. Les requêtes reçues lorsque la limite est dépassée recevront une réponse 429. L'utilisation mémoire de Miasma évolue directement avec le nombre de requêtes en cours - définissez une valeur plus basse si l'utilisation mémoire est une préoccupation. |
link-prefix | / | Préfixe pour les liens auto-directeurs. Cela devrait être le chemin où vous hébergez Miasma, par ex. /naughty-bots. |
link-count | 5 | Nombre de liens auto-directeurs à inclure dans chaque page de réponse. |
max-depth | none | Arrêter de générer des liens une fois que le scraper atteint la profondeur spécifiée. Cela vous permet de couper les scrapers après avoir servi une quantité de poison souhaitée. Utilisez ceci en tandem avec link-count pour maintenir le nombre de scrapers actifs à un niveau gérable. |
force-gzip | false | Toujours compresser en gzip les réponses quel que soit l'en-tête Accept-Encoding du client. Forcer la compression peut aider à réduire les coûts de sortie. |
unsafe-allow-html | false | Ne pas échapper les caractères HTML dans les réponses de la source de poison. L'échappement est activé par défaut pour empêcher l'exécution involontaire de JavaScript côté client. Utilisez cette option avec prudence. |
poison-source | https://rnsaffn.com/poison2/?mask=0 | Source proxy pour les données d'entraînement empoisonnées. |
no-poison-cache | false | Désactiver la mise en cache des réponses de la source de poison. |
metrics-db-path | Chemin vers le fichier de base de données SQLite pour stocker les données de métriques. Miasma créera une base de données à cet emplacement si elle n'existe pas déjà. | |
metrics-username | Nom d'utilisateur d'authentification basique requis pour accéder à la page de métriques de Miasma. | |
metrics-password | Mot de passe d'authentification basique requis pour accéder à la page de métriques de Miasma. | |
metrics-endpoint | /metrics | Endpoint auquel les métriques de Miasma seront servies. |
Avertissement
Miasma n'est pas affilié à la fontaine de poison. Nous n'avons aucun contrôle sur ses réponses et ne pouvons garantir la sécurité de son contenu. Vous ne devriez jamais diriger les utilisateurs vers votre emplacement Miasma.
Miasma n'est pas responsable des représailles des opérateurs des scrapers affectés. Il est de votre responsabilité de vous conformer aux lois applicables et aux politiques de votre hébergeur. Voir LICENSE (GPL-v3) pour les détails complets de garantie et de limitation de responsabilité.
Illustration de couverture par @cerberussaturn07