Skip to content

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.

FromToPortWhy
People’s browsersShield360 serverPORT (default 3000), or 443 on your reverse proxyThe web app and API.
Enrolled machines (the shield360 CLI)Shield360 serverSame as aboveInstall scripts, CLI downloads, enrolment, heartbeats and reports.
Browsers with the extensionShield360 serverSame as aboveExtension reports, policy, and /api/extension/updates.xml for force-installed copies.
Your SDKs and OpenTelemetry exportersShield360 serverSame 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 serverSame as aboveOnly 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.

Each row is off until the trigger in the second column happens.

DestinationTurned on byNotes
959429674945.dkr.ecr.us-east-2.amazonaws.comPulling the imageOnly 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.comAn OpenAI API costs connectorRead-only cost, project and key endpoints. Needs an OpenAI admin key.
api.anthropic.comAn Anthropic API costs or Claude Enterprise connectorRead-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 APIsThe matching spend connectorEach 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 othersChoosing a provider in Chat Settings (/chat/settings), or for evaluationsThe 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.comConfiguring single sign-on, or Google or GitHub sign-inDiscovery document, token and user-info endpoints.
hooks.slack.com, slack.comA 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 channelPrefer a Workflows webhook: Microsoft is retiring the old Office 365 connector URLs.
events.pagerduty.com, and any URL you give a webhook channelA PagerDuty or webhook alert channelPrivate and cloud-metadata addresses are refused.
Your SMTP relay, or Amazon SES in ALERTS_SES_REGIONSetting ALERTS_EMAIL_FROM and a transportAlert email.
SHIELD360_LICENSE_REVOCATION_URLSetting that variableAt 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 similarThe matching identity, document or Microsoft 365 Copilot connectorEach 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 toolDownloads 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=true and an analytics key is configured. The compose file sets it to false.
  • Shield360’s licence server: licences verify offline against keys built into the release.
DestinationTurned on by
Your Shield360 serverInstalling the collector or the extension.
clients2.google.com and the Chrome Web StoreOnly 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.

An install with no internet access works, with these choices:

Mirror the image

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.

Decide where model prices come from

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.

Use an on-premises model for the assistant and evaluations

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.

Keep cloud-only connectors off

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.

Use internal alert routes

Send alerts by SMTP through an internal relay, or to an internal webhook.

Revocations by upload

Leave SHIELD360_LICENSE_REVOCATION_URL unset and upload signed revocation lists in Settings → Licence when Shield360 sends one.

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-install

To 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.