▎ О плагине
DiskGuard — Blueprint-плагин для Pterodactyl, который закрывает критическую уязвимость: злоумышленник внутри контейнера может запустить скрипт и за считанные секунды забить весь диск хоста, положив все сервера на ноде.
Плагин используется исключительно в защитных целях и полностью закрывает данный вектор атаки.
▎ Суть проблемы
В открытом доступе существуют скрипты (т.н. «Pterodactyl Crasher»), которые запускают десятки потоков с вызовом:
Bash:
fallocate -l 1G .tmp_<uuid>Почему это так опасно:
- fallocate — системный вызов ядра Linux, который выделяет место на диске за миллисекунды, не записывая байты
- Wings проверяет использование диска раз в 150 секунд по умолчанию
- 48 потоков × 1GB × 10 секунд = диск забит до того, как Wings вообще узнал
- Квота Wings работает только для файлов, записанных через его API — прямой вызов fallocate полностью обходит защиту
Реальный тест без плагина:
Код:
До DiskGuard: 155GB диска забито за ~10 секунд
Диск хоста: 100% | Wings: ещё не знает о проблеме▎ Как защищает DiskGuard
Плагин использует три независимых слоя защиты:
| Слой | Технология | Результат |
|---|---|---|
| 🛡 Seccomp | Блокировка syscall fallocate на уровне ядра Linux | Скрипт падает мгновенно, 0 байт записано |
| ⚡ Wings config | disk_check_interval: 5 сек (было 150) | Wings реагирует в 30× быстрее |
| 👁 Monitor daemon | Проверка диска каждые 3 секунды | Ловит альтернативные методы (dd, write и др.) |
После установки DiskGuard:
Код:
fallocate: fallocate failed: No space left on device
BLOCKED ✓
Диск хоста: 4.8G / 155G — не изменился▎ Совместимость
Pterodactyl Panel:
- ✅ 1.6.x — 1.14.x (все стабильные релизы)
- ✅ 1.0-develop (develop-ветка)
Wings:
- ✅ 1.7.x — 1.13.x
Операционные системы:
- ✅ Ubuntu 20.04 / 22.04 / 24.04 LTS
- ✅ Debian 11 / 12
- ✅ CentOS Stream 8 / 9
Требования:
- Docker ≥ 20.10
- Blueprint ≥ alpha-09
- Root-доступ на ноде Wings
▎ Установка
Через Blueprint (рекомендуется):
Bash:
blueprint -install diskguard.blueprintВручную:
Bash:
bash install.sh▎ Проверка после установки
Bash:
# Статус всех компонентов защиты
systemctl status diskguard wings docker
# Лог монитора в реальном времени
journalctl -u diskguard -f
# Тест: fallocate должен быть заблокирован
docker exec <container_id> bash -c \
"fallocate -l 1G /tmp/test && echo FAIL || echo BLOCKED"▎ Стек технологий
- Linux Kernel Seccomp — фильтрация системных вызовов (syscall whitelist/blacklist)
- Docker Security Profiles — применение seccomp-профиля ко всем контейнерам
- systemd — управление демоном мониторинга
- Bash — установщик и демон мониторинга
- Blueprint — фреймворк расширений Pterodactyl
- YAML — конфигурация Wings
- MySQL/MariaDB — чтение лимитов серверов из БД панели
▎ Скачать
