vps-audit
- title
- vps-audit
- type
- toolbox
- summary
- Один Bash-скрипт для аудита SSH, фаервола, fail2ban, портов и SUID-файлов на Debian/Ubuntu по настраиваемым порогам PASS/WARN/FAIL
- tags
- bash, security, linux, sysadmin, watchlist
- language
- Bash
- license
- MIT
- sources
- vps-audit
- created
- 2026-09-14
- updated
- 2026-09-14
- lang
- ru
- translation_of
- vps-audit-script
- source_updated
- 2026-09-14
- translated
- 2026-09-14
- translator
- lllm/antigravity/gemini-3.7-flash-medium
vps-audit - это одиночный shell-скрипт от Nuver Labs, который копируют на свежий VPS, запускают от root и изучают вывод. Он проходит по фиксированному списку проверок безопасности и ресурсов, выводит каждую как [PASS], [WARN] или [FAIL] с однострочным пояснением и записывает те же результаты вместе с рекомендациями в файл vps-audit-report-<timestamp>.txt. Ничего не нужно устанавливать, скрипт не оставляет после себя никаких агентов, в чём и заключается главное удобство: он за один запуск отвечает на вопрос "не забыл ли я на этой машине что-то очевидное".
Что он проверяет
Часть, отвечающая за безопасность, покрывает стандартный список первичной настройки. В SSH скрипт проверяет sshd_config на предмет входа под root, аутентификации по паролю и стандартного порта 22. Он определяет, какой фаервол установлен (UFW, firewalld, iptables или nftables) и запущен ли Fail2ban либо CrowdSec. Скрипт подсчитывает неудачные попытки входа в /var/log/auth.log, ищет ожидающие обновления и флаг reboot-required, считает работающие службы и слушающие порты, проверяет настройку логирования sudo, считывает minlen из pwquality.conf и выводит список SUID-бинарников.
Одна проверка выделяется особо: скрипт сравнивает порт в jail'е Fail2ban для SSH с портом, который sshd слушает на самом деле. Если перенести SSH с 22 порта и забыть обновить jail, Fail2ban продолжит рапортовать об исправной работе и банить атакующих на порту, который никто не слушает. В обычной работе этот сбой остаётся незамеченным, и скрипт - хороший способ его поймать.
Часть про производительность скромнее - использование диска, памяти и CPU плюс число активных соединений - и больше напоминает строку состояния, чем аудит.
Как принимаются решения
Каждый вердикт получается сравнением числа с порогом, а сами пороги заданы обычными переменными в блоке Configuration в начале скрипта. Значения по умолчанию из README:
RESOURCE_WARN=50 # disk/memory/CPU %
RESOURCE_FAIL=80
SERVICES_WARN=20 # running services
SERVICES_FAIL=40
LOGINS_WARN=10 # failed login attempts
LOGINS_FAIL=50
OPEN_PORTS_WARN=10 # listening ports
OPEN_PORTS_FAIL=20
PASSWORD_MINLEN=12
В том же блоке настраиваются пути к проверяемым файлам (SSH_CONFIG_FILE, AUTH_LOG_FILE, FAIL2BAN_CONFIG_DIR и далее) и путь для сохранения отчёта. Параметр ENABLE_CHOWN=true передаёт владение отчётом вызвавшему sudo пользователю, а не оставляет его за root.
Такая архитектура честно показывает суть инструмента: это чек-лист с цифрами, выбранными автором на глаз. Сорок работающих служб - это FAIL для узкоспециализированного веб-сервера и норма для хоста с десятком systemd-юнитов под контейнеры. SSH на 22 порту получает WARN, хотя смена порта скорее снижает шум в логах, чем реально защищает. Стоит воспринимать вердикты как повод присмотреться и скорректировать пороги под конкретную машину, прежде чем безоговорочно верить подсветке.
Использование
curl -O https://raw.githubusercontent.com/Nuver-Labs/vps-audit/main/vps-audit.sh
chmod +x vps-audit.sh
sudo ./vps-audit.sh
В сохранённом README строки с chmod и запуском потерялись; две команды выше - их очевидное восстановление. Поскольку скрипт запускается от root, перед выполнением стоит его прочитать: он состоит из одного файла, так что много времени это не займёт.
Ограничения
- Только Debian и Ubuntu. Пути вроде
/var/log/auth.logи/var/run/reboot-requiredспецифичны для Debian, а в списке зависимостей указанufw, хотя проверка фаервола распознаёт также firewalld и nftables. - Требуются права root, поскольку большая часть проверяемых файлов доступна только суперпользователю.
- Проверяется конфигурация, а не доступность снаружи. Количество слушающих портов ничего не говорит о том, открыты ли они во внешний мир, и скрипт не ищет известные уязвимости. В самом README прямо сказано, что утилита не заменяет профессиональный аудит.
- Одноразовый вывод. Еженедельный запуск, предлагаемый в README, ложится на cron, а механизма diff'а между запусками нет.
Связанные страницы
Что касается блокировок, reaction предлагает более лёгкий демон в духе Fail2ban; в README среди систем предотвращения вторжений упомянуты только Fail2ban и CrowdSec. dockerscan - инструмент схожего формата, но нацеленный на образы контейнеров вместо хостов: набор проверок pass/fail с итоговым отчётом.
В списке отслеживания: привязан к одному семейству дистрибутивов, стоит перепроверить, выйдет ли поддержка за рамки Debian и станут ли пороги менее произвольными.
Репозиторий: nuver-labs/vps-audit, MIT. Количество звёзд не зафиксировано.