Web User Interface for OpenVPN
1.9K
Security-hardened fork of d3vilh/openvpn-ui, maintained by OZON08. Critical/high vulnerabilities fixed, dependencies updated, build reliability improved. Full details in CHANGELOG.md.
OpenVPN server web administration interface — quick to deploy, easy to use.
dev tun) and bridge (dev tap) server configurationsopenvpn-ui, UID/GID 1000) via su-exec. Mitigates privilege-escalation impact from host kernel vulnerabilities (e.g. CVE-2026-31431). Group write permissions ensure EasyRSA scripts continue to function without root.easyrsa helper scripts read EasyRsaPath/OpenVpnPath via a broken relative path. Paths are now injected as env vars from Go. Dockerfile COPY order also corrected so the container-variant app.conf is not overwritten by the dev-time copy. Light/dark toggle hidden in the topbar (dark mode forced).grafana/provisioning/) auto-loaded at container start: Aktive Verbindungen (live, 1 min refresh), Traffic-Verlauf (30-day history), Nutzer-Detail (per-user drill-down). InfluxDB 3 Core datasource provisioned automatically via YAML; no manual Grafana setup required./api/v1/monitor/* endpoints + optional OpenVPN client-disconnect webhook. UI refresh: AdminLTE sidebar layout with dark-mode default.| Severity | Issue |
|---|---|
| Critical | Command injection in certificate/PKI management |
| Critical | Path traversal in certificate download endpoint |
| Critical | Path traversal in image display endpoint |
| Critical | CSRF via hardcoded OAuth state parameter |
| High | OAuth internal errors exposed to unauthenticated users |
| High | LDAP injection in authentication |
| High | SQL query logging of sensitive data in production |
| Medium | Race condition on global configuration state |
| Medium | World-readable client config files containing private keys |
| Medium | Weak password policy (minimum length raised 6 → 12) |
| Low | World-readable static IP config files |
---
version: "3.5"
services:
openvpn:
container_name: openvpn
image: ozon08/openvpn-server:latest
privileged: true
ports:
- "1194:1194/udp"
environment:
TRUST_SUB: 10.0.70.0/24
GUEST_SUB: 10.0.71.0/24
HOME_SUB: 192.168.88.0/24
volumes:
- ./pki:/etc/openvpn/pki
- ./clients:/etc/openvpn/clients
- ./config:/etc/openvpn/config
- ./staticclients:/etc/openvpn/staticclients
- ./log:/var/log/openvpn
- ./fw-rules.sh:/opt/app/fw-rules.sh
- ./server.conf:/etc/openvpn/server.conf
cap_add:
- NET_ADMIN
restart: always
openvpn-ui:
container_name: openvpn-ui
image: ozon08/openvpn-ui:latest
environment:
- OPENVPN_ADMIN_USERNAME=admin
- OPENVPN_ADMIN_PASSWORD=changeme
privileged: true
ports:
- "8080:8080/tcp"
volumes:
- ./:/etc/openvpn
- ./db:/opt/openvpn-ui/db
- ./pki:/usr/share/easy-rsa/pki
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: always
git clone https://github.com/OZON08/openvpn-server ~/openvpn-server
cd ~/openvpn-server
docker compose up -d
docker run \
-v /etc/openvpn:/etc/openvpn \
-v /etc/openvpn/db:/opt/openvpn-ui/db \
-v /etc/openvpn/pki:/usr/share/easy-rsa/pki \
-v /var/run/docker.sock:/var/run/docker.sock \
-e OPENVPN_ADMIN_USERNAME='admin' \
-e OPENVPN_ADMIN_PASSWORD='changeme' \
-p 8080:8080/tcp \
--privileged ozon08/openvpn-ui:latest
| Variable | Description |
|---|---|
OPENVPN_ADMIN_USERNAME | Admin username (set on first start) |
OPENVPN_ADMIN_PASSWORD | Admin password — min 12 characters (set on first start) |
GOOGLE_CLIENT_ID | Google OAuth 2.0 client ID (optional) |
GOOGLE_CLIENT_SECRET | Google OAuth 2.0 client secret (optional) |
GOOGLE_REDIRECT_URL | Google OAuth 2.0 redirect URL (optional) |
ALLOWED_DOMAINS | Comma-separated list of allowed email domains for OAuth (optional) |
APP_ENV | Set to development to enable ORM debug logging (default: production) |
OpenVPN UI is accessible at http://localhost:8080 (default).
After the first start:
OPENVPN_ADMIN_USERNAME / OPENVPN_ADMIN_PASSWORD env vars after the first successful login.docker pull ozon08/openvpn-ui:latest
docker rm openvpn-ui --force
docker compose up -d
The database schema is updated automatically on first start after upgrade.
Content type
Image
Digest
sha256:cdd0d4341…
Size
57.2 MB
Last updated
23 days ago
docker pull ozon08/openvpn-ui:dev