Назад к обновлениям
New releaseSep 20, 2026

miasma v0.4.3

Заманивайте AI-веб-скраперы в бесконечную ядовитую яму.

Поделиться

🌀 Miasma

No AI crates.io downloads Docker Pulls GitHub commits since latest release

Веб-краулеры застревают в облаке ядовитого миазма.

AI-компании непрерывно скребут интернет в огромных масштабах, поглощая всё его содержимое для использования в качестве обучающих данных для своих следующих моделей. Если у вас есть публичный сайт, они уже воруют вашу работу.

Miasma здесь, чтобы помочь вам дать отпор! Запустите сервер и направьте на него любой вредоносный трафик. Miasma будет отправлять отравленные обучающие данные из poison fountain вместе с множеством самореферентных ссылок. Это бесконечный шведский стол из мусора для мусорных машин.

Miasma молниеносно быстра и имеет минимальный объём памяти — вам не нужно тратить вычислительные ресурсы на отражение интернет-паразитов.

[!CAUTION] Развёртывание этого программного обеспечения сопряжено с неотъемлемым риском. Пожалуйста, полностью прочитайте конфигурацию и отказ от ответственности перед использованием.

Использование

Вы можете запустить Miasma локально или с официальным docker-образом.

Если вы хотите интегрировать Miasma в существующий Rust-сервер, вы также можете использовать Miasma как библиотеку.

Локальный запуск

Установите с помощью cargo (рекомендуется):

cargo install miasma

Либо скачайте готовый бинарник из releases.

Также доступны пакеты, поддерживаемые сообществом, для различных менеджеров пакетов:

Packaging status

Запустите Miasma с конфигурацией по умолчанию:

miasma

Просмотрите все доступные параметры конфигурации:

miasma --help

Запуск с Docker

Запустите Miasma с помощью официального docker-образа:

docker run --rm -p 9999:9999 austinweeks/miasma:latest

Передайте те же флаги конфигурации, которые вы использовали бы локально:

docker run --rm -p 9999:9999 austinweeks/miasma:latest \
    --link-prefix '/naughty-bots' \
    --max-in-flight 30

Или запустите в кластере docker compose:

services:
  miasma:
    image: austinweeks/miasma:latest
    command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
    ports:
      - 9999:9999

Как ловить скраперов

Давайте рассмотрим пример настройки сервера для отлова скраперов с помощью Miasma. Мы выберем /naughty-bots в качестве пути нашего сервера для направления трафика скраперов. Мы будем использовать Nginx в качестве обратного прокси нашего сервера, но того же результата можно добиться и с множеством других конфигураций.

Когда мы закончим, скраперы будут пойманы следующим образом:

Блок-схема, изображающая цикл пойманных скраперов.

Встраивание скрытых ссылок

Внутри нашего сайта мы разместим несколько скрытых ссылок, ведущих на /naughty-bots.

<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.

Мы также настроим агрессивное ограничение скорости на основе user agent скрапера, чтобы помочь гарантировать, что мы случайно не устроим DDoS сами себе.

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 МБ. Обратите внимание, что любые запросы, превышающие этот лимит, немедленно получат ответ 429, а не будут добавлены в очередь.

Мы также заставим Miasma сжимать все ответы с помощью gzip независимо от заголовка Accept-Encoding скраперов. Поскольку gzip-сжатые ответы значительно меньше, это поможет нам сократить расходы на исходящий трафик.

Хотя мы могли бы держать скраперов в ловушке вечно, мы используем параметры количества ссылок и максимальной глубины, чтобы отпустить скраперов после того, как они поглотят ~100 тыс. отравленных страниц. С такой настройкой Miasma отправит около 250 МБ общих данных на каждого скрапера.

miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8

Наслаждайтесь!

Давайте развернём и понаблюдаем, как плохо ведущие себя боты жадно поедают из нашей бесконечной машины мусора!

robots.txt

Обязательно защитите хорошо ведущих себя ботов и поисковые системы от Miasma через ваш robots.txt!

User-agent: *
Disallow: /naughty-bots

Метрики

Miasma предоставляет возможность отслеживать количество запросов скраперов по каждому уникальному User-Agent. Это может быть полезно для определения того, какие боты наиболее интенсивно атакуют ваш сайт. Метрики записываются в локальный файл базы данных SQLite и могут быть просмотрены на выбранном вами эндпоинте.

Конфигурация

Miasma можно настроить с помощью флагов CLI или файла конфигурации.

ОпцияПо умолчаниюОписание
config-fileЗагрузить параметры конфигурации из файла по указанному пути. Поддерживаются форматы YAML, TOML и JSON. Примеры см. в docs.
port9999Порт, к которому должен привязаться сервер.
hostlocalhostАдрес хоста, к которому должен привязаться сервер.
unix-socketПривязаться к доменному сокету Unix вместо TCP-адреса. Доступно только в Unix-подобных системах.
max-in-flight500Максимальное допустимое количество одновременных запросов. Запросы, полученные при превышении этого лимита, получат ответ 429. Потребление памяти Miasma напрямую масштабируется с количеством одновременных запросов — установите меньшее значение, если потребление памяти вызывает беспокойство.
link-prefix/Префикс для самонаправляющих ссылок. Это должен быть путь, по которому вы размещаете Miasma, например /naughty-bots.
link-count5Количество самонаправляющих ссылок, включаемых в каждую страницу ответа.
max-depthnoneПрекратить генерацию ссылок, как только скрапер достигнет указанной глубины. Это позволяет отсечь скраперов после выдачи желаемого количества яда. Используйте это вместе с link-count, чтобы удерживать количество активных скраперов на управляемом уровне.
force-gzipfalseВсегда сжимать ответы с помощью gzip независимо от заголовка Accept-Encoding клиента. Принудительное сжатие может помочь снизить расходы на исходящий трафик.
unsafe-allow-htmlfalseНе экранировать HTML-символы в ответах источника яда. Экранирование включено по умолчанию для предотвращения непреднамеренного выполнения клиентского JavaScript. Используйте эту опцию с осторожностью.
poison-sourcehttps://rnsaffn.com/poison2/?mask=0Источник прокси для отравленных обучающих данных.
no-poison-cachefalseОтключить кэширование ответов источника яда.
metrics-db-pathПуть к файлу базы данных SQLite для хранения данных метрик. Miasma создаст базу данных в этом месте, если она ещё не существует.
metrics-usernameИмя пользователя для basic-аутентификации, необходимое для доступа к странице метрик Miasma.
metrics-passwordПароль для basic-аутентификации, необходимый для доступа к странице метрик Miasma.
metrics-endpoint/metricsЭндпоинт, на котором будут обслуживаться метрики Miasma.

Отказ от ответственности

Miasma не связана с the poison fountain. Мы не контролируем его ответы и не можем гарантировать безопасность его содержимого. Вы никогда не должны направлять пользователей на ваш адрес Miasma.

Miasma не несёт ответственности за любые ответные действия со стороны операторов затронутых скраперов. Вы несёте ответственность за соблюдение применимых законов и политик хостинг-провайдеров. Полные сведения о гарантии и ограничении ответственности см. в LICENSE (GPL-v3).


Обложка от @cerberussaturn07

Категории