Firewall
1.4. Firewall — Open Only the Ports You Actually Need
The port map to know before installing
| Port | Used for | Open publicly? |
|---|---|---|
| Dashboard/Web UI, Desktop Remote Gateway | Authentication mandatory | No — loopback or via Tailscale |
| OpenAI-compatible API server | Optional | Only when an outside client truly needs it |
| SSH | Administration | No if you already have Tailscale |
| Telegram/Discord/Slack… | Outbound connections | No ports need to be opened |
General rule: deny all inbound by default; open only what is actually necessary, via Tailscale.
A specific note if you choose Docker in 2.3
Containers expose ports to the outside in Docker’s own way (operating iptables directly) and can accidentally bypass the OS’s default firewall rules if not configured correctly at container start. Safe port mapping is detailed in 2.3 — but the infrastructure principle here remains: decide first which ports are allowed to be open, then configure how Hermes runs to match that decision, not the other way around.
Notes
- Lock in the firewall policy (default deny, allow only via Tailscale) before running any install command in chapter 2 — avoid discovering an exposed port only after the install.
- Re-audit the rules after adding every new integration (MCP HTTP server, webhooks…) — a new integration may need a port that you forget to close after testing.