External Communications

Operator-facing inventory of PacketSafari outbound network communication, including required, optional, and admin-only destinations.

This page documents the external network communication that PacketSafari may initiate in the current on-prem runtime.

Use it as an operator reference for:

  • firewall and proxy reviews
  • security questionnaires
  • change review for new integrations
  • troubleshooting blocked outbound traffic

PacketSafari forces monitored application containers through the egress proxy. Direct outbound bypasses are rejected. See Local Models and External AI Approval for the enforcement model and custom host approval flow.

If the customer network requires a corporate outbound proxy, PacketSafari can chain egress-ironproxy through a standard HTTP proxy with packetsafari-ops config upstream-proxy. Backend and worker should still point at PacketSafari's internal egress proxy, not directly at the corporate proxy.

Scope

This inventory focuses on outbound traffic initiated by the application runtime and operator tooling that is represented in the current code and egress policy.

It does not try to restate:

  • normal browser traffic from an end user to the PacketSafari web UI
  • inbound customer integrations
  • one-off developer downloads during local builds outside the on-prem runtime

Classification meanings

ClassificationMeaning
required-coreExpected in normal runtime when the corresponding core feature is in use.
feature-optionalOnly used when the related product feature or integration is enabled.
admin-onlyExpected during operator or admin maintenance flows, not ordinary user traffic.
dynamic-configDestination is not fixed in code and is derived from administrator-provided configuration.

Core and feature-driven outbound traffic

DestinationPortOwner containersClassificationPurposeTrigger / notes
api.openai.com443backend, workerrequired-coreAI API trafficPrimary OpenAI API endpoint for Agent / Copilot when OpenAI is the configured provider.
auth.openai.com443backend, workerfeature-optionalAI authUsed for Codex device login flows when that workflow is enabled.
Admin-configured AI provider hostusually 80 or 443backend, workerfeature-optional, dynamic-configAI provider trafficDerived from admin_ai_settings.provider_base_url when a non-OpenAI provider is configured. Requires explicit approval if outside the PacketSafari container network.
email.eu-central-1.amazonaws.com443backend, workerfeature-optionalMail deliveryAWS SES HTTPS endpoint used by the active mail send path.
api.paddle.com443backendfeature-optionalBilling / account featuresProduction Paddle API.
sandbox-api.paddle.com443backendfeature-optionalBilling / account featuresSandbox Paddle API.
github.com443backendfeature-optionalUser authAdded only when the ENABLE_SOCIAL_LOGIN_OAUTH runtime feature flag is enabled for GitHub social login.
api.github.com443backendfeature-optionalUser auth / GitHub-backed admin checksAdded only when the ENABLE_SOCIAL_LOGIN_OAUTH runtime feature flag is enabled.
oauth2.googleapis.com443backendfeature-optionalUser authAdded only when the ENABLE_SOCIAL_LOGIN_OAUTH runtime feature flag is enabled for Google social login.
www.googleapis.com443backendfeature-optionalUser authAdded only when the ENABLE_SOCIAL_LOGIN_OAUTH runtime feature flag is enabled for Google social login.
www.openinfosecfoundation.org443security-intelligence runtimefeature-optionalSecurity intelligenceSuricata source index for runtime intelligence refresh.
sslbl.abuse.ch443security-intelligence runtimefeature-optionalSecurity intelligenceabuse.ch SSL blacklist feed used by Suricata refresh.
Admin-configured intelligence feed hostsusually 443security-intelligence runtimefeature-optional, dynamic-configSecurity intelligenceDerived from configured INTELLIGENCE_*_SOURCE_URL values.

Admin-only outbound traffic

DestinationPortOwner containersClassificationPurposeTrigger / notes
raw.githubusercontent.com443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for GitHub-hosted dependency inventory source checks.
registry.npmjs.org443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for npm package freshness checks.
pypi.org443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for Python package freshness checks.
proxy.golang.org443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for Go module freshness checks.
hub.docker.com443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for container image freshness checks.
api.launchpad.net443backendadmin-onlyAdmin dependency inventoryIncluded only in the dev egress profile for Launchpad package freshness checks for Suricata-related packages.

Notes on owners

The Owner containers column describes which runtime lane initiates the request:

  • backend: Flask/API runtime and admin actions
  • worker: background worker lanes such as AI or indexing tasks
  • security-intelligence runtime: the runtime path responsible for intelligence feed refresh and related security update flows

Current deployments may split that security-intelligence work differently depending on compose wiring. For firewall review, the important point is the destination and purpose, not whether the request originates from a dedicated security worker process or a fallback application process.

Dynamic destinations

Some destinations are intentionally not hard-coded:

Dynamic sourceExamplesWhy it is dynamic
AI provider base URLhttps://llm.company.example/v1, http://ai-gateway.internal.example:8000/v1PacketSafari supports OpenAI-compatible local, LAN, and on-prem model endpoints selected by an admin.
Intelligence feed source URLsvendor-hosted Suricata or JA4 feed URLsAdmins can configure custom HTTPS feed sources in the intelligence settings UI.

These dynamic destinations should be documented in customer change control when they are added.

Corporate outbound proxy path

For Zscaler or similar enterprise proxy deployments, the expected path is:

backend / worker -> egress-ironproxy -> corporate HTTP proxy -> approved external destination

Configure the corporate proxy as an upstream hop for egress-ironproxy:

/opt/packetsafari/bin/packetsafari-ops config upstream-proxy \
  --proxy-url http://zscaler-proxy.customer.example:8080 \
  --no-proxy localhost,127.0.0.1,::1 \
  --restart

The command writes /opt/packetsafari/env/ironproxy.env.

If TLS inspection is enabled, install the inspection root CA at /opt/packetsafari/configuration/custom-ca/<name>.crt and restart egress-ironproxy. The destination allowlist still applies to the final destination host, even when the physical network hop is the corporate proxy.

Operational guidance

QuestionAnswer
Does saving a new AI base URL automatically open egress?No. External destinations still require explicit host approval.
Does blank Suricata source configuration mean no outbound traffic?No. Blank Suricata configuration still uses the built-in ET Open and abuse.ch sources.
Are all destinations contacted in every deployment?No. Many rows are feature-optional or admin-only.
Is direct internet egress from app containers allowed?No. Monitored containers are forced through the egress proxy and direct bypasses are rejected.
Can PacketSafari run behind Zscaler or another enterprise proxy?Yes, when it exposes a standard HTTP proxy endpoint. Configure it with packetsafari-ops config upstream-proxy ... --restart.