@lamalibre/create-lamaste 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +118 -0
- package/README.md +114 -0
- package/bin/create-lamaste.js +15 -0
- package/package.json +54 -0
- package/scripts/bundle-vendor.js +110 -0
- package/scripts/lamaste-cert-info +62 -0
- package/scripts/lamaste-certbot +96 -0
- package/scripts/lamaste-priv +693 -0
- package/src/index.js +646 -0
- package/src/lib/accounts.js +86 -0
- package/src/lib/binaries.js +137 -0
- package/src/lib/cert-help-page.js +160 -0
- package/src/lib/env.js +132 -0
- package/src/lib/http-redirect.js +38 -0
- package/src/lib/ownership.js +231 -0
- package/src/lib/relay-services.js +103 -0
- package/src/lib/secrets.js +19 -0
- package/src/lib/service-config.js +311 -0
- package/src/lib/summary.js +131 -0
- package/src/lib/wrappers.js +63 -0
- package/src/tasks/gatekeeper.js +233 -0
- package/src/tasks/harden.js +293 -0
- package/src/tasks/mtls.js +193 -0
- package/src/tasks/nginx.js +265 -0
- package/src/tasks/node.js +110 -0
- package/src/tasks/panel.js +408 -0
- package/src/tasks/redeploy.js +438 -0
- package/vendor/docs/00-introduction/how-it-works.md +447 -0
- package/vendor/docs/00-introduction/quickstart.md +472 -0
- package/vendor/docs/00-introduction/what-is-lamaste.md +112 -0
- package/vendor/docs/01-concepts/authentication.md +464 -0
- package/vendor/docs/01-concepts/authorization.md +242 -0
- package/vendor/docs/01-concepts/certificates.md +452 -0
- package/vendor/docs/01-concepts/dns-and-domains.md +343 -0
- package/vendor/docs/01-concepts/mtls.md +490 -0
- package/vendor/docs/01-concepts/nginx-reverse-proxy.md +540 -0
- package/vendor/docs/01-concepts/security-model.md +600 -0
- package/vendor/docs/01-concepts/tickets.md +414 -0
- package/vendor/docs/01-concepts/tunneling.md +367 -0
- package/vendor/docs/02-guides/agent-setup.md +194 -0
- package/vendor/docs/02-guides/certificate-management.md +341 -0
- package/vendor/docs/02-guides/cloud-provisioning.md +406 -0
- package/vendor/docs/02-guides/desktop-app-setup.md +226 -0
- package/vendor/docs/02-guides/disaster-recovery.md +464 -0
- package/vendor/docs/02-guides/first-tunnel.md +230 -0
- package/vendor/docs/02-guides/installation.md +393 -0
- package/vendor/docs/02-guides/managing-users.md +255 -0
- package/vendor/docs/02-guides/onboarding.md +244 -0
- package/vendor/docs/02-guides/standalone-plugin-with-tickets.md +375 -0
- package/vendor/docs/02-guides/static-sites.md +364 -0
- package/vendor/docs/03-architecture/e2e-three-vm-sequences.md +457 -0
- package/vendor/docs/03-architecture/installer-flow.md +151 -0
- package/vendor/docs/03-architecture/installer.md +445 -0
- package/vendor/docs/03-architecture/management-flow.md +288 -0
- package/vendor/docs/03-architecture/nginx-configuration.md +830 -0
- package/vendor/docs/03-architecture/onboarding-flow.md +164 -0
- package/vendor/docs/03-architecture/overview.md +541 -0
- package/vendor/docs/03-architecture/panel-client.md +416 -0
- package/vendor/docs/03-architecture/panel-server.md +695 -0
- package/vendor/docs/03-architecture/state-management.md +529 -0
- package/vendor/docs/03-architecture/system-overview.md +167 -0
- package/vendor/docs/04-api-reference/certificates.md +1141 -0
- package/vendor/docs/04-api-reference/gatekeeper.md +592 -0
- package/vendor/docs/04-api-reference/onboarding.md +473 -0
- package/vendor/docs/04-api-reference/overview.md +404 -0
- package/vendor/docs/04-api-reference/services.md +267 -0
- package/vendor/docs/04-api-reference/settings.md +343 -0
- package/vendor/docs/04-api-reference/sites.md +716 -0
- package/vendor/docs/04-api-reference/system.md +268 -0
- package/vendor/docs/04-api-reference/tickets.md +618 -0
- package/vendor/docs/04-api-reference/tunnels.md +417 -0
- package/vendor/docs/04-api-reference/users.md +333 -0
- package/vendor/docs/05-operations/backup-and-restore.md +342 -0
- package/vendor/docs/05-operations/monitoring.md +285 -0
- package/vendor/docs/05-operations/uninstalling.md +344 -0
- package/vendor/docs/05-operations/upgrades.md +270 -0
- package/vendor/docs/06-reference/config-files.md +1080 -0
- package/vendor/docs/06-reference/glossary.md +528 -0
- package/vendor/docs/06-reference/installer-flags.md +260 -0
- package/vendor/docs/06-reference/ports-and-services.md +244 -0
- package/vendor/docs/06-reference/troubleshooting.md +665 -0
- package/vendor/docs/_index.json +233 -0
- package/vendor/docs/gatekeeper-design.md +953 -0
- package/vendor/docs/package.json +15 -0
- package/vendor/docs/todo/lib-cli-desktop-refactor.md +641 -0
- package/vendor/gatekeeper/dist/boot.d.ts +1 -0
- package/vendor/gatekeeper/dist/boot.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/boot.js +17 -0
- package/vendor/gatekeeper/dist/boot.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/access.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js +33 -0
- package/vendor/gatekeeper/dist/cli/commands/access.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js +110 -0
- package/vendor/gatekeeper/dist/cli/commands/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts +2 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js +98 -0
- package/vendor/gatekeeper/dist/cli/commands/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts +3 -0
- package/vendor/gatekeeper/dist/cli/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/cli/index.js +45 -0
- package/vendor/gatekeeper/dist/cli/index.js.map +1 -0
- package/vendor/gatekeeper/dist/index.d.ts +9 -0
- package/vendor/gatekeeper/dist/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/index.js +13 -0
- package/vendor/gatekeeper/dist/index.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/authz.js +42 -0
- package/vendor/gatekeeper/dist/lib/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts +15 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js +19 -0
- package/vendor/gatekeeper/dist/lib/cache-bust.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts +82 -0
- package/vendor/gatekeeper/dist/lib/constants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/constants.js +79 -0
- package/vendor/gatekeeper/dist/lib/constants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts +32 -0
- package/vendor/gatekeeper/dist/lib/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/grants.js +314 -0
- package/vendor/gatekeeper/dist/lib/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts +10 -0
- package/vendor/gatekeeper/dist/lib/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/groups.js +247 -0
- package/vendor/gatekeeper/dist/lib/groups.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts +17 -0
- package/vendor/gatekeeper/dist/lib/migration.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/migration.js +79 -0
- package/vendor/gatekeeper/dist/lib/migration.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0001_groups.sql +7 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0002_access_grants.sql +14 -0
- package/vendor/gatekeeper/dist/lib/migrations/migrations/gatekeeper/0003_access_request_log.sql +9 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts +16 -0
- package/vendor/gatekeeper/dist/lib/state-db.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/state-db.js +154 -0
- package/vendor/gatekeeper/dist/lib/state-db.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts +21 -0
- package/vendor/gatekeeper/dist/lib/templates.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/templates.js +151 -0
- package/vendor/gatekeeper/dist/lib/templates.js.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts +178 -0
- package/vendor/gatekeeper/dist/lib/types.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/lib/types.js +2 -0
- package/vendor/gatekeeper/dist/lib/types.js.map +1 -0
- package/vendor/gatekeeper/dist/server/index.d.ts +15 -0
- package/vendor/gatekeeper/dist/server/index.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/index.js +251 -0
- package/vendor/gatekeeper/dist/server/index.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts +7 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js +17 -0
- package/vendor/gatekeeper/dist/server/routes/access-request.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/authz.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js +279 -0
- package/vendor/gatekeeper/dist/server/routes/authz.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts +13 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js +249 -0
- package/vendor/gatekeeper/dist/server/routes/diagnostic.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/grants.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js +112 -0
- package/vendor/gatekeeper/dist/server/routes/grants.js.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts +3 -0
- package/vendor/gatekeeper/dist/server/routes/groups.d.ts.map +1 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js +139 -0
- package/vendor/gatekeeper/dist/server/routes/groups.js.map +1 -0
- package/vendor/gatekeeper/package.json +49 -0
- package/vendor/server/bin/lamaste-server.js +204 -0
- package/vendor/server/package.json +31 -0
- package/vendor/server/src/commands/certs.js +224 -0
- package/vendor/server/src/commands/chisel.js +132 -0
- package/vendor/server/src/commands/logs.js +49 -0
- package/vendor/server/src/commands/plugins.js +321 -0
- package/vendor/server/src/commands/reset-admin.js +478 -0
- package/vendor/server/src/commands/restart.js +94 -0
- package/vendor/server/src/commands/sites.js +257 -0
- package/vendor/server/src/commands/status.js +158 -0
- package/vendor/server/src/commands/tunnels.js +365 -0
- package/vendor/server/src/commands/uninstall.js +326 -0
- package/vendor/server/src/config.js +38 -0
- package/vendor/server/src/exec.js +26 -0
- package/vendor/server/src/logger.js +39 -0
- package/vendor/server/src/ndjson.js +56 -0
- package/vendor/server/src/panel-api.js +85 -0
- package/vendor/server/src/state.js +45 -0
- package/vendor/server-ui/dist/assets/index-B0nWuUyL.js +257 -0
- package/vendor/server-ui/dist/assets/index-BqWWFlTU.css +1 -0
- package/vendor/server-ui/dist/index.html +13 -0
- package/vendor/serverd/package.json +44 -0
- package/vendor/serverd/src/boot.js +13 -0
- package/vendor/serverd/src/index.js +191 -0
- package/vendor/serverd/src/lib/app-error.js +14 -0
- package/vendor/serverd/src/lib/authelia.js +85 -0
- package/vendor/serverd/src/lib/certbot.js +74 -0
- package/vendor/serverd/src/lib/chisel-args.js +6 -0
- package/vendor/serverd/src/lib/chisel-reconcile.js +232 -0
- package/vendor/serverd/src/lib/chisel-runtime.js +46 -0
- package/vendor/serverd/src/lib/chisel-users.js +109 -0
- package/vendor/serverd/src/lib/chisel.js +81 -0
- package/vendor/serverd/src/lib/config.js +190 -0
- package/vendor/serverd/src/lib/constants.js +8 -0
- package/vendor/serverd/src/lib/csr-signing.js +331 -0
- package/vendor/serverd/src/lib/enrollment.js +302 -0
- package/vendor/serverd/src/lib/files.js +19 -0
- package/vendor/serverd/src/lib/gatekeeper-client.js +135 -0
- package/vendor/serverd/src/lib/invite-page.js +281 -0
- package/vendor/serverd/src/lib/ip-utils.js +79 -0
- package/vendor/serverd/src/lib/migrations/state/0001_enrollment_tokens.sql +17 -0
- package/vendor/serverd/src/lib/migrations/state/0002_tickets.sql +70 -0
- package/vendor/serverd/src/lib/migrations/state/0003_plugins.sql +15 -0
- package/vendor/serverd/src/lib/migrations/state/0004_agents.sql +19 -0
- package/vendor/serverd/src/lib/mtls.js +795 -0
- package/vendor/serverd/src/lib/nginx.js +1090 -0
- package/vendor/serverd/src/lib/pki-paths.js +41 -0
- package/vendor/serverd/src/lib/pki-sign.js +103 -0
- package/vendor/serverd/src/lib/plugins.js +538 -0
- package/vendor/serverd/src/lib/push-install.js +390 -0
- package/vendor/serverd/src/lib/revocation.js +112 -0
- package/vendor/serverd/src/lib/services.js +131 -0
- package/vendor/serverd/src/lib/session.js +151 -0
- package/vendor/serverd/src/lib/state-db.js +130 -0
- package/vendor/serverd/src/lib/state.js +140 -0
- package/vendor/serverd/src/lib/storage.js +63 -0
- package/vendor/serverd/src/lib/system-stats.js +58 -0
- package/vendor/serverd/src/lib/tickets.js +1556 -0
- package/vendor/serverd/src/lib/totp.js +76 -0
- package/vendor/serverd/src/lib/tunnel-deps.js +41 -0
- package/vendor/serverd/src/lib/user-access-session.js +142 -0
- package/vendor/serverd/src/lib/user-access.js +52 -0
- package/vendor/serverd/src/middleware/errors.js +63 -0
- package/vendor/serverd/src/middleware/mtls.js +120 -0
- package/vendor/serverd/src/middleware/onboarding-guard.js +30 -0
- package/vendor/serverd/src/middleware/role-guard.js +58 -0
- package/vendor/serverd/src/middleware/twofa-session.js +65 -0
- package/vendor/serverd/src/middleware/user-access-session.js +52 -0
- package/vendor/serverd/src/routes/enrollment.js +120 -0
- package/vendor/serverd/src/routes/health.js +22 -0
- package/vendor/serverd/src/routes/invite.js +163 -0
- package/vendor/serverd/src/routes/management/agents.js +182 -0
- package/vendor/serverd/src/routes/management/certs.js +911 -0
- package/vendor/serverd/src/routes/management/gatekeeper-proxy.js +160 -0
- package/vendor/serverd/src/routes/management/identity.js +107 -0
- package/vendor/serverd/src/routes/management/invitations.js +166 -0
- package/vendor/serverd/src/routes/management/logs.js +218 -0
- package/vendor/serverd/src/routes/management/plugins.js +560 -0
- package/vendor/serverd/src/routes/management/services.js +63 -0
- package/vendor/serverd/src/routes/management/settings.js +325 -0
- package/vendor/serverd/src/routes/management/sites.js +522 -0
- package/vendor/serverd/src/routes/management/storage.js +192 -0
- package/vendor/serverd/src/routes/management/system.js +201 -0
- package/vendor/serverd/src/routes/management/tickets.js +457 -0
- package/vendor/serverd/src/routes/management/tunnels.js +709 -0
- package/vendor/serverd/src/routes/management/users.js +377 -0
- package/vendor/serverd/src/routes/management.js +36 -0
- package/vendor/serverd/src/routes/onboarding/dns.js +101 -0
- package/vendor/serverd/src/routes/onboarding/domain.js +42 -0
- package/vendor/serverd/src/routes/onboarding/index.js +18 -0
- package/vendor/serverd/src/routes/onboarding/provision.js +327 -0
- package/vendor/serverd/src/routes/onboarding/status.js +12 -0
- package/vendor/serverd/src/routes/plugin-router.js +79 -0
- package/vendor/serverd/src/routes/user-access.js +389 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# System Overview
|
|
2
|
+
|
|
3
|
+
## Component Architecture
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
7
|
+
│ INTERNET │
|
|
8
|
+
│ │
|
|
9
|
+
│ Admin Browser ─── HTTPS + Client Cert ──▶ panel.example.com │
|
|
10
|
+
│ (mTLS: no cert = TLS handshake rejection, no page loads) │
|
|
11
|
+
│ │
|
|
12
|
+
│ Admin Browser ─── HTTPS + Client Cert ──▶ <droplet-ip>:9292 │
|
|
13
|
+
│ (always accessible, fallback if domain is lost) │
|
|
14
|
+
│ │
|
|
15
|
+
│ End Users ──── HTTPS + TOTP ──▶ app1.example.com │
|
|
16
|
+
│ │
|
|
17
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
18
|
+
│ │ DigitalOcean Droplet ($4, 512MB) │ │
|
|
19
|
+
│ │ │ │
|
|
20
|
+
│ │ nginx (:443 + :9292) │ │
|
|
21
|
+
│ │ ├─ <ip>:9292 → mTLS → lamalibre-lamaste-serverd (always on) │ │
|
|
22
|
+
│ │ ├─ panel.example.com → mTLS → lamalibre-lamaste-serverd (after setup) │ │
|
|
23
|
+
│ │ ├─ auth.example.com → Authelia :9091 (after setup) │ │
|
|
24
|
+
│ │ ├─ tunnel.example.com → Chisel WS :9090 (after setup) │ │
|
|
25
|
+
│ │ └─ *.example.com → Authelia forward auth → Chisel │ │
|
|
26
|
+
│ │ │ │
|
|
27
|
+
│ │ Panel Server (:3100 on 127.0.0.1) ~30MB │ │
|
|
28
|
+
│ │ ├─ Fastify REST API │ │
|
|
29
|
+
│ │ ├─ Serves React UI (static files from lamaste-server-ui build) │ │
|
|
30
|
+
│ │ ├─ WebSocket → live journald log streaming │ │
|
|
31
|
+
│ │ ├─ Onboarding routes (first-time setup) │ │
|
|
32
|
+
│ │ └─ Management routes (tunnels, users, certs, services) │ │
|
|
33
|
+
│ │ │ │
|
|
34
|
+
│ │ Authelia (:9091) ~25MB │ │
|
|
35
|
+
│ │ └─ TOTP 2FA for proxied applications │ │
|
|
36
|
+
│ │ │ │
|
|
37
|
+
│ │ Chisel Server (:9090 on 127.0.0.1) ~20MB │ │
|
|
38
|
+
│ │ └─ WebSocket tunnel; per-agent credentials + port grants │ │
|
|
39
|
+
│ │ │ │
|
|
40
|
+
│ │ PKI: /etc/lamalibre/lamaste/pki/ │ │
|
|
41
|
+
│ │ ├─ ca.crt / ca.key (Lamaste CA, 10yr validity) │ │
|
|
42
|
+
│ │ ├─ client.crt / .key (Admin cert, CN=admin, 2yr) │ │
|
|
43
|
+
│ │ ├─ client.p12 (Admin browser import bundle) │ │
|
|
44
|
+
│ │ ├─ revoked.json (Revoked cert serial numbers) │ │
|
|
45
|
+
│ │ └─ agents/ (Agent certificate storage) │ │
|
|
46
|
+
│ │ ├─ registry.json (Agent metadata + capabilities) │ │
|
|
47
|
+
│ │ └─ <label>/ (Agent certs, CN=agent:<label>) │ │
|
|
48
|
+
│ │ │ │
|
|
49
|
+
│ │ Config: /etc/lamalibre/lamaste/ │ │
|
|
50
|
+
│ │ ├─ panel.json (panel runtime config + state) │ │
|
|
51
|
+
│ │ ├─ tunnels.json (active tunnel definitions) │ │
|
|
52
|
+
│ │ ├─ sites.json (static site definitions) │ │
|
|
53
|
+
│ │ └─ invitations.json (user invitation records) │ │
|
|
54
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
55
|
+
│ ▲ WebSocket tunnel (wss://) │
|
|
56
|
+
│ ┌───────────────────────────┴────────────────────────────────────┐ │
|
|
57
|
+
│ │ Mac Studio (or any machine behind NAT/firewall) │ │
|
|
58
|
+
│ │ │ │
|
|
59
|
+
│ │ Lamaste Desktop (Tauri v2) — dual mode │ │
|
|
60
|
+
│ │ ├─ Agent mode: service discovery + tunnel management │ │
|
|
61
|
+
│ │ │ (pages from @lamalibre/lamaste-agent-ui@4.0.0) │ │
|
|
62
|
+
│ │ ├─ Server mode: full admin panel (via lamaste-server-ui) │ │
|
|
63
|
+
│ │ ├─ Multi-server registry (~/.lamalibre/lamaste/servers.json) │ │
|
|
64
|
+
│ │ ├─ Cloud provisioning (DigitalOcean via lamaste-cloud) │ │
|
|
65
|
+
│ │ └─ Credential storage (macOS Keychain / Linux libsecret) │ │
|
|
66
|
+
│ │ │ │
|
|
67
|
+
│ │ Chisel client (launchd daemon, auto-reconnect) │ │
|
|
68
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
69
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Port Allocation
|
|
73
|
+
|
|
74
|
+
| Port | Binding | Service | Access |
|
|
75
|
+
| ---- | ----------------------------------- | --------------- | -------------------------------- |
|
|
76
|
+
| 443 | 0.0.0.0 | nginx | Public — all HTTPS traffic |
|
|
77
|
+
| 9292 | 0.0.0.0 (nginx) → 127.0.0.1 (panel) | Panel via nginx | Public — mTLS required |
|
|
78
|
+
| 9091 | 127.0.0.1 | Authelia | Internal only — proxied by nginx |
|
|
79
|
+
| 9090 | 127.0.0.1 | Chisel server | Internal only — proxied by nginx |
|
|
80
|
+
|
|
81
|
+
## RAM Budget (512MB Droplet)
|
|
82
|
+
|
|
83
|
+
| Component | RAM | Notes |
|
|
84
|
+
| --------------------- | ---------- | -------------------------------------------------------- |
|
|
85
|
+
| Ubuntu 24.04 baseline | ~120MB | kernel + systemd + sshd |
|
|
86
|
+
| nginx | ~15MB | reverse proxy + TLS termination |
|
|
87
|
+
| Authelia | ~25MB | **must use bcrypt, not argon2id** (argon2id needs ~93MB) |
|
|
88
|
+
| Chisel server | ~20MB | Go binary, minimal footprint |
|
|
89
|
+
| Panel (Node.js) | ~30MB | Fastify is lightweight |
|
|
90
|
+
| Fail2ban | ~35MB | SSH + nginx brute force protection |
|
|
91
|
+
| **Total** | **~245MB** | |
|
|
92
|
+
| Free + buffers | ~265MB | comfortable headroom |
|
|
93
|
+
| Swap (safety net) | 1GB | catches occasional spikes |
|
|
94
|
+
|
|
95
|
+
## Filesystem Layout
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
/etc/lamalibre/lamaste/
|
|
99
|
+
├── panel.json ← panel config (port, paths, state)
|
|
100
|
+
├── tunnels.json ← active tunnel definitions
|
|
101
|
+
├── sites.json ← static site definitions
|
|
102
|
+
├── invitations.json ← user invitation records
|
|
103
|
+
└── pki/
|
|
104
|
+
├── ca.crt ← Lamaste CA certificate
|
|
105
|
+
├── ca.key ← CA private key (600 permissions)
|
|
106
|
+
├── client.crt ← Admin client certificate
|
|
107
|
+
├── client.key ← Client private key
|
|
108
|
+
├── client.p12 ← PKCS12 browser bundle
|
|
109
|
+
├── self-signed.pem ← Self-signed cert for IP:port access
|
|
110
|
+
└── self-signed-key.pem ← Self-signed private key for IP:port access
|
|
111
|
+
|
|
112
|
+
/etc/nginx/
|
|
113
|
+
├── sites-available/
|
|
114
|
+
│ ├── lamalibre-lamaste-panel-ip ← IP:9292 mTLS vhost (always present)
|
|
115
|
+
│ ├── lamalibre-lamaste-panel-domain ← panel.domain.com vhost (after onboarding)
|
|
116
|
+
│ ├── lamalibre-lamaste-auth ← auth.domain.com vhost (after onboarding)
|
|
117
|
+
│ ├── lamalibre-lamaste-tunnel ← tunnel.domain.com vhost (after onboarding)
|
|
118
|
+
│ ├── lamalibre-lamaste-app-* ← per-tunnel app vhosts (dynamic)
|
|
119
|
+
│ └── lamalibre-lamaste-site-* ← per-static-site vhosts (dynamic)
|
|
120
|
+
├── sites-enabled/ ← symlinks to above
|
|
121
|
+
└── snippets/
|
|
122
|
+
└── lamalibre-lamaste-mtls.conf ← shared mTLS directives
|
|
123
|
+
|
|
124
|
+
/etc/authelia/
|
|
125
|
+
├── configuration.yml ← Authelia config
|
|
126
|
+
└── users.yml ← User database (bcrypt hashes)
|
|
127
|
+
|
|
128
|
+
/etc/systemd/system/
|
|
129
|
+
├── lamalibre-lamaste-serverd.service
|
|
130
|
+
├── chisel.service
|
|
131
|
+
└── authelia.service
|
|
132
|
+
|
|
133
|
+
/opt/lamalibre/lamaste/
|
|
134
|
+
├── lamaste-serverd/ ← deployed panel backend
|
|
135
|
+
└── lamaste-server-ui/ ← built React static files
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Security Model
|
|
139
|
+
|
|
140
|
+
### mTLS (Panel Access)
|
|
141
|
+
|
|
142
|
+
- nginx uses `ssl_verify_client optional` at the server level. Enforcement is per-location via `if ($ssl_client_verify != SUCCESS) { return 496; }` — public endpoints (`/api/enroll`, `/api/invite`) skip the check.
|
|
143
|
+
- No login page — connection is refused at TLS layer for invalid certs on protected locations
|
|
144
|
+
- On SSL errors (codes 495/496), nginx serves `cert-help.html` with certificate import instructions
|
|
145
|
+
- Panel backend double-checks via `X-SSL-Client-Verify: SUCCESS` header
|
|
146
|
+
- Agent certificates have capability-based access (capabilities stored in `agents/registry.json`)
|
|
147
|
+
- IP:9292 and panel.domain.com both enforce mTLS identically
|
|
148
|
+
|
|
149
|
+
### Authelia (Proxied App Access)
|
|
150
|
+
|
|
151
|
+
- End users authenticate with username + TOTP
|
|
152
|
+
- nginx `auth_request` to Authelia before proxying to tunneled apps
|
|
153
|
+
- Session cookies managed by Authelia
|
|
154
|
+
- bcrypt password hashing (not argon2id — RAM constraint)
|
|
155
|
+
|
|
156
|
+
### Firewall (UFW)
|
|
157
|
+
|
|
158
|
+
- Allow: 22 (SSH), 443 (HTTPS), 9292 (Panel)
|
|
159
|
+
- Deny: everything else
|
|
160
|
+
- Fail2ban watches SSH + nginx auth failures
|
|
161
|
+
|
|
162
|
+
### Service Isolation
|
|
163
|
+
|
|
164
|
+
- Chisel binds 127.0.0.1 only — never exposed directly
|
|
165
|
+
- Authelia binds 127.0.0.1 only — proxied through nginx
|
|
166
|
+
- Panel server binds 127.0.0.1 only — proxied through nginx
|
|
167
|
+
- All inter-service communication is localhost
|