Management & Access
Service URLs
Each SOC service has its own web UI. Access in two modes:
- Via FQDN (recommended) — nginx reverse proxy on CT502 (192.168.200.5) with wildcard SSL
*.nasbu.edu.ua+ ACL restrictions (see below). - Direct to CT — IP + port inside VLAN250. For debugging, when nginx is unavailable, or for internal automation.
| Service | FQDN (via rproxy) | Direct in VLAN250 | CT | Status |
|---|---|---|---|---|
| Wazuh Dashboard | https://wazuh.nasbu.edu.ua |
https://10.250.0.12:443 |
CT703 | 🟢 |
| TheHive | https://thehive.nasbu.edu.ua |
http://10.250.0.30:9000 |
CT710 | 🟢 (4.1.24) |
| Cortex | https://cortex.nasbu.edu.ua |
http://10.250.0.31:9001 |
CT711 | 🟢 |
| MISP | https://misp.nasbu.edu.ua |
https://10.250.0.15 |
CT706 | 🟢 |
| Shuffle | https://shuffle.nasbu.edu.ua |
http://10.250.0.32:3443 |
CT712 | 🟢 |
| Velociraptor | https://velociraptor.nasbu.edu.ua |
https://10.250.0.33:8889 |
CT713 | 🟢 |
| Wazuh Manager API | — (REST only) | https://10.250.0.11:55000 |
CT702 | 🟢 |
| Wazuh Indexer REST API | — (REST only) | https://10.250.0.10:9200, .13, .14 |
CT701/704/705 | 🟢 |
| CrowdSec LAPI | — (API only, no UI) | http://10.250.0.16:8080 |
CT707 | 🟢 — managed via cscli on CT707 |
| CrowdSec blocklist feed | — | http://10.250.0.16/security/blocklist |
CT707 | 🟢 — FortiGate pulls every minute |
!!! warning "Not deployed (Tier 3 planned)" - Grafana — executive dashboards, BACKLOG TASK-092e - CrowdSec Cloud Console — not used; only local LAPI
If older documentation mentions URLs like `grafana:3000` or `crowdsec:3000` — those are planning placeholders, not reality.
ACL — who can reach the FQDNs
Why SOC UIs are inaccessible from the internet: these subdomains (wazuh, thehive, cortex, misp, shuffle, velociraptor) exist only in the internal FortiGate DNS — they are not in Cloudflare at all. From the public internet, DNS simply does not resolve.
The nginx ACL is a second layer for internal networks (limits who from inside can access the UI):
allow 10.99.0.0/24; # VPN clients (WireGuard)
allow 10.30.0.9; # admin-node (for curl tests from bastion)
allow 10.168.150.0/24; # Academy office network
allow 10.250.0.0/24; # SIEM VLAN250 (CT-to-CT internal)
deny all; # everything else → 403 Forbidden
SSH access to Proxmox nodes and containers
The SOC infrastructure lives on 5 separate Proxmox nodes (not a cluster). SSH access: PC → admin-node (94.45.140.197:2223) → reverse SSH tunnel → localhost:227X (port for each siem-pxN node). No intermediate hops (workspace, share) in this chain.
| SSH alias | Proxmox node | Host IP (VLAN250) | SSH port | Containers on it |
|---|---|---|---|---|
siem-px1 |
siem-px1 | 10.250.0.2 | 2270 | CT701 — Wazuh Indexer primary |
siem-px2 |
siem-px2 | 10.250.0.3 | 2271 | CT702 (Wazuh Manager) · CT710 (TheHive) · CT711 (Cortex) |
siem-px3 |
siem-px3 | 10.250.0.4 | 2272 | CT703 (Wazuh Dashboard) · CT704 (Wazuh Indexer replica 1) |
siem-px4 |
siem-px4 | 10.250.0.5 | 2273 | CT706 (MISP) · CT707 (CrowdSec) · CT712 (Shuffle) |
siem-px5 |
siem-px5 | 10.250.0.6 | 2274 | CT705 (Wazuh Indexer replica 2) · CT713 (Velociraptor) |
Proxmox web UI on each node: https://10.250.0.X:8006 (only from VLAN250 / VPN). No public FQDN.
Typical command patterns inside a CT
# Service status
ssh siem-px2 'pct exec 710 -- systemctl status docker'
# Docker container logs
ssh siem-px2 'pct exec 710 -- docker logs thehive --tail 50'
# curl from inside a CT to a local service
ssh siem-px4 'pct exec 706 -- curl -sk https://localhost/users/login'
# "CT host level" pattern (on the Proxmox node itself, not in CT)
ssh siem-px2 'dmesg -T | tail -30'
Management Model
There is no single control plane (like Kubernetes). Each service is a standalone web UI + auth + config.
Key points:
- Shuffle was intended as the orchestrator ("conductor", SOAR layer), but currently idle: no playbooks written (TASK-092d subtask 22 deferred). Real automation happens via custom Python/bash scripts on CT702:
/var/ossec/integrations/custom-thehive.py— Wazuh → TheHive Alert/var/ossec/integrations/custom-crowdsec-block.py— Wazuh → CrowdSec decision/var/ossec/integrations/custom-teams.sh— Wazuh → Teams webhook
- Proxmox manages underlying infrastructure (CT/VM, storage, network) — not SOC applications.
-
No centralized SSO yet (TASK-115 planned). Each system has its own credentials. Plan: Keycloak with LDAP federation → two AD groups (both in
OU=AcadAdmins):SOC-Users(6 members) — base access to SOC UIsSOC-Admins(2 members: Samuel, OleksiiSt) — admin role in all services
Both admin users are also in
SOC-Users. Note: email in our AD lives in theuserPrincipalNameattribute, notmail. - Centralized logging exists only for security events (Wazuh Indexer). Application logs (nginx access, docker stdout, systemd journal) remain on individual CTs.
Access Patterns by Role
| Role | Primary UI | Additional | Notes |
|---|---|---|---|
| SOC Analyst Tier 1 | Wazuh Dashboard + TheHive | Teams (notifications) | 60% of time — Wazuh Dashboard; triage — TheHive. Details in 006. Daily Routine - Tier 1. |
| SOC Analyst Tier 2 | TheHive (case management) | Wazuh Dashboard, MISP, Cortex | Deep investigations, pivot to forensics |
| SOC Analyst Tier 3 / Threat Hunter | Velociraptor + Wazuh Indexer search | MISP, TheHive | Proactive hunts, deep forensics, threat research |
| SOC Manager / CISO | (future: Grafana) | Wazuh Dashboard executive view | Tier 3, component not yet deployed |
| System Administrator | SSH bastion chain + pct exec |
Proxmox web UI (VLAN250) | Not via SOC UI — via Proxmox/CLI |
| Automation (planned) | Shuffle | All services via API | Shuffle idle; currently bypassed by custom scripts on CT702 |
FortiGate policies (for reference)
| Policy ID | Purpose |
|---|---|
| 135 | SOC:RProxy→VLAN250-GUI — allows nginx (CT502 in VLAN200) to reach SOC services in VLAN250 on ports 443, 9000, 9001, 3443, 8889 |
| 137 | CrowdSec:Block-Inbound — DROP IPs from CrowdSec feed (external-resource feed, 1 min refresh) |
| 119 | VLAN150→VLAN250 ALL — allows office network into SOC |
| 113 | SOC→Internet — VLAN250 → WAN (HTTPS/HTTP/DNS/NTP) for Docker pulls, VirusTotal/AbuseIPDB APIs, MISP feeds |
Last updated: 2026-04-15. Reflects state after Tier 2 deployment (2026-04-14) and TheHive 5.5 → 4.1.24 downgrade (2026-04-15).