
セルフホスト型のネットワークディスカバリおよび検索エンジンで、継続的なポートスキャン、約100のサービスにわたる深いプロトコルプロービング、ローカルCVEマッチング、インフラストラクチャのインベントリとリスク監視のための全文検索を備えています。
セルフホスト型ネットワーク探索&検索 — あなたのハードウェア上で動く、あなた専用のShodan。
TCP/UDPスキャン · 約100種のプロトコルプローブ · TLS/JARMフィンガープリント · CVEマッチング · 全文検索 · 差分追跡 · アラート
重要。 スキャンするのは、自分が所有するネットワーク、またはスキャンについて書面による許可を得たネットワークだけにしてください。UltraVioletは受動的なサービス偵察を行うものであり、脆弱性を悪用することはありません。
| ユースケース | 得られるもの |
|---|---|
| 境界&インベントリ管理 | CIDRレンジ全体にわたるオープンポートとサービスの継続的な発見 |
| インフラ検索 | HTTPボディ、バナー、TLS、DNS、CVEにわたる全文検索 |
シングルテナント、単一のDocker Composeスタック、データを完全にコントロール。
ディスカバリ
SCAN_ALLOWED_CIDRS によるスコープ指定と、ホスト・ポート数の制限ディーププローブ(約100プロトコル)
robots.txt、security.txt、テクノロジースタックエンリッチメント
CVE&リスク
運用
viewer / operator / admin)、JWT+リフレッシュトークン/metrics、オプションのGrafanaプロファイルflowchart TB
Browser["Browser"]
FE["service-frontend<br/>React + nginx"]
API["uv-api<br/>REST · WS · metrics"]
PG[("PostgreSQL 16")]
SCAN["uv-scanner<br/>probe pipeline"]
Browser --> FE
FE -->|"/api"| API
FE -->|"/realtime"| API
API <--> PG
SCAN <--> PG
API -.->|LISTEN/NOTIFY| APIリリース版のUIイメージは /api/ と /realtime を uv-api にプロキシします — シングルオリジンで、API URLごとのフロントエンド再ビルドは不要です。
バックエンド開発のルール: CLAUDE.md。
要件: Go 1.25+、Docker Engine ≥ 24、RAM約4 GB。本番イメージはLinux amd64 を対象としています。
入門者向け — 公開済みイメージを
service-env/docker-compose.registry.yml で取得します:
cd service-env
cp env.registry.example .env
# set POSTGRES_PASSWORD, AUTH_JWT_SECRET, AUTH_BOOTSTRAP_PASSWORD
mkdir -p geoip catalog-seed
docker compose -f docker-compose.registry.yml pull
docker compose -f docker-compose.registry.yml up -d
# UI → http://localhost:3000
ドキュメントサイトのDocker Registryを参照してください。
API/scannerイメージは service-api/bin/ からビルド済みバイナリをコピーします(Docker内ではコンパイルされません)。make dev は docker compose … --build の前に make -C service-api build-linux を実行します。
git clone https://github.com/yakushstanislav/UltraViolet.git
cd UltraViolet/service-env
cp .env.example .env
mkdir -p secrets
openssl rand -hex 32 > secrets/postgres_password
openssl rand -hex 32 > secrets/auth_jwt_secret
cd ..
make dev
| URL | 用途 |
|---|---|
| http://localhost:3000 | UI(nginx /api/ 経由でAPIへ) |
| http://localhost:8080 | API直接 |
| http://localhost:9090/metrics |
開発用初期認証情報: admin / admin(APP_ENV≠production の場合のみ)。
完全ガイド — service-documentation-frontend/docs/ 内のVitePress:
make docs-dev # → http://localhost:5173
本番では docs プロファイルを有効にします:
cd service-env && docker compose --profile docs up -d
# → http://localhost:${UV_DOCUMENTATION_PORT:-3002}
主要セクション: インストール · スキャン · API · デプロイ · オフラインインストール。
make dev # build-linux → compose prod + dev override --build
バックエンドの変更後はGoバイナリを再ビルド(make -C service-api build-linux)し、再起動するか make dev を再実行してください。
make dev-db # PostgreSQL only on :5432
cd service-api && make build
export LOGGER_NAME=uv-api LOGGER_DEBUG=true
export SERVER_ADDR=0.0.0.0 SERVER_PORT=8080
export METRICS_ADDR=0.0.0.0 METRICS_PORT=9090
export REALTIME_ADDR=0.0.0.0 REALTIME_PORT=8081
export POSTGRES_ADDR=localhost POSTGRES_PORT=5432
export POSTGRES_USERNAME=ultraviolet
export POSTGRES_PASSWORD="$(cat ../service-env/secrets/postgres_password)"
export POSTGRES_DATABASE=ultraviolet
export POSTGRES_SCHEMA_PATH="$(pwd)/deploy/migrations"
export AUTH_JWT_SECRET="$(cat ../service-env/secrets/auth_jwt_secret)"
./bin/uv-api
フロントエンド: cd service-frontend && npm run dev(Viteが /api → :8080、/realtime → :8081 にプロキシします)。
cd service-env && make geoip-download # IPLocate MMDB → geoip/
make -C service-env cve-catalog-dump # CVE dump (requires running postgres)
make build && make lint && make frontend-build && make docs-build
対象プラットフォーム: linux/amd64。Apple Siliconでは、オフラインアーカイブ用に DOCKER_PLATFORM=linux/amd64 を設定してください。
git tag v0.1.0
make release VERSION=v0.1.0
make release-promote VERSION=v0.1.0 # :latest — required for local releases; GitHub Actions does this automatically
| アーカイブ | 内容 |
|---|---|
ultraviolet-vX.Y.Z.tar.gz | compose、スクリプト、.env.example(約50 KB、オンライン) |
ultraviolet-vX.Y.Z-offline.tar.gz | + amd64 Dockerイメージ |
ultraviolet-vX.Y.Z-offline-full.tar.gz | + CVEシード + GeoIP MMDB |
オンライン: 展開 → cp .env.example .env → ./install.sh(レジストリから取得)。
オフライン: ./install.sh(docker load、pullなし)。アップグレード: .env、secrets/、Postgresボリュームを保持したまま ./upgrade.sh を実行。
変数: UV_REGISTRY(デフォルト docker.io/styakush)、DRY_RUN=1 — プッシュなしのローカルスモークビルド。
# from the build machine
scp dist/ultraviolet-v0.1.0-offline.tar.gz user@host:~/
# on the server (Docker ≥ 24, amd64)
tar xzf ultraviolet-v0.1.0-offline.tar.gz && cd ultraviolet-v0.1.0
cp .env.example .env
./install.sh
アップグレード(データ保持):
docker compose -f docker-compose.yml down
# back up .env + secrets/, extract the new archive, run ./upgrade.sh
ディレクトリ名(ultraviolet-v0.1.0)は固定してください — postgres-data Dockerボリュームはそれに紐づいています。
secrets/ に保存し、gitには絶対にコミットしない。CORS_ALLOWED_ORIGINS には実際のUIオリジンのみを設定する。SCAN_ALLOWED_CIDRS とホスト・ポート数の制限を設定する。AUTH_JWT_SECRET を変更する(install.sh はプレースホルダーを拒否します)。APP_ENV=production を設定する — uv-apiは admin/admin と8文字未満のパスワードを拒否します。service-env/examples/nginx-tls.conf。AUDIT_TRUST_PROXY_HEADERS=true を設定する。service-env/scripts/backup.sh + cron; upgrade.sh もダンプを作成します。外部nginxでのTLS終端 — UIをループバックのみにバインド:
# docker-compose.override.yml
services:
service-frontend:
ports:
- "127.0.0.1:3000:8080"
CORS_ALLOWED_ORIGINS=https://ultraviolet.example.com
AUDIT_TRUST_PROXY_HEADERS=true
サブパス(/ultraviolet/):
VITE_BASE_PATH=/ultraviolet/ make frontend-build
# UV_BASE_PATH=/ultraviolet/ in compose — must match VITE_BASE_PATH
バックアップcron(毎日、14日間保持):
0 3 * * * cd /opt/ultraviolet/service-env && ./scripts/backup.sh && find backups -name 'uv-*.dump' -mtime +14 -delete
GeoIP更新(毎月1日):
0 4 1 * * cd /opt/ultraviolet/service-env && ./scripts/geoip-refresh.sh >> /var/log/uv-geoip.log 2>&1
POST /v1/auth/login の後、access_token(Bearer)と refresh_token(/v1/auth/refresh)を受け取ります。
| ロール | 権限 |
|---|---|
viewer | ホストの閲覧、検索、CVE、ダッシュボード |
operator | + スキャンの開始と管理 |
admin | + ユーザー、監査、設定 |
GET /v1/me · GET /v1/version · GET /readyz (health + version + commit)。
CONTRIBUTING.md を参照してください。セキュリティ報告: SECURITY.md。 コミュニティ基準: CODE_OF_CONDUCT.md。
UltraVioletはMITライセンスの下で公開されています。
UltraViolet — 自社の資産を発見し、変化を把握し、ネットワーク内に留める。
| リスク&コンプライアンス | ローカルNVDマッチングに加え、CISA KEVとEPSSに対応 — クラウド依存なし |
| エアギャップ環境での展開 | Dockerイメージ、CVEシード、GeoIP MMDBをディスクに保持するオフラインアーカイブ |
| 変更追跡 | スキャン間の差分、WebSocketイベント、保存済み検索に対するアラート |
| ディレクトリ | 目的 |
|---|
service-api/ | Go: uv-api(HTTP API、WebSocket、ワーカー)+ uv-scanner(パイプライン) |
service-frontend/ | React 19 + Vite + RTK — スキャン、ホスト、検索、ダッシュボード |
service-documentation-frontend/ | VitePress — ユーザー&オペレーター向けドキュメント |
service-env/ | docker-compose、シークレット、install.sh / upgrade.sh / バックアップ |
| Prometheus |
:9090/metricsobservabilityservice-env/scripts/geoip-refresh.sh を実行。