Перейти к содержимому

DiskGuard: установка и проверка защиты диска

Проверено с: DiskGuard v1.1.0, Wings v1.13.x, Docker 20.10+ · обновлено 09.10.2026

Короткий ответ: DiskGuard — открытый (MIT) инструмент защиты нод Pterodactyl от заполнения диска через fallocate. Он ставит seccomp-профиль в Docker (атака ломается на уровне ядра), ускоряет проверку диска Wings с 150 до 5 секунд, ограничивает процессы в контейнерах и запускает монитор диска (хост — каждые 3 с, контейнеры — каждые 45 с). Установка на ноду — одна команда, ~5 минут; совместим с Panel 1.6–1.14, Wings 1.7–1.13.x, Docker ≥ 20.10.

Механику атаки и то, почему лимиты панели не спасают, мы разобрали в предыдущей статье — здесь только практика.

Важно: установщик перезапускает Wings

Во время установки перезапускается Wings — игровые серверы на ноде остановятся на минуту-другую. Планируйте установку на спокойное окно; после перезапуска остановленные серверы запускаются из панели. Docker перезапускается только если вы явно включили глобальный seccomp-профиль (см. ниже).

  • Нода с Wings и Docker ≥ 20.10 (см. установку Wings);
  • root-доступ на ноде;
  • для установки через Blueprint — Blueprint ≥ alpha-09 на панели.

Если на вашей Panel установлен Blueprint, установка одна строка на стороне панели:

Окно терминала
blueprint -install diskguard.blueprint

Blueprint разложит файлы плагина и запустит установщик на подключённых нодах. Дальше переходите к проверке.

Клонируйте репозиторий и запустите установщик на каждой ноде Wings:

Окно терминала
git clone https://github.com/milcorix/diskguard-pterodactyl.git
cd diskguard-pterodactyl
bash install.sh

Установщик автоматически:

  • кладёт seccomp-профиль в /etc/docker/seccomp-diskguard.json и (если на ноде есть исходники Wings и Go) вшивает его в Wings пересборкой — fallocate резается только у контейнеров Pterodactyl;
  • правит конфиг Wings: disk_check_interval: 5, container_pid_limit: 512;
  • устанавливает и запускает systemd-сервис мониторинга диска: хост-диск и иноды — каждые 3 с, тяжёлый обход контейнеров (du) — каждые 45 с;
  • перезапускает Wings (Docker — только если вы явно включили глобальный профиль, см. ниже).

После установки убедитесь, что все три сервиса живы:

Окно терминала
systemctl status diskguard wings docker --no-pager

Лог монитора в реальном времени:

Окно терминала
journalctl -u diskguard -f

Главный тест — попытка выполнить fallocate внутри контейнера:

Окно терминала
docker exec <container_id> bash -c \
"fallocate -l 1G /tmp/test && echo FAIL || echo BLOCKED"

Ожидаемый результат:

fallocate: fallocate failed: No space left on device
BLOCKED

Именно так выглядит сработавший seccomp-фильтр: syscall возвращает ошибку ENOSPC («нет места»), не зарезервировав ни байта. Слой мониторинга при этом продолжает следить за медленными способами заполнения диска и инодами.

  • Тест пишет FAIL, fallocate проходит — seccomp не применён. С версии v1.1.0 глобальный профиль Docker выключен по умолчанию: либо пересборка Wings не выполнилась (нет исходников/Go), либо вы не включали DISKGUARD_GLOBAL_SECCOMP=1. Пересоберите Wings или запустите установщик с флагом, затем повторите тест.
  • После обновления Wings защита «пропала» — обновление могло перезаписать конфиг или бинарник: проверьте disk_check_interval: 5 в /etc/pterodactyl/config.yml и повторите тест-команду.
  • Wings не стартует после установки — посмотрите journalctl -u wings -n 50: обычно это опечатка в конфиге, внесённая вручную до установщика.
  • В логе diskguard WARN про mysql-клиент — без него per-container лимиты не работают (защита хоста — работает): apt install mysql-client и перезапустите сервис.

Убрать защиту можно в обратном порядке: systemctl disable --now diskguard, вернуть disk_check_interval в конфиге Wings и убрать подключение seccomp-профиля из конфигурации Docker, затем перезапустить Docker и Wings. Актуальные детали — в README репозитория.

DiskGuard замедляет игровые серверы?

Нет. Seccomp-фильтр — это проверка на уровне ядра при вызове syscall, она измеряется наносекундами и не влияет на игру. Монитор смотрит заполнение диска и не трогает игровые процессы.

А если атакующий использует не fallocate, а dd?

Seccomp-фильтр блокирует семейство мгновенных методов резервирования; медленную запись ловят монитор диска и ускоренная проверка Wings (5 секунд вместо 150). Полный кап даёт только жёсткая квота файловой системы — статья про XFS + pquota готовится.

Подойдёт ли DiskGuard для Pelican?

Механизм защиты завязан на Docker и конфиг ноды, поэтому переносится. Официально мы тестируем DiskGuard на Pterodactyl (Wings 1.7–1.13.x); для Pelican проверяйте тест-командой из раздела «Проверка».

Статья помогла?