Guide index
102 guides in 12 categories
Scope
The guides cover deployment exposure: TLS, human and machine authentication, MFA, access restrictions, secrets, and inbound and outbound network access, from first deployment through teardown. General application security, including injection, deserialization, and business logic flaws, belongs to the OWASP resources linked throughout the guides. Each guide stays in the repository on GitHub; this site holds the index, the rules for assistants, the tasks, and the checklist.
At a glance
102guides
12categories
11verification checks
Categories
- Certificates and tunnels5
- Identity, authentication, and secrets10
- Web servers and proxies6
- Languages and frameworks9
- Containers and Kubernetes5
- Hosts and cloud platforms4
- Databases, storage, and messaging24
- AI and agent infrastructure14
- App UIs and dev tools9
- Dashboards and admin consoles7
- Web application controls4
- Exposure and deployment operations5
5 guides
Certificates and tunnels
- free-certificates (opens in a new tab)Free publicly trusted certificates via ACME (Let's Encrypt, ZeroSSL), issuance, and automated renewal
- self-signed (opens in a new tab)OpenSSL and mkcert certificates when a public CA is not an option, plus distributing trust to clients
- cloudflare (opens in a new tab)Cloudflare Tunnel and Zero Trust Access: authenticated external access with no open inbound ports
- tailscale (opens in a new tab)Tailscale serve (tailnet-only) and funnel (public) with automatic TLS
- tunnels (opens in a new tab)frp, WireGuard, and ssh -R, self-hosted tunnels when there is no public IP
10 guides
Identity, authentication, and secrets
- authentication (opens in a new tab)Password storage, MFA, API keys, sessions, rate limiting, and secret handling
- identity-providers (opens in a new tab)Hosted identity and MFA: Entra ID, Google, Okta, Entra External ID, Firebase and Identity Platform, Auth0, Cognito, Clerk, WorkOS, Supabase Auth, Duo; free tiers and who each fits
- self-hosted-idp (opens in a new tab)Self-hosted Keycloak and authentik: separating the admin surface at the proxy, the first-boot admin window, and the management port
- oidc-integration (opens in a new tab)OIDC login wiring for Google, Microsoft Entra, GitHub, and Okta: PKCE, redirect URIs, token validation, and the allowlist check
- cloud-identity-proxies (opens in a new tab)Login in front of the app with no code change: AWS ALB, Google IAP, Azure App Service, Cloudflare Access, ngrok, Vercel
- fronting-auth (opens in a new tab)oauth2-proxy, Authelia, Pomerium: login and MFA in front of an app that has none
- mfa (opens in a new tab)MFA options: identity layers with QR-code TOTP enrolment, app libraries, SSH modules, Duo
- machine-auth (opens in a new tab)Machine identity: API keys, client credentials, mutual TLS, workload identity federation, secret managers
- secrets (opens in a new tab)Secrets: repository hygiene, scanning, rotation after a leak, sops/age
- vault (opens in a new tab)HashiCorp Vault: dev mode, listener TLS, seal custody, audit devices, retiring the initial root token, path-scoped ACL policies, bounded AppRole credentials and tokens, response-wrapped secret delivery, and authenticated metrics/profiling
6 guides
Web servers and proxies
- apache (opens in a new tab)Apache HTTP Server: TLS, redirect, HSTS, basic auth, client certificates
- nginx (opens in a new tab)nginx: TLS, redirect, HSTS, basic auth, client certificates, reverse proxy
- lighttpd (opens in a new tab)lighttpd: TLS via mod_openssl, redirect, basic auth
- caddy (opens in a new tab)Caddy: automatic HTTPS, internal CA, basic auth
- haproxy (opens in a new tab)HAProxy: TLS termination, redirect, HSTS, basic auth
- traefik (opens in a new tab)Traefik: ACME resolvers, HTTPS redirection, basic auth middleware
9 guides
Languages and frameworks
- nodejs (opens in a new tab)Node.js and Express: HTTPS server, security headers, sessions, password hashing
- python (opens in a new tab)Flask, FastAPI/Uvicorn, Gunicorn, Django: TLS options and secure settings
- nextjs (opens in a new tab)Next.js: sessions, Route Handlers, Server Actions, Auth.js and Better Auth, Vercel
- go (opens in a new tab)Go net/http: TLS, proxy layout, bcrypt, cookies, client TLS discipline
- dotnet (opens in a new tab)ASP.NET Core and Kestrel: HTTPS, HSTS, forwarded headers, Identity, cookies
- java (opens in a new tab)Spring Boot: server.ssl, forwarded headers, Spring Security, session cookies
- php (opens in a new tab)PHP and Laravel: password_hash, session cookies, trusted proxies, forced HTTPS
- ruby (opens in a new tab)Rails and Puma: force_ssl, trusted proxies, has_secure_password, credentials
- frontend-frameworks (opens in a new tab)SvelteKit, Nuxt, Vite: server-route auth, sessions, public-env prefixes
5 guides
Containers and Kubernetes
- docker (opens in a new tab)Docker and Compose: safe port publishing, the UFW bypass problem, TLS termination
- kubernetes (opens in a new tab)Gateway API with a maintained controller, cert-manager TLS, entry-point authentication; ingress-nginx is retired
- gitops-controllers (opens in a new tab)Argo CD and Flux: cluster-admin blast radius, the initial admin secret, RBAC, and the Flux webhook receiver
- self-hosted-ci-runners (opens in a new tab)GitHub Actions runner and GitLab Runner: untrusted code is remote code execution; ephemeral one-job workers, no privileged executor, tokens as credentials
- container-hardening (opens in a new tab)Non-root, dropped capabilities, read-only root, network segmentation
4 guides
Hosts and cloud platforms
- host (opens in a new tab)Host baseline: SSH hardening, firewall default-deny, brute-force protection, updates
- cloud-firewalls (opens in a new tab)Security groups and VPC rules: no 0.0.0.0/0 on databases, SSH posture
- paas (opens in a new tab)Render, Fly.io, Vercel, and similar: platform TLS, your auth and secrets
- gpu-clouds (opens in a new tab)RunPod, Vast.ai, Lambda, Modal: exposed ports and differing firewall and auth defaults per platform
24 guides
Databases, storage, and messaging
- postgresql (opens in a new tab)PostgreSQL: server TLS, SCRAM authentication, pg_hba rules, verified client connections, runtime-vs-owner privilege separation, restricted CONNECT and schema CREATE, secure search_path, and connection/DDL audit logging
- connection-poolers (opens in a new tab)PgBouncer and pgpool-II: client TLS that is off by default, a server hop that falls back to plaintext, and the pg_hba rules a pooler stops matching
- mysql (opens in a new tab)MySQL and MariaDB: required TLS transport, per-user TLS, modern auth plugins, scoped least-privilege accounts, anonymous/test/remote-root cleanup, local_infile and secure_file_priv restrictions, and password validation/reuse
- mongodb (opens in a new tab)MongoDB: requireTLS, authorization, bind address, least-privilege roles with explicit SCRAM-SHA-256, replica/cluster membership auth, per-user source restrictions, and x.509 client identities
- redis (opens in a new tab)Redis: TLS, requirepass, bind/protected-mode, and least-privilege ACLs with durable rules, key/channel scoping, and runtime command lockdown
- sqlite (opens in a new tab)SQLite in deployment, the file is the exposure; Turso tokens; Litestream
- sqlite-http-frontends (opens in a new tab)Datasette and sqlite-web: SQLite HTTP exposure, loopback binding, authentication, TLS, and verification
- surrealdb (opens in a new tab)SurrealDB, root credentials, bind address, access levels, TLS
- time-series-metrics-stores (opens in a new tab)InfluxDB, VictoriaMetrics, and QuestDB: default-off auth, default credentials, and fronting
- elasticsearch (opens in a new tab)Elasticsearch and OpenSearch: keep built-in security on, scoped roles and API keys, anonymous/CORS lockdown, audit logging
- clickhouse (opens in a new tab)ClickHouse: user passwords, secure ports, network restrictions, SQL-driven RBAC with table-scoped roles, query/memory limits and quotas, external-source restrictions, and protected query/session logs
- neo4j (opens in a new tab)Neo4j: initial password, Bolt and HTTPS TLS, auth stays on, scoped Enterprise roles with label/property grants, procedure/function/load denials, transaction memory and timeout limits, and security-event logging
- memcached (opens in a new tab)Memcached: no auth by default; private binding and UDP off, dedicated unprivileged account, connection and item-memory limits, disabled cache-wide flush and key enumeration, SASL and TLS where built in
- search-engines (opens in a new tab)Meilisearch and Typesense, master key, scoped search keys, production mode
- minio (opens in a new tab)MinIO (AIStor): root and scoped credentials, TLS, server-side encryption, object locking, and audit logging
- object-storage (opens in a new tab)S3, R2, GCS, Azure Blob, Supabase Storage: private by default, scoped credentials, signed URLs
- firebase-supabase (opens in a new tab)Firebase rules and Supabase RLS: ownership rules across Firestore/RTDB/Storage, Data-API and key hygiene, function/Storage/Realtime authorization, App Check, and signup controls
- supabase-self-hosted (opens in a new tab)The self-hosted Docker stack: replace the demo keys and dashboard password, keep the published ports private
- pocketbase (opens in a new tab)PocketBase and Appwrite: API and collection rules are the security, plus auth-record and file-field protection, operator and console lockdown, settings encryption, rate limits, and hostname and upload controls
- headless-cms-instant-api (opens in a new tab)Strapi, Directus, Hasura, and PostgREST: one control gates the whole datastore
- rabbitmq (opens in a new tab)RabbitMQ: users and permissions, TLS listener, guest account, vhost isolation and resource limits, management HTTPS, monitoring/admin role separation, concrete private bindings, and safe definitions import
- mosquitto (opens in a new tab)Mosquitto (MQTT): per-device credentials, TLS listener, mutual TLS, topic ACLs with
$SYSisolation, connection/packet/queue limits, per-listener scoping, bridge security, and runtime hardening - kafka (opens in a new tab)Apache Kafka: SASL_SSL listeners, SCRAM credentials, ACLs, client/replication/controller listener separation, per-role least-privilege ACLs, user quotas and connection limits, and authorization audit logging
- nats (opens in a new tab)NATS and JetStream, auth, TLS, and the unauthenticated monitoring port
14 guides
AI and agent infrastructure
- ollama (opens in a new tab)Ollama: no built-in auth or TLS; protect it with a proxy or tunnel
- model-servers (opens in a new tab)llama.cpp, vLLM, TGI, SGLang, Triton, LM Studio: loopback, API keys, TLS in front
- litellm (opens in a new tab)LiteLLM proxy: master key, per-app virtual keys, per-key spend and rate limits, model-access allowlists, key expiry and revocation, admin/route separation, egress and pass-through limits, and request-content log redaction
- vector-databases (opens in a new tab)Qdrant, Weaviate, Milvus, Chroma, pgvector: API keys, TLS, what has no native auth
- mcp-servers (opens in a new tab)MCP servers: stdio versus Streamable HTTP, loopback, Origin checks, OAuth 2.1 or a fronting layer
- mcp-clients (opens in a new tab)MCP clients: authorization-response iss validation, metadata issuer identity, Client ID Metadata Documents and application_type, refresh-token confidentiality, OAuth-discovery SSRF
- ray (opens in a new tab)Ray: dashboard, Jobs, and Client ports execute code; isolate, token auth, SSH forward
- mlflow (opens in a new tab)MLflow tracking server: no auth by default; basic-auth app, TLS in front
- llm-observability (opens in a new tab)Langfuse, Phoenix, Helicone, OpenTelemetry Collector: they hold prompts and keys
- agent-builders (opens in a new tab)Dify, Flowise, Langflow, LibreChat: admin setup, API keys, fronting TLS
- ai-infra-services (opens in a new tab)SearxNG, LocalAI, Text Embeddings Inference, LangServe, Mem0, Onyx: what the run form publishes, and the store published beside the front door
- workflow-orchestrators (opens in a new tab)Prefect, Dagster, Airflow, Temporal, Flower, Argo: keep off the public internet and require auth
- headless-browser-services (opens in a new tab)Chrome DevTools Protocol, Selenium Grid, browserless, Playwright: an exposed browser port is remote code execution
- realtime-voice-infra (opens in a new tab)LiveKit and coturn: WebRTC SFU signing keys and the TURN open-relay default, RFC 1918 relay policy, TLS
9 guides
App UIs and dev tools
- open-webui (opens in a new tab)Open WebUI: signup control, pending role, fronting TLS, persistent signing key, trusted-proxy and OAuth boundaries, tool and code-execution limits, model and admin-data access control, API-key restrictions, and retrieval/SSRF limits
- chat-uis (opens in a new tab)AnythingLLM, LobeChat, Chainlit, OpenHands: open by default; front with login
- image-gen-uis (opens in a new tab)ComfyUI, A1111, InvokeAI, Fooocus: keep on loopback and add a login before exposing
- gradio (opens in a new tab)Gradio: launch() auth and TLS, share-link risks, file-access and cache isolation, optional-execution-surface and API-visibility controls, queue and resource limits, URL-fetch SSRF limits, external auth, and flagging/telemetry controls
- streamlit (opens in a new tab)Streamlit: TLS options, native OIDC login, reverse proxy deployment
- jupyter (opens in a new tab)Jupyter Server, Lab, and Notebook: hashed password and TLS, unprivileged execution, origin/XSRF/DNS-rebinding protection, JupyterHub identities and per-user isolation, and auth by default
- n8n (opens in a new tab)n8n: listen address, native TLS, owner setup, MFA enforcement
- code-server (opens in a new tab)code-server: SSH forwarding first, password auth, TLS
- self-hosted-error-trackers (opens in a new tab)Sentry and GlitchTip: registration defaults, event-data leakage, reverse-proxy TLS
7 guides
Dashboards and admin consoles
- admin-uis (opens in a new tab)phpMyAdmin, pgAdmin, mongo-express, Grafana, Prometheus: never public
- observability-components (opens in a new tab)node_exporter, Alertmanager, Pushgateway, Jaeger, Loki: unauthenticated by default; never public
- devops-uis (opens in a new tab)Portainer, Coolify, Dokploy, Nginx Proxy Manager, Vaultwarden, Kubernetes Dashboard, Jenkins, Gitea, Uptime Kuma, Docker API: never public
- bi-dashboards (opens in a new tab)Metabase, Superset, Redash: never public; least-privilege database user
- low-code-builders (opens in a new tab)NocoDB, Baserow, Appsmith, Budibase, Windmill: first-run admin, open signup, sample secrets
- server-admin-panels (opens in a new tab)Cockpit, Webmin, Proxmox VE: root-level host panels on every address, no default second factor
- nomad-consul (opens in a new tab)Nomad, Consul: APIs with ACLs off by default, anonymous bootstrap, Consul's allow default
4 guides
Web application controls
- cors (opens in a new tab)CORS: exact origins, never * with credentials
- headers (opens in a new tab)Security headers: HSTS, CSP, and companions for your app
- realtime-webhooks (opens in a new tab)WebSocket, SSE, and webhook authentication
- transactional-email-posture (opens in a new tab)SPF, DKIM, DMARC, SMTP submission, and open-relay posture for the mail a deployment sends
5 guides
Exposure and deployment operations
- web-exposure (opens in a new tab)Files a web server must never serve: dotfiles, .git, dumps, client secrets
- egress-metadata (opens in a new tab)Egress control and cloud metadata (IMDSv2), stop an agent exfiltrating credentials
- deployment-lifecycle (opens in a new tab)Verify from outside, safe first-run order, previews, and teardown
- exposure-index (opens in a new tab)Narrow an open port to the guides worth reading, then identify the process
- common-mistakes (opens in a new tab)The recurring findings, each linked to its fix
Reference
Reference files
- README (opens in a new tab)start here
- controls-reference (opens in a new tab)services with no guide
- CONTRIBUTING (opens in a new tab)add or request a guide
- llms.txtguide index for assistants
- llms-full.txtevery guide in 1 file