
Atrapa a los scrapers web de IA en un pozo de veneno sin fin.
# 🌀 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="Rastreadores web quedándose atrapados en una nube de miasma venenoso." title="Arte de portada por @cerberussaturn07" />
</picture>
Las empresas de IA rastrean internet continuamente a una escala enorme, engullendo todo su contenido para usarlo como datos de entrenamiento para sus próximos modelos. Si tienes un sitio web público, _ya están robando tu trabajo._
_¡Miasma_ está aquí para ayudarte a contraatacar! Levanta el servidor y dirige cualquier tráfico malicioso hacia él. _Miasma_ enviará datos de entrenamiento envenenados desde la [fuente de veneno](https://rnsaffn.com/poison3) junto con múltiples enlaces autorreferenciales. Es un buffet sin fin de bazofia para las máquinas de bazofia.
_Miasma_ es extremadamente rápido y tiene un consumo de memoria mínimo - no deberías tener que desperdiciar recursos de cómputo defendiéndote de las sanguijuelas de internet.
> [!CAUTION]
> Existe un riesgo inherente al desplegar este software. Por favor, lee completamente la [configuración](#configuration) y el [descargo de responsabilidad](#disclaimer) antes de usarlo.
## Uso
Puedes ejecutar _Miasma_ localmente, o con la [imagen docker](https://hub.docker.com/r/austinweeks/miasma) oficial.
Si deseas incorporar _Miasma_ en un servidor Rust existente, también puedes [usar _Miasma_ como biblioteca](https://docs.rs/miasma/).
### Ejecución Local
Instala con [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html) (recomendado):
```sh
cargo install miasma
```
Alternativamente, descarga un binario precompilado desde [releases](https://github.com/austin-weeks/miasma/releases).
También hay paquetes mantenidos por la comunidad disponibles para una variedad de gestores de paquetes:
<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>
Inicia _Miasma_ con la configuración predeterminada:
```sh
miasma
```
Ver todas las [opciones de configuración](#configuration) disponibles:
```sh
miasma --help
```
### Ejecución con Docker
Ejecuta _Miasma_ usando la [imagen docker](https://hub.docker.com/r/austinweeks/miasma) oficial:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest
```
Pasa las mismas [opciones de configuración](#configuration) que usarías localmente:
```sh
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
```
O, ejecuta dentro de un clúster de docker compose:
```yaml
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
```
## Cómo Atrapar Scrapers
Vamos a recorrer un ejemplo de cómo configurar un servidor para atrapar scrapers con _Miasma_. Elegiremos `/naughty-bots` como la ruta de nuestro servidor para dirigir el tráfico de scrapers. Usaremos [_Nginx_](https://nginx.org/) como proxy inverso de nuestro servidor, pero se puede lograr el mismo resultado con muchas configuraciones diferentes.
Cuando terminemos, los scrapers quedarán atrapados así:
<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="Diagrama de flujo que representa el ciclo de scrapers atrapados.">
</picture>
</p>
### Incrustar Enlaces Ocultos
Dentro de nuestro sitio, incluiremos algunos enlaces ocultos que dirigen a `/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>
```
Los atributos `style="display: none;"`, `aria-hidden="true"`, y `tabindex="-1"` aseguran que los enlaces sean totalmente invisibles para los visitantes humanos y serán ignorados por lectores de pantalla y navegación por teclado. Serán visibles **solo** para los scrapers.
### Configurar nuestro Proxy Nginx
Dado que nuestros enlaces ocultos apuntan a `/naughty-bots/`, configuraremos esta ruta para hacer proxy de las solicitudes hacia _Miasma_. Supongamos que estamos ejecutando _Miasma_ en el puerto `9855`.
También configuraremos un límite de tasa agresivo basado en el user agent del scraper para ayudar a asegurar que no nos hagamos un DDoS accidentalmente a nosotros mismos.
```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/;
}
}
}
```
Esta configuración capturará todas las variaciones de la ruta `/naughty-bots` -> `/naughty-bots`, `/naughty-bots/`, `/naughty-bots/12345`, etc.
### Ejecutar _Miasma_
Por último, iniciaremos _Miasma_ y especificaremos `/naughty-bots` como el prefijo de enlace. Esto le indica a _Miasma_ que comience los enlaces con `/naughty-bots/`, lo que asegura que los scrapers sean enrutados correctamente a través de nuestro proxy _Nginx_ de vuelta a _Miasma_.
Limitemos el número de conexiones máximas en vuelo a 50. Con 50 conexiones, podemos esperar un uso máximo de memoria de 50-60 MB. Ten en cuenta que cualquier solicitud que exceda este límite recibirá inmediatamente una respuesta **429** en lugar de ser añadida a una cola.
También forzaremos a _Miasma_ a comprimir con gzip todas las respuestas independientemente del encabezado `Accept-Encoding` de los scrapers. Dado que las respuestas comprimidas con gzip son significativamente más pequeñas, esto nos ayudará a reducir los costos de egreso.
Aunque podríamos mantener a los scrapers atrapados para siempre, usaremos las opciones de conteo de enlaces y profundidad máxima para dejar que los scrapers se vayan después de consumir ~100K páginas envenenadas. Con esta configuración, _Miasma_ enviará alrededor de **250MB** de datos totales por scraper.
```sh
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
```
### ¡Disfruta!
¡Despleguemos y observemos cómo los bots mal comportados devoran con avidez nuestra máquina de bazofia sin fin!
<p align="center">
<picture>
<img src="https://raw.githubusercontent.com/austin-weeks/miasma/main/.github/images/logs.gif" />
</picture>
</p>
### `robots.txt`
¡Asegúrate de proteger a los bots bien comportados y a los motores de búsqueda de _Miasma_ a través de tu [`robots.txt`](https://developers.google.com/search/docs/crawling-indexing/robots/intro)!
```text
User-agent: *
Disallow: /naughty-bots
```
## Métricas
_Miasma_ ofrece la capacidad de rastrear conteos de solicitudes de scrapers por User-Agent único. Esto puede ser útil para identificar qué bots están golpeando tu sitio con más fuerza. Las métricas se escriben en un archivo de base de datos SQLite local y se pueden ver en un endpoint de tu elección.
## Configuración
_Miasma_ se puede configurar mediante flags de CLI o un [archivo de configuración](https://github.com/austin-weeks/miasma/blob/main/docs/config_file).
| Opción | Predeterminado | Descripción |
| ------------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `config-file` | | Cargar opciones de configuración desde un archivo en la ruta especificada. Se admiten formatos YAML, TOML y JSON. Ver [docs](https://github.com/austin-weeks/miasma/blob/main/docs/config_file) para ejemplos. |
| `port` | `9999` | El puerto al que el servidor debe enlazarse. |
| `host` | `localhost` | La dirección de host a la que el servidor debe enlazarse. |
| `unix-socket` | | Enlazar a un socket de dominio Unix en lugar de una dirección TCP. _Solo disponible en sistemas tipo Unix._ |
| `max-in-flight` | `500` | Número máximo de solicitudes en vuelo permitidas. Las solicitudes recibidas cuando se excede el límite en vuelo recibirán una respuesta _429_. **_El uso de memoria de Miasma_ escala directamente con el número de solicitudes en vuelo - establece esto a un valor más bajo si el uso de memoria es una preocupación.** |
| `link-prefix` | `/` | Prefijo para enlaces autodirigidos. Esta debe ser la ruta donde alojas _Miasma_, por ejemplo `/naughty-bots`. |
| `link-count` | `5` | Número de enlaces autodirigidos a incluir en cada página de respuesta. |
| `max-depth` | `none` | Detener la generación de enlaces una vez que el scraper alcance la profundidad especificada. Esto te permite cortar a los scrapers después de servir una cantidad deseada de veneno. _Usa esto junto con `link-count` para mantener el número de scrapers activos a un nivel manejable._ |
| `force-gzip` | `false` | Siempre comprimir con gzip las respuestas independientemente del encabezado _Accept-Encoding_ del cliente. **Forzar la compresión puede ayudar a reducir los costos de egreso.** |
| `unsafe-allow-html` | `false` | No escapar caracteres HTML en las respuestas de la fuente de veneno. El escape está habilitado por defecto para prevenir la ejecución no intencionada de JavaScript del lado del cliente. **Usa esta opción con cuidado.** |
| `poison-source` | `https://rnsaffn.com/poison2/?mask=0` | Fuente proxy para datos de entrenamiento envenenados. |
| `no-poison-cache` | `false` | Deshabilitar el caché de respuestas de la fuente de veneno. |
| `metrics-db-path` | | Ruta al archivo de base de datos SQLite para almacenar datos de métricas. _Miasma_ creará una base de datos en esta ubicación si una no existe ya. |
| `metrics-username` | | Nombre de usuario de autenticación básica requerido para acceder a la página de métricas de _Miasma_. |
| `metrics-password` | | Contraseña de autenticación básica requerida para acceder a la página de métricas de _Miasma_. |
| `metrics-endpoint` | `/metrics` | Endpoint en el que se servirán las métricas de _Miasma_. |
## Descargo de Responsabilidad
_Miasma_ no está afiliado con [la fuente de veneno](https://rnsaffn.com/poison3). No tenemos control sobre sus respuestas y no podemos garantizar la seguridad de su contenido. **_Nunca_** debes dirigir usuarios hacia tu ubicación de _Miasma_.
_Miasma_ no es responsable de ninguna represalia por parte de los operadores de scrapers afectados. Es tu responsabilidad cumplir con las leyes aplicables y las políticas del proveedor de hosting. Ver [LICENSE](https://github.com/austin-weeks/miasma/blob/main/LICENSE) (GPL-v3) para detalles completos de garantía y limitación de responsabilidad.
---
_Arte de portada por [@cerberussaturn07](https://www.instagram.com/cerberussaturn07/)_