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 на панели.
Вариант 1: через Blueprint
Заголовок раздела «Вариант 1: через Blueprint»Если на вашей Panel установлен Blueprint, установка одна строка на стороне панели:
blueprint -install diskguard.blueprintBlueprint разложит файлы плагина и запустит установщик на подключённых нодах. Дальше переходите к проверке.
Вариант 2: вручную на ноде
Заголовок раздела «Вариант 2: вручную на ноде»Клонируйте репозиторий и запустите установщик на каждой ноде Wings:
git clone https://github.com/milcorix/diskguard-pterodactyl.gitcd diskguard-pterodactylbash 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 deviceBLOCKEDИменно так выглядит сработавший 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 репозитория.
Что дальше
Заголовок раздела «Что дальше»- Атака крашера: как забивают диск — если хотите понимать, что именно блокирует каждый слой.
- Hardening ноды — официальный справочник параметров Wings.
DiskGuard замедляет игровые серверы?
Нет. Seccomp-фильтр — это проверка на уровне ядра при вызове syscall, она измеряется наносекундами и не влияет на игру. Монитор смотрит заполнение диска и не трогает игровые процессы.
А если атакующий использует не fallocate, а dd?
Seccomp-фильтр блокирует семейство мгновенных методов резервирования; медленную запись ловят монитор диска и ускоренная проверка Wings (5 секунд вместо 150). Полный кап даёт только жёсткая квота файловой системы — статья про XFS + pquota готовится.
Подойдёт ли DiskGuard для Pelican?
Механизм защиты завязан на Docker и конфиг ноды, поэтому переносится. Официально мы тестируем DiskGuard на Pterodactyl (Wings 1.7–1.13.x); для Pelican проверяйте тест-командой из раздела «Проверка».