
UltraViolet v1.0.11
محرك اكتشاف وبحث للشبكات ذاتي الاستضافة مع مسح مستمر للمنافذ، وفحص عميق للبروتوكولات عبر حوالي 100 خدمة، ومطابقة محلية لـ CVE، وبحث نصي كامل لجرد البنية التحتية ومراقبة المخاطر.
UltraViolet
اكتشاف وبحث شبكي ذاتي الاستضافة — نسختك الخاصة من Shodan، على أجهزتك.
فحص TCP/UDP · ~100 فحص بروتوكول · بصمات TLS/JARM · مطابقة CVE · بحث نصي كامل · تتبع الفروقات · تنبيهات
بدء سريع · الميزات · البنية · الوثائق · قائمة التحقق للإنتاج
مهم. افحص فقط الشبكات التي تملكها أو لديك إذن كتابي لفحصها. ينفّذ UltraViolet استطلاعًا سلبيًا للخدمات — فهو لا يستغل الثغرات.
لماذا UltraViolet؟
| حالة الاستخدام | ما الذي تحصل عليه |
|---|---|
| حدود الشبكة والجرد | اكتشاف مستمر للمنافذ والخدمات المفتوحة عبر نطاقات CIDR |
| البحث في البنية التحتية | بحث نصي كامل عبر محتوى HTTP واللافتات وTLS وDNS والثغرات (CVEs) |
| المخاطر والامتثال | مطابقة محلية مع NVD بالإضافة إلى CISA KEV وEPSS — دون الاعتماد على السحابة |
| النشر المعزول (Air-gapped) | أرشيف دون اتصال يشمل صور Docker وبذرة CVE وملف GeoIP MMDB على القرص |
| تتبع التغييرات | الفروقات بين عمليات الفحص، وأحداث WebSocket، وتنبيهات على عمليات البحث المحفوظة |
مستأجر واحد، ومكدّس Docker Compose واحد، وسيطرة كاملة على بياناتك.
✨ الميزات
الاكتشاف
- ماسح اتصال TCP يعتمد على masscan أو zmap كمحرك اكتشاف
- فحوصات UDP على منافذ قابلة للتكوين
- يُحدَّد نطاقه عبر
SCAN_ALLOWED_CIDRSمع حدود للمضيفات والمنافذ
فحوصات عميقة (~100 بروتوكول)
- الويب: HTTP/HTTPS وHTTP/3 وGraphQL وتجزئة favicon و
robots.txtوsecurity.txtومكدّس التقنيات - TLS: سلاسل الشهادات، JARM، JA3S/JA4S، تقييم الإعدادات
- البريد والدلائل: SMTP وPOP3/IMAP وLDAP وIPMI
- قواعد البيانات وقوائم الانتظار: MySQL وPostgreSQL وMongoDB وRedis وKafka وMQTT وNATS وAMQP…
- ICS/SCADA: Modbus وBACnet وDNP3 وIEC 104 وS7Comm وENIP وOPC UA…
- إنترنت الأشياء والوسائط: ONVIF وRTSP وChromecast وAirPlay وUPnP…
- القائمة الكاملة في وثائق البروتوكولات
الإثراء
- DNS عكسي، GeoIP (MMDB)، ASN
- اكتشاف اختياري لـ DNS المباشر وسجلات CT
الثغرات (CVE) والمخاطر
- مرآة محلية لـ NVD مع مزامنة في الخلفية ومطابقة قائمة على البصمات
- CISA KEV وFIRST EPSS
العمليات
- التحكم بالوصول RBAC (
viewer/operator/admin)، JWT + رموز التحديث - جدولة عمليات الفحص، إيقاف مؤقت/استئناف، استعادة المهام اليتيمة بعد إعادة تشغيل العامل
- Prometheus
/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
صورة واجهة المستخدم في الإصدار توجّه /api/ و/realtime إلى uv-api — أصل واحد، دون إعادة بناء للواجهة الأمامية لكل عنوان API.
| الدليل | الغرض |
|---|---|
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 / النسخ الاحتياطي |
قواعد تطوير الواجهة الخلفية: CLAUDE.md.
🚀 بدء سريع
المتطلبات: Go 1.25+ ومحرك Docker ≥ 24 وذاكرة ~4 جيجابايت RAM. صور الإنتاج موجهة لنظام Linux amd64.
التشغيل من Docker Hub (بدون بناء من المصدر)
مسار المبتدئين — اسحب الصور المنشورة باستخدام
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 في موقع الوثائق.
التطوير من المصدر
تنسخ صور الواجهة البرمجية والماسح الضوئي الملفات الثنائية المجمّعة مسبقًا من service-api/bin/ (لا تُجمَّع داخل Docker). يشغّل make dev الأمر make -C service-api build-linux قبل docker compose … --build.
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 | واجهة المستخدم (API عبر nginx /api/) |
| http://localhost:8080 | API مباشرة |
| http://localhost:9090/metrics | Prometheus |
الإقلاع التطويري: admin / admin (فقط عندما APP_ENV≠production).
📖 الوثائق
الدليل الكامل — VitePress في service-documentation-frontend/docs/:
make docs-dev # → http://localhost:5173
في بيئة الإنتاج، فعّل ملف docs:
cd service-env && docker compose --profile docs up -d
# → http://localhost:${UV_DOCUMENTATION_PORT:-3002}
الأقسام الرئيسية: التثبيت · الفحص · API · النشر · التثبيت دون اتصال.
🛠 التطوير
Docker بالكامل
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).
GeoIP وCVE
cd service-env && make geoip-download # IPLocate MMDB → geoip/
make -C service-env cve-catalog-dump # CVE dump (requires running postgres)
البناء بدون Docker
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 كيلوبايت، عبر الإنترنت) |
ultraviolet-vX.Y.Z-offline.tar.gz | + صور Docker لـ amd64 |
ultraviolet-vX.Y.Z-offline-full.tar.gz | + بذرة CVE + GeoIP MMDB |
عبر الإنترنت: فك الضغط ← cp .env.example .env ← ./install.sh (سحب من السجل).
دون اتصال: ./install.sh (docker load، بدون سحب). الترقية: احتفظ بـ .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) ثابتًا — إذ ترتبط به وحدة تخزين Docker postgres-data.
✅ قائمة التحقق للإنتاج
- خزّن الأسرار في
secrets/، ولا تضعها أبدًا في git. - اضبط
CORS_ALLOWED_ORIGINSعلى نطاقات واجهة المستخدم الفعلية فقط. - هيّئ
SCAN_ALLOWED_CIDRSوحدود المضيف/المنفذ. - غيّر كلمة مرور الإقلاع و
AUTH_JWT_SECRET(يرفضinstall.shالقيم النائبة). - اضبط
APP_ENV=production— يرفض uv-apiadmin/adminوكلمات المرور الأقصر من 8 أحرف. - أنهِ TLS عند وكيل عكسي — مثال:
service-env/examples/nginx-tls.conf. - خلف وكيل: اضبط
AUDIT_TRUST_PROXY_HEADERS=true. - انقل PostgreSQL نسخة احتياطية:
service-env/scripts/backup.sh+ cron؛ وينشئupgrade.shأيضًا تفريغًا للبيانات. - المقاييس على
:9090/metrics؛ Grafana عبر ملفobservability. - حدّث GeoIP:
service-env/scripts/geoip-refresh.shعبر مهمة cron شهرية.
HTTPS والنشر بمسار فرعي وcron للنسخ الاحتياطي
إنهاء TLS على nginx خارجي — اربط واجهة المستخدم بالحلقة المحلية (loopback) فقط:
# 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 (الأول من كل شهر):
0 4 1 * * cd /opt/ultraviolet/service-env && ./scripts/geoip-refresh.sh >> /var/log/uv-geoip.log 2>&1
🔐 API والتحكم بالوصول (RBAC)
بعد تنفيذ POST /v1/auth/login تستلم access_token (Bearer) وrefresh_token (/v1/auth/refresh).
| الدور | الصلاحيات |
|---|---|
viewer | قراءة المضيفين، البحث، الثغرات (CVEs)، لوحة المعلومات |
operator | + بدء وإدارة عمليات الفحص |
admin | + المستخدمون، التدقيق، الإعدادات |
GET /v1/me · GET /v1/version · GET /readyz (الصحة + الإصدار + الالتزام).
🤝 المساهمة
انظر CONTRIBUTING.md. تقارير الأمان: SECURITY.md. معايير المجتمع: CODE_OF_CONDUCT.md.
📄 الرخصة
UltraViolet مُتاح بموجب رخصة MIT.
UltraViolet — اكتشف ما تملكه، وافهم ما تغيّر، وأبقِه على شبكتك.