Network requirements for a self-hosted install
A self-hosted Shield360 server makes no outbound call on its own. The licence
is checked offline, there is no call home, and the bundled compose file sets
TELEMETRY_ENABLED=false. Every destination below is reached only because an
administrator connected something, chose a provider, or switched a feature on.
Use this page to write firewall or proxy rules, or to confirm an air-gapped install has everything it needs.
Inbound
Section titled “Inbound”| From | To | Port | Why |
|---|---|---|---|
| People’s browsers | Shield360 server | PORT (default 3000), or 443 on your reverse proxy | The web app and API. |
Enrolled machines (the shield360 CLI) | Shield360 server | Same as above | Install scripts, CLI downloads, enrolment, heartbeats and reports. |
| Browsers with the extension | Shield360 server | Same as above | Extension reports, policy, and /api/extension/updates.xml for force-installed copies. |
| Your SDKs and OpenTelemetry exporters | Shield360 server | Same as above (authenticated OTLP routes) | Traces and metrics. The raw OTLP ports 4317 and 4318 stay on loopback unless you set OTLP_BIND_ADDRESS. |
| Vendors posting webhooks (Teams bot, Slack app) | Shield360 server | Same as above | Only when you enable the Teams bot or Slack app. |
Machines and browsers need only your Shield360 server. Nothing on an employee’s device talks to Shield360 the company.
Outbound from the Shield360 server
Section titled “Outbound from the Shield360 server”Each row is off until the trigger in the second column happens.
| Destination | Turned on by | Notes |
|---|---|---|
959429674945.dkr.ecr.us-east-2.amazonaws.com | Pulling the image | Only from the host that pulls. Mirror the image to your own registry with SHIELD360_IMAGE to avoid it. |
raw.githubusercontent.com (LiteLLM’s model price list) | An administrator clicking Import from LiteLLM, resetting a price to its default, or a project switching on Refresh default prices daily (off by default on a self-hosted install) | Set SHIELD360_MODEL_PRICES_URL to your own copy, or SHIELD360_PRICE_CATALOG_REFRESH=off to stop the daily refresh everywhere. See Run fully offline. |
api.openai.com | An OpenAI API costs connector | Read-only cost, project and key endpoints. Needs an OpenAI admin key. |
api.anthropic.com | An Anthropic API costs or Claude Enterprise connector | Read-only cost, usage and spend-limit endpoints. Needs an Anthropic admin key. |
Other AI vendors’ APIs: api.github.com (Copilot), api.cursor.com, api.chatgpt.com, openrouter.ai, Azure, AWS and Google Cloud billing APIs | The matching spend connector | Each connector calls only its own vendor. |
Your chosen LLM provider: OpenAI, Anthropic, Azure OpenAI (AZURE_OPENAI_ENDPOINT), your LiteLLM gateway (SHIELD360_LITELLM_BASE_URL), Groq, Mistral, and others | Choosing a provider in Chat Settings (/chat/settings), or for evaluations | The Otter assistant, LLM-as-judge evaluations and the AI analyst call the provider you choose, with your key. An on-premises LiteLLM gateway keeps this inside your network. |
Your OIDC provider (SSO_OIDC_ISSUER), and accounts.google.com / github.com / api.github.com | Configuring single sign-on, or Google or GitHub sign-in | Discovery document, token and user-info endpoints. |
hooks.slack.com, slack.com | A Slack alert channel (webhook or the Slack app) | |
*.logic.azure.com, *.api.powerplatform.com (Teams Workflows), *.webhook.office.com (old connectors), login.botframework.com, api.botframework.com, login.microsoftonline.com (Teams bot) | A Microsoft Teams alert channel | Prefer a Workflows webhook: Microsoft is retiring the old Office 365 connector URLs. |
events.pagerduty.com, and any URL you give a webhook channel | A PagerDuty or webhook alert channel | Private and cloud-metadata addresses are refused. |
Your SMTP relay, or Amazon SES in ALERTS_SES_REGION | Setting ALERTS_EMAIL_FROM and a transport | Alert email. |
SHIELD360_LICENSE_REVOCATION_URL | Setting that variable | At most once a day, a plain GET with nothing that identifies your install. Off by default. |
graph.microsoft.com, manage.office.com, login.microsoftonline.com, www.googleapis.com, admin.googleapis.com, Okta, CrowdStrike, Jamf, and similar | The matching identity, document or Microsoft 365 Copilot connector | Each connector calls only the system you connected. |
| Your SIEM or security tool (Splunk, Microsoft Sentinel, Datadog, Elastic, Amazon S3, syslog over TLS, a webhook) | SIEM export | |
api.github.com, github.com (trustabl releases) | Installing the scanner connector’s tool | Downloads a release and checks its checksum. |
| Your vault (AWS Secrets Manager, Azure Key Vault, Google Secret Manager, HashiCorp Vault) | An external vault |
Never from a self-hosted install:
- Base316 (Shield360’s hosted sign-in) is used only by the Shield360 cloud edition.
- PostHog product telemetry runs only when
TELEMETRY_ENABLED=trueand an analytics key is configured. The compose file sets it tofalse. - Shield360’s licence server: licences verify offline against keys built into the release.
Outbound from employees’ devices
Section titled “Outbound from employees’ devices”| Destination | Turned on by |
|---|---|
| Your Shield360 server | Installing the collector or the extension. |
clients2.google.com and the Chrome Web Store | Only if you install the Chrome Web Store copy of the extension (SHIELD360_EXTENSION_STORE_ID). A force-installed self-hosted copy updates from your server. |
Run fully offline
Section titled “Run fully offline”An install with no internet access works, with these choices:
Pull the image once from a connected host and push it to your registry. Set
SHIELD360_IMAGE (and SHIELD360_VERSION) in .env. See
Install Shield360 Enterprise from the image.
Either mirror LiteLLM’s model_prices_and_context_window.json to an
internal URL and set SHIELD360_MODEL_PRICES_URL to it, or set
SHIELD360_PRICE_CATALOG_REFRESH=off and keep prices by hand under
Manage models. With neither, imports and the daily refresh fail with
a network error; nothing else is affected.
Run a LiteLLM gateway inside your network, set
SHIELD360_LITELLM_BASE_URL, and choose LiteLLM in
Chat Settings. Or leave the assistant
and LLM-judged evaluations unconfigured; the rest of Shield360 does not
need them.
Spend connectors for SaaS vendors (OpenAI, Anthropic, Copilot, Cursor) need those vendors’ APIs. Without them, Shield360 still shows spend estimated from observed usage; it cannot show what the vendor billed.
Send alerts by SMTP through an internal relay, or to an internal webhook.
Leave SHIELD360_LICENSE_REVOCATION_URL unset and upload signed
revocation lists in Settings → Licence when Shield360 sends one.
Check it
Section titled “Check it”The server log says at start-up what it installed:
Model price catalogue refresh is off (SHIELD360_PRICE_CATALOG_REFRESH); no cron installed✅ Browser extension: signed .crx 0.1.123 (ID hpfb…) is served for device-management force-installTo prove nothing leaves the host, run the server for a day with egress denied and check the log for failed outbound requests: each one names the feature that made it.