Administration
Manager administration
Purpose
Operate the Manager after install: start and reload the service, use the console, manage administrator users, inspect settings and health, and keep secrets out of YAML on Enterprise.
This is the control plane. It does not attach eBPF and does not drop packets.
Audience
Linux administrators who own zwall-manager.service (or the Community bin/manager process) and the PostgreSQL database it uses.
Edition
Scroll sideways to see the full table. Use the arrow keys when focused.
| Capability | Community | Enterprise |
|---|---|---|
HTTP /api/v1, console, health probes | yes | yes |
-migrate / -preflight-migrate / -check-schema | yes | yes |
-validate-runtime, -build-info-json, -migration-exec-preflight | no | yes |
systemd unit User=zwall-manager, empty CapabilityBoundingSet | Community setup may write zwall-manager | shipped deploy/manager-systemd/zwall-manager.service |
| Production secrets in systemd credentials | operator-managed YAML/env | required in production example |
| License, Hosting APIs, AI Preview | no | yes |
| Manager cluster | n/a | implemented, license-gated, not a public HA product |
Status
SUPPORTED for single-Manager operation as documented here. Cluster and in-product updater remain non-customer products.
Prerequisites
- PostgreSQL prepared (Database preparation)
- Schema admitted (
-migrateor Enterprise database installer) - TLS files if
server.tls.enabled: true - Enterprise:
zwall-managersystem user (nologin, home/nonexistentas established by the config installer)
Required permissions
Host: root (or equivalent) to systemctl the unit. API: admin role for users, settings, maintenance, metrics, and almost all fleet/policy routes.
Dependencies
PostgreSQL (example name zwall_centralized_security, port 5432). The Manager does not use SQLite as its production database.
Configuration
Enterprise unit (zwall-manager.service):
Scroll sideways to see the full table. Use the arrow keys when focused.
| Item | Value |
|---|---|
| User / Group | zwall-manager |
| ExecStart | /opt/zwall-manager/bin/zwall-manager -config /etc/zwall-manager/manager.yml |
| EnvironmentFile | -/etc/zwall-manager/manager-nonsecret.env |
| ExecReload | /bin/kill -HUP $MAINPID |
| After | network-online.target postgresql.service |
| Restart | on-failure, RestartSec=5 |
| TimeoutStartSec / TimeoutStopSec | 60 / 30 |
| Hardening | NoNewPrivileges, PrivateTmp, ProtectSystem=strict, ProtectHome, empty CapabilityBoundingSet and AmbientCapabilities |
| ReadWritePaths | /var/lib/zwall-manager /var/log/zwall-manager /run/zwall-manager |
| WorkingDirectory | /var/lib/zwall-manager |
Community README typically uses /etc/zcs/manager.yml and default -config configs/manager.yaml if the flag is omitted. Do not invent a third layout.
Example listen: server.host: 0.0.0.0, server.port / server.api_port / web.port: 8443 with TLS.
Binary flags
Default -config on Enterprise is configs/manager.yml.
Scroll sideways to see the full table. Use the arrow keys when focused.
| Flag | Purpose |
|---|---|
-config | configuration file |
-version | print version |
-build-info-json | print executable build identity (Enterprise) |
-verbose / -debug | logging |
-log-file | log file (default stdout) |
-migrate | forward-only preflight, apply schema bootstrap and tracked migrations, then exit |
-init-db | deprecated alias for -migrate |
-preflight-migrate | validate migration history and pending plan without applying |
-check-schema | validate recorded schema version/checksums without applying |
-migration-exec-preflight | validate migration executable/config/credential lifecycle without connecting to the database (Enterprise) |
-validate-runtime | validate credentials, schema, KEK, licensing without starting listeners (Enterprise) |
-help | help |
Choose only one of -migrate, -preflight-migrate, -check-schema, -migration-exec-preflight, -validate-runtime. Combining them fatals.
Database-only installer flags (-migration-config, -legacy-ledger-transition, and related proof inputs) are release-admission machinery, not daily operator commands. Do not run legacy-ledger transition as a customer procedure.
Community implements -config, -version, -verbose, -debug, -log-file, -migrate, -init-db, -preflight-migrate, -check-schema, -help. Community default -config is configs/manager.yaml.
Procedure — service control
sudo systemctl enable --now zwall-manager
sudo systemctl status zwall-manager
sudo systemctl reload zwall-manager
sudo systemctl restart zwall-managerreload sends SIGHUP. Treat HUP as “request reload,” not a certified live-apply of every YAML key.
YAML secret fields in Enterprise production stay empty: database.password, auth.jwt_secret, auth.default_admin.password. Non-secret environment may live in /etc/zwall-manager/manager-nonsecret.env.
Secret custody:
sudo bash scripts/setup.sh --manager-secret-custody freshActions are fresh|migrate|rotate. Enterprise zwallctl secret-rotate defers to this path. Secret custody is implemented but not certified.
Procedure — console and users
Operators use the SPA at /login (Console).
Administrator users: GET/POST/DELETE /api/v1/users (admin). Roles admin, viewer, release_manager. Most operator APIs require admin. See Authentication.
Settings groups exist at /api/v1/settings (general/security/eBPF/notification-related configuration stored on the Manager). Change them from the console or API; do not assume every key is hot-reloaded.
Procedure — maintenance and backup
/api/v1/maintenance exists. Example YAML maintenance.backup_dir: "/var/backups/zwall".
Verified production backup still uses the repo-managed scripts documented in Backup. Do not assume the admin backup API or zwallctl backup is a complete substitute. There is no published RPO/RTO.
Testing / non-enforcing mode for enforcement estates:
zwallctl test-flush
zwallctl test-flush-status
zwallctl test-flush-disableThese call POST / GET / DELETE /api/v1/maintenance/testing-mode. Inspect before enforcing. This is not a benchmark. Do not enable testing-mode flush as a Hosting observation procedure.
Procedure — metrics
When metrics.enabled is true (example default true), GET /metrics (or metrics.path) requires admin JWT/session and RoleAuth("admin"). Optional metrics.allowed_cidrs may further restrict source IPs. Treat scrape credentials as admin-equivalent.
Verification
systemctl is-active zwall-manager→activeGET /health/live→{"status":"alive",...}GET /health/ready→{"status":"ready","database":"ok",...}/loginauthenticateszwallctl login --manager-url https://manager.example.com:8443 --username adminthenzwallctl list-agents- Enterprise optional:
zwall-manager -config /etc/zwall-manager/manager.yml -validate-runtimethen exit 0 without leaving a second long-running process
Expected result
A single Manager process serving API and console, schema migrated, default admin bootstrapped through the secret contract, Agents able to register when pre-registered. Packet policy still happens only on Virtualization Agents.
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Cause | Action |
|---|---|---|
| Unit start timeout | PostgreSQL down, missing TLS files, missing JWT credential | journal; /health/ready |
| Fatal “Choose only one of -migrate…” | exclusive flags combined | run one mode |
| Fatal JWT secret required | YAML empty and credential missing | secret-custody path / Community env |
| Console up, Agents cannot register | auto_register: false and no pre-register | Enrollment |
| Backup API success assumed durable | incomplete backup contract | use Backup |
| Cluster YAML enabled | not a public HA product | keep cluster off unless an internal program owns it |
Troubleshooting
See Manager unavailable and Health.
Logs: example YAML logging.file: /var/log/zcs/firewall-manager.log; Enterprise unit ReadWritePaths includes /var/log/zwall-manager. Use journalctl -u zwall-manager regardless.
Security considerations
- Empty
CapabilityBoundingSet,NoNewPrivileges,ProtectSystem=strict. - Do not run the Manager as root.
- Do not put production JWT, database, or admin passwords in YAML on Enterprise.
/metricsis admin-gated.- Trusted client IP / proxy headers stay disabled unless the Manager is loopback-only behind an HTTP-aware edge that overwrites the canonical scheme header.
Limitations
- No certified customer HA.
- No certified backup/restore SLA.
- Path prefix is not canonical across Manager, Hosting, and Virtualization units.
- Listen port example (
8443) disagrees withzwallctldefault (8080). - Secret custody not final-accepted.
zwallctl start/stopprint that remote start/stop is not implemented; use systemd.