Server Access Audit

miopenclaw-vnic · what's exposed via Tailscale vs public web
Generated 2026-06-02 14:25 UTC · tailnet only · 100.87.116.90
Services tracked
12
running on host
Tailscale only
5
tailnet-accessible
Public exposure
4
0.0.0.0 bind (FW-pending)
Anomalies
5
need decision

Tailscale rules

https://...ts.net:8443/ → 127.0.0.1:3017 Funnel · public
https://...ts.net:8443/hevy-api/ → 127.0.0.1:8420 Funnel · public
https://...ts.net/health-ingest → 127.0.0.1:3007 tailnet
https://...ts.net/findings/ → 127.0.0.1:3010 tailnet

Services

hermes-webui
:3017 (127.0.0.1) · uvicorn
Tailscale Public · 8443
Exposed via Funnel :8443/. Pre-existente.
hevy-api
:8420 · Hevy Companion
Tailscale Public · 8443
Exposed via Funnel :8443/hevy-api/. Pre-existente.
health-bridge
:3007 (0.0.0.0) · FastAPI
Tailscale Public · 0.0.0.0
Funnel :8443 (público) + tailnet /health-ingest. Bind 0.0.0.0 también accesible si Oracle FW lo permite. HTTPS del tailnet roto (cert 500).
hundetuedel-help
:5000 (127.0.0.1) · Python
Cloudflare Tunnel
Loopback + cloudflared quick tunnel. Sin Tailscale rule. DNS en Strato sin migrar (NXDOMAIN en help.hundetuedel.de).
baby-checklist
:3006 (0.0.0.0) · Python
Public · 0.0.0.0
⚠ Anomalía: memory dice que estaba en Funnel, ahora no hay Tailscale rule. Bind 0.0.0.0 sin wrap = depende del FW de Oracle.
bibliothek
:8402 (127.0.0.1) · FastAPI/Node
Loopback
Accesible solo desde el host. OK.
clawrouter
:43501 (127.0.0.1) · LLM proxy
Loopback
Proxy local. Sin exposición. OK.
wa-bridge (Myristica)
:8080 (*) · Node
Public · *
⚠ Anomalía: bind a * (todas las interfaces) sin Tailscale rule visible. Depende del FW de Oracle.
ttyd
:3003 (0.0.0.0) · Web terminal
Public · 0.0.0.0
Web shell. Bind 0.0.0.0 sin wrap. ¿FW permite?
findings-site
:3010 (0.0.0.0) · http.server
Tailscale
⚠ Anomalía: Tailscale rule /findings/ apunta a 127.0.0.1:3010, pero quien escucha ahí ahora es hermes-webui/server.py (colisión). Sirve hermes-webui, no el findings dashboard.
tor
:9050 (127.0.0.1) · SOCKS
Loopback
Para scraping con exit node. OK.
sshd
:22 (0.0.0.0) · SSH
Public · 0.0.0.0
Bind 0.0.0.0. Pre-existente. Seguridad depende de keys + FW + fail2ban.

Anomalies — need decision

1. baby-checklist sin Tailscale rule CRITICAL
Memory dice que estaba en Funnel, ahora no. Bind a 0.0.0.0:3006. Si Oracle FW lo permite, público en http://163.176.211.134:3006. Acción: agregar Tailscale Funnel o cerrar bind a 127.0.0.1.
2. wa-bridge (Myristica) en * sin wrap CRITICAL
Bind a *:8080 (todas las interfaces). Sin Tailscale rule visible. El WA bridge debería ser tailnet-only o tener su propio Funnel. Acción: re-bind a 127.0.0.1 + agregar Tailscale serve/funnel.
3. colisión en :3010 CRITICAL
Tailscale rule /findings/127.0.0.1:3010, pero quien escucha es hermes-webui/server.py (no el findings dashboard). Acceder a /findings/ por Tailscale sirve hermes-webui, no el dashboard. Acción: re-bind http.server del findings-site a un puerto distinto, o cambiar el target del Tailscale rule.
4. Tailscale HTTPS cert API rota WARN
tailscale cert status → 500 "invalid domain" pese a que admin console muestra HTTPS enabled + cert válido. Afecta /health-ingest (pre-existente) y /findings/. Posible propagación pendiente o bug del Free plan.
5. ttyd bind 0.0.0.0 sin wrap WARN
Web shell en :3003 bind a todas las interfaces. Si Oracle FW permite, alguien con la URL tiene shell remoto. Acción: re-bind a 127.0.0.1 o wrap con Tailscale serve.