Лучший VPS сервер, который мне удалось найти: https://justhost.ru

  • Больше 30 стран локаций
  • Возможность 50 раз сменить страну и ip адрес вашего сервера
  • Поддержка IPv6
  • Бесплатный неограниченный трафик
  • Установка Mikrotik routerOS и linux из коробки
  • Оплата Российскими картами
  • Стоимость от 119 рублей в месяц за промо тариф

NetProbe - веб-панель мониторинга открытых портов: TCP и UDP, расписание проверок, история изменений и уведомления в Telegram, MAX, E-mail, Zabbix и Syslog. Всё состояние - один файл SQLite внутри тома, рядом с приложением ничего ставить не нужно.

Ниже - установка одним контейнером, первый вход, настройка расписания и оповещений, обновление и резервные копии.

Результаты сканирования NetProbe: таблица адресов, открытые порты и подсветка изменений

Результаты сканирования: только адреса из расписания, новые порты подсвечены, закрытые обведены пунктиром.

Что понадобится

  • Docker 20.10+ (или Docker Desktop) на любом хосте: linux/amd64, linux/arm64, linux/arm/v7 (Raspberry Pi).
  • Свободный порт (по умолчанию 5000).
  • Доступ в интернет только для загрузки образа - дальше приложение работает локально.

Первый вход

Логин: admin
Пароль: admin123

Пароль по умолчанию создаётся только при пустой базе. Сразу после входа:

  1. Откройте «Настройки → Пользователи» и смените пароль admin.
  2. Создайте пользователей с ролями: Администратор, Специалист ИБ (всё, кроме раздела «Пользователи»), Пользователь (просмотр и проверка одного IP).
  3. Перед публикацией наружу задайте свой SECRET_KEY - это ключ сессий и CSRF.

Установка через docker compose (рекомендуется)

Создайте папку /opt/netprobe, в ней файл docker-compose.yml:

services:
  netprobe:
    image: ruiiru/netprobe:latest
    container_name: netprobe
    ports:
      - "5000:5000"
    environment:
      - SECRET_KEY=change-me-in-production
      - TZ=Europe/Moscow
    volumes:
      - netprobe_data:/app/data
    restart: unless-stopped

volumes:
  netprobe_data:

Запуск:

docker compose up -d

Через 10 - 20 секунд откройте http://IP-хоста:5000.

Установка одной командой

docker run -d --name netprobe \
  -p 5000:5000 \
  -e SECRET_KEY=change-me-in-production \
  -e TZ=Europe/Moscow \
  -v netprobe_data:/app/data \
  --restart unless-stopped \
  ruiiru/netprobe:latest

Порт меняется левой частью проброса: -p 8080:5000. Внутри контейнера приложение всегда слушает 5000.

Первое расписание

  1. «Расписание → Добавить».
  2. Укажите адрес, диапазон или подсеть (до 4096 адресов, маска не меньше /20).
  3. Перечислите порты TCP и UDP (до 2000 значений), выберите интервал.
  4. Сохраните - первое сканирование стартует сразу.

На главной появляются только адреса из расписаний: убрали расписание - ушли и строки. Новые порты подсвечиваются, закрытые обведены пунктиром, а уведомление приходит только на новый порт - первый скан адреса сообщений не создаёт.

Расписание проверок NetProbe: адрес, порты TCP и UDP, интервал

Расписание: адрес или подсеть, порты TCP и UDP, интервал проверки.

Разовая проверка

Страница /quick проверяет адрес, диапазон или подсеть прямо сейчас и не пишет результат в базу - удобно, чтобы убедиться в доступности или в наборе портов до настройки расписания. Ограничение - 20000 проверок за запуск (QUICK_MAX_CHECKS).

Разовое сканирование NetProbe: запуск проверки адреса без записи в базу

Оповещения

«Настройки → Оповещения»: канал (Telegram, MAX, E-mail, Zabbix, Syslog), типы событий (открытие и/или закрытие) и язык сообщений. Кнопка «Проверить» отправляет тестовое сообщение.

Токены и пароли SMTP хранятся в базе, а не в переменных окружения, - их не нужно переписывать при обновлении контейнера.

События NetProbe: открытие и закрытие портов

События: открытые и закрытые порты с датой и комментарием адреса.

HTTPS через Traefik

Контейнер слушает обычный HTTP на 5000, TLS и домен настраиваются на стороне reverse-proxy. Пример меток:

services:
  netprobe:
    image: ruiiru/netprobe:latest
    container_name: netprobe-web
    restart: unless-stopped
    environment:
      - SECRET_KEY=${SECRET_KEY}
      - TZ=${TZ:-Europe/Moscow}
    volumes:
      - netprobe_data:/app/data
    networks: [traefik]
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=${TRAEFIK_NETWORK}"
      - "traefik.http.routers.netprobe.rule=Host(`${NETPROBE_DOMAIN}`)"
      - "traefik.http.routers.netprobe.entrypoints=websecure"
      - "traefik.http.routers.netprobe.tls.certresolver=letsencrypt"
      - "traefik.http.services.netprobe.loadbalancer.server.port=5000"

volumes:
  netprobe_data:

networks:
  traefik:
    external: true
    name: ${TRAEFIK_NETWORK}

Сеть должна существовать заранее: docker network create traefik.

Обновление

docker pull ruiiru/netprobe:latest
docker compose up -d

Или без compose: docker restart netprobe после docker pull. Схема базы обновляется автоматически при старте - миграции запускать не нужно. Для воспроизводимых установок фиксируйте тег-хеш коммита вместо latest.

Резервная копия

Всё состояние - файл /app/data/port_scanner.db в томе netprobe_data.

# бэкап
docker cp netprobe:/app/data/port_scanner.db ./port_scanner-$(date +%F).db

# восстановление
docker cp ./port_scanner-2026-11-13.db netprobe:/app/data/port_scanner.db
docker restart netprobe

Переменные окружения

Обязательны только две, остальные - тонкая настройка сканера.

ПеременнаяПо умолчаниюОписание
SECRET_KEY change-me-in-production ключ сессий и CSRF
TZ Europe/Moscow часовой пояс контейнера
DB_NAME /app/data/port_scanner.db путь к SQLite
SCAN_WORKERS 200 потоков сканирования
SOCKET_TIMEOUT 1.2 таймаут TCP-проверки, сек
UDP_ENABLED 1 0 - отключить UDP

Полный список - в README проекта.

Что важно знать

  • Планировщик работает внутри процесса: остановили контейнер - автосканы не идут.
  • UDP подтверждается только ответом службы. Syslog/514 и DHCP/67 по broadcast остаются «закрытыми».
  • Встроенной авторизации достаточно для внутренней сети; наружу выставляйте через reverse-proxy с HTTPS.
  • Сканируйте только те адреса, на которые есть разрешение, - приложение это не проверяет.

Ссылки