portracker: карта открытых портов на серверах, в Docker и TrueNAS
portracker показывает, какие порты слушают на серверах и в контейнерах, и собирает несколько узлов в одну панель с SQLite внутри. Разобрал по README и коду, чем за это приходится платить: сокет Docker, общий с хостом список процессов и авторизация, выключенная по умолчанию.
pid: host, права SYS_PTRACE и SYS_ADMIN, отключённый AppArmor и сокет Docker. Авторизация по умолчанию выключена, и тогда любой, кто дошёл до панели, администратор. Проект молодой (июль 2025), его ведёт один человек, документация на английском, сам я его не запускал.
Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.
Инвентаризация серверов и портов перед аудитом или переездомКто слушает порт 8081 на третьем сервере
Перед аудитом безопасности или переездом на другой хостинг первый вопрос один: что у нас вообще запущено. На пяти VPS обычно находится тестовая админка, про которую все забыли, контейнер с базой, опубликованный на все интерфейсы, и сервис, который ставил ушедший подрядчик. Таблица в экселе устаревает за месяц.
Устройства в сети я уже разбирал: LAN Orangutan их находит, NetAlertX сигналит о новых, NetBox ведёт паспорт. Здесь другой слой: что слушает порты на самих серверах и в Docker.
Что это за проект и как он находит порты
Смотрел 21.10.2026 репозиторий mostafa-wahied/portracker: README, SECURITY.md, CHANGELOG и исходники. Файл LICENSE содержит текст MIT. Репозиторий создан 7 июля 2025 года, не архивирован, около 2,5 тысячи звёзд, 105 форков. Последний релиз v1.3.14 вышел 8 октября 2026, тогда же был последний коммит. Из 91 коммита 86 сделал владелец репозитория, пять второй участник. Образы собираются под amd64 и arm64 и получают тег версии.
На Linux он читает /proc/net/tcp и tcp6, а владельца порта определяет по /proc других процессов, поэтому контейнеру нужен общий с хостом список процессов. Иначе в ход идут ss и netstat. UDP выключен по умолчанию, включается переменной INCLUDE_UDP. Контейнеры он берёт из Docker API и показывает опубликованные порты вместе с внутренними, которые наружу не проброшены. Для TrueNAS есть отдельный сборщик: с API-ключом видны приложения, виртуальные машины и LXC. ВМ при этом доступны только для чтения, а чтобы заглянуть внутрь, на ВМ ставят свой экземпляр.
Цена доступа: сокет Docker и почти root
Пример запуска в README: pid: host, cap_add SYS_PTRACE и SYS_ADMIN, apparmor:unconfined и том /var/run/docker.sock:ro. Режима privileged там нет. По силе такая связка к нему близка, это уже моя оценка, слов автора про неё в README нет.
Суффикс :ro закрывает только файл сокета. В шпаргалке OWASP сказано прямо: read-only монтирование не делает Docker API только читаемым. Взломанная панель с таким доступом означает взломанный сервер.
Автор предлагает смягчение: прокси tecnativa/docker-socket-proxy с CONTAINERS=1, IMAGES=1, INFO=1, NETWORKS=1 и POST=0. Прокси пускает только чтение. Но pid: host и права остаются. В примере к тому же проброшен порт 2375:2375, то есть прокси опубликован на хосте. В README прокси написано никогда не открывать этот порт в публичную сеть, TLS у него нет. В compose-примере оба контейнера и так сидят в общей сети, так что проброс, по моему разбору, не нужен. Проверьте на тестовой машине.
Авторизация, peer-режим и что лежит в SQLite
Авторизация включается переменной ENABLE_AUTH=true. По умолчанию её нет, и README честно пишет: без неё доступ к панели даёт права администратора в интерфейсе и API. После включения мастер создаёт админа, пароль хранится хешем bcrypt, вход идёт по сессии. Двухфакторного входа и SSO не нашёл. В разделе Security журнала изменений за последние месяцы две записи. В v1.3.11 закрыли доступ к настройкам и интеграции без входа при включённой авторизации, нашёл внешний исследователь. В v1.3.14 зашифровали ключи пиров и убрали из диагностики контейнеров переменные окружения и команды. Чинят и пишут об этом открыто, но дыра в авторизации была.
Каждый узел это отдельный экземпляр. Центральная панель сама ходит на адрес пира с заголовком X-API-Key. Исходящие ключи лежат в базе зашифрованными (AES-256-GCM), а ключ шифрования это файл peer-keys.key рядом с базой. Бэкап базы без этого файла бесполезен. HTTP для пиров разрешён, и ключ при нём идёт открытым, поэтому нужен HTTPS или закрытая сеть. Скомпрометированный пир получит свой ключ.
В SQLite лежат пиры, заметки к портам, скрытые порты, свои названия сервисов, пользователи и настройки. Таблицы с историей портов в схеме я не видел: карта текущая, кэш сканирования по README 60 секунд. Кто что открыл вчера, не узнать. Телеметрии в исходниках не нашёл. Иконки сервисов браузер грузит с cdn.jsdelivr.net, и CDN видит названия того, что вы запускаете.
Что важно учесть
Windows. В README только Docker и образ под Linux. В коде есть ветки с netstat -ano, инструкции для Windows-хоста нет, не проверял.
Обзор изнутри. portracker видит сокеты, которые слушает сам хост. Что пропускает файрвол снаружи, какие версии ПО отвечают и есть ли в них уязвимости, он не знает. Свои адреса проверьте снаружи nmap с другой машины и сверьте с картой.
Рамки проекта. Внутренних портов на контейнер по умолчанию показывается не больше 100. Интерфейс и документация на английском. Основной автор один, остановится он, чинить будет некому. Обновление ручное: новый образ с тегом версии, база мигрирует сама. Откат на версию без шифрованных ключей, по SECURITY.md, требует защищённой копии.
Что можно сделать уже сейчас
Поднимите portracker на тестовой машине с прокси для сокета и ENABLE_AUTH=true. Проверьте, видны ли ваши контейнеры, отличаются ли внутренние порты от опубликованных и ловит ли он сервисы вне Docker.
Составьте по каждому серверу таблицу «порт, сервис, владелец, зачем открыт». Заметки ведите прямо в панели. Всё необъяснимое закройте или выясните. Устройства и подсети ведите отдельно, как в NetBox.
Порт 4999 не публикуйте в интернет. Закройте его VPN, внутренней сетью или обратным прокси с аутентификацией и копируйте каталог /data вместе с ключом. Здоровье самих Proxmox и TrueNAS смотрит Pulse.
Инвентаризацию серверов и портов перед аудитом или переездом провожу в рамках ИТ-аудита, закрытие лишнего и регламент оформляю в работе по кибербезопасности.
Частые вопросы
Нужно ли ставить агент на каждый сервер?
По README каждый узел это свой экземпляр portracker, а общая панель добавляет остальные как пиры. TrueNAS можно опрашивать через API-ключ без отдельной установки, но ВМ тогда видны только списком.
Можно ли открыть панель в интернет с включённой авторизацией?
Я бы не стал. У панели доступ к Docker и к процессам хоста, а авторизация без второго фактора и с историей исправленных дыр защищает слабо. Держите её за VPN.
Заменит ли он сканер уязвимостей?
Нет. Он перечисляет, что слушает порт, но версии и уязвимости не проверяет. Для этого нужен отдельный сканер.
Коротко о главном
portracker под MIT собирает порты и сервисы серверов, Docker и TrueNAS в одну живую таблицу без внешней базы. Платить за это приходится сокетом Docker, общим пространством процессов и правами, а вместе с выключенной по умолчанию авторизацией панель сама становится целью. Для инвентаризации перед аудитом он подходит на время и за VPN.
Хотите, чтобы я составил карту портов и сервисов ваших серверов и подготовил регламент проверки? Напишите мне в Telegram кодовое слово «ПОРТЫ».
Что я делаю для бизнеса
Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


