
miasma v0.4.3
Заманивайте AI-веб-скраперы в бесконечную ядовитую яму.
🌀 Miasma
AI-компании непрерывно скребут интернет в огромных масштабах, поглощая всё его содержимое для использования в качестве обучающих данных для своих следующих моделей. Если у вас есть публичный сайт, они уже воруют вашу работу.
Miasma здесь, чтобы помочь вам дать отпор! Запустите сервер и направьте на него любой вредоносный трафик. Miasma будет отправлять отравленные обучающие данные из poison fountain вместе с множеством самореферентных ссылок. Это бесконечный шведский стол из мусора для мусорных машин.
Miasma молниеносно быстра и имеет минимальный объём памяти — вам не нужно тратить вычислительные ресурсы на отражение интернет-паразитов.
[!CAUTION] Развёртывание этого программного обеспечения сопряжено с неотъемлемым риском. Пожалуйста, полностью прочитайте конфигурацию и отказ от ответственности перед использованием.
Использование
Вы можете запустить Miasma локально или с официальным docker-образом.
Если вы хотите интегрировать Miasma в существующий Rust-сервер, вы также можете использовать Miasma как библиотеку.
Локальный запуск
Установите с помощью cargo (рекомендуется):
cargo install miasma
Либо скачайте готовый бинарник из releases.
Также доступны пакеты, поддерживаемые сообществом, для различных менеджеров пакетов:
Запустите 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. | |
port | 9999 | Порт, к которому должен привязаться сервер. |
host | localhost | Адрес хоста, к которому должен привязаться сервер. |
unix-socket | Привязаться к доменному сокету Unix вместо TCP-адреса. Доступно только в Unix-подобных системах. | |
max-in-flight | 500 | Максимальное допустимое количество одновременных запросов. Запросы, полученные при превышении этого лимита, получат ответ 429. Потребление памяти Miasma напрямую масштабируется с количеством одновременных запросов — установите меньшее значение, если потребление памяти вызывает беспокойство. |
link-prefix | / | Префикс для самонаправляющих ссылок. Это должен быть путь, по которому вы размещаете Miasma, например /naughty-bots. |
link-count | 5 | Количество самонаправляющих ссылок, включаемых в каждую страницу ответа. |
max-depth | none | Прекратить генерацию ссылок, как только скрапер достигнет указанной глубины. Это позволяет отсечь скраперов после выдачи желаемого количества яда. Используйте это вместе с link-count, чтобы удерживать количество активных скраперов на управляемом уровне. |
force-gzip | false | Всегда сжимать ответы с помощью gzip независимо от заголовка Accept-Encoding клиента. Принудительное сжатие может помочь снизить расходы на исходящий трафик. |
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 | Имя пользователя для basic-аутентификации, необходимое для доступа к странице метрик Miasma. | |
metrics-password | Пароль для basic-аутентификации, необходимый для доступа к странице метрик Miasma. | |
metrics-endpoint | /metrics | Эндпоинт, на котором будут обслуживаться метрики Miasma. |
Отказ от ответственности
Miasma не связана с the poison fountain. Мы не контролируем его ответы и не можем гарантировать безопасность его содержимого. Вы никогда не должны направлять пользователей на ваш адрес Miasma.
Miasma не несёт ответственности за любые ответные действия со стороны операторов затронутых скраперов. Вы несёте ответственность за соблюдение применимых законов и политик хостинг-провайдеров. Полные сведения о гарантии и ограничении ответственности см. в LICENSE (GPL-v3).
Обложка от @cerberussaturn07