
자체 호스팅 네트워크 탐색 및 검색 엔진으로, 지속적인 포트 스캔, 약 100개 서비스에 대한 심층 프로토콜 프로빙, 로컬 CVE 매칭, 그리고 인프라 인벤토리 및 위험 모니터링을 위한 전문 검색을 제공합니다.
자체 호스팅 네트워크 탐색 및 검색 — 자신의 하드웨어에서 실행하는 나만의 Shodan.
TCP/UDP 스캐닝 · 약 100개 프로토콜 프로브 · TLS/JARM 지문 · CVE 매칭 · 전문 검색 · 델타 추적 · 알림
빠른 시작 · 기능 · 아키텍처 · 문서 · 프로덕션 체크리스트
중요. 소유한 네트워크 또는 서면 승인을 받은 네트워크만 스캔하세요. UltraViolet은 수동적 서비스 정찰만 수행하며 취약점을 악용하지 않습니다.
| 사용 사례 | 제공 기능 |
|---|---|
| 경계 및 인벤토리 | CIDR 범위 전체에서 열린 포트와 서비스의 지속적 발견 |
| 인프라 검색 | HTTP 본문, 배너, TLS, DNS, CVE에 대한 전문 검색 |
| 위험 및 규정 준수 | 로컬 NVD 매칭 + CISA KEV 및 EPSS — 클라우드 의존성 없음 |
| 에어갭 배포 | Docker 이미지, CVE 시드, GeoIP MMDB를 디스크에 포함한 오프라인 아카이브 |
| 변경 추적 | 스캔 간 델타, WebSocket 이벤트, 저장된 검색에 대한 알림 |
단일 테넌트, 하나의 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별 프론트엔드 재빌드 불필요.
| 디렉터리 | 용도 |
|---|---|
service-api/ | Go: uv-api(HTTP API, WebSocket, 워커) + uv-scanner(파이프라인) |
service-frontend/ | React 19 + Vite + RTK — 스캔, 호스트, 검색, 대시보드 |
service-documentation-frontend/ | VitePress — 사용자 및 운영자 문서 |
service-env/ | docker-compose, secrets, install.sh / upgrade.sh / 백업 |
백엔드 개발 규칙: CLAUDE.md.
요구 사항: Go 1.25+, Docker Engine ≥ 24, 약 4GB RAM. 프로덕션 이미지는 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/스캐너 이미지는 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 | Prometheus |
개발 부트스트랩: 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(약 50KB, 온라인) |
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(레지스트리에서 풀).