Skip to content

Managed preferences

Every preference key Outbound reads from MDM, its type, what it forces and what the user still controls.

Outbound 1.3.0 · Updated

Outbound reads one managed-preference domain, com.outboundfirewall.outbound. An administrator forces keys in it with a configuration profile (payload type com.apple.ManagedClient.preferences); the sample profile on the IT page shows the layout, with the keys inside the forced mcx_preference_settings dictionary.

A key only has an effect when the profile forces it. The app checks each key with objectIsForced, so the same key written as an ordinary user default (written by a script, defaults write, or a user) does nothing. This keeps a managed Mac managed: a value someone sets in their own preferences is never mistaken for the administrator’s.

Most forced keys with the wrong value type are ignored, and the stored setting stays in force. Invalid rule-feed settings instead stop feed updates and report a configuration error. The approval controls fail closed: an invalid ApprovalAuthority counts as none, an invalid SettingsLocked as true, and an invalid PauseAllowed, NetworkRescueAllowed or UninstallAllowed as false. Integers outside their range are clamped. For Mode, a value that is not one of the three mode names is ignored the same way. Nothing crashes and nothing falls back to a guessed default.

The app reads the forced keys at launch and observes the domain for changes, so editing the profile takes effect without a restart of the Mac. The background agent, which draws the menu bar item and runs the feed and audit export, reads the same forced values. The network filter reads them itself too, and it is the filter that sends audit lines to a SIEM.

Key Type What it does
LicenseKey String Licenses the Mac with this key, without a prompt. Settings › License then reads “This license is managed by your organization.”, Use a Different Key and Deactivate are hidden, and outboundctl refuses activation.
LicenseDeviceName String Optional name for this Mac’s licence activation.
Mode String Forces the operation mode: alert (Ask), silentAllow (Learn) or silentDeny (Strict). See Operation modes.
ManagedRulesOverride Boolean When true, managed rules from the feed take precedence over every other rule except priority rules. See Rules.
UsersMayEditRules Boolean When false, rule editing is locked: the app shows “Managed by your organization” and outboundctl refuses changes with exit status 77. See Locking settings.
DisableAlerts Boolean When true, no alert appears. An ask verdict is resolved without asking: denied in Strict mode, allowed otherwise.
TelemetryBlockCategories Array of strings Forces “Block known telemetry” on with exactly these categories, or off for an empty array. See below.
RuleFeedURL String HTTPS address of the managed rule feed. See Managed rule feed.
RuleFeedPinnedSHA256 String Optional. 64 hexadecimal digits; the feed is refused unless its exact bytes have this SHA-256.
AuditExportPath String Absolute path of the directory that receives a copy of the audit log. ~ is expanded. See Audit log export.
ApprovalAuthority String Who may approve loosening protection: user, administrator or none.
SettingsLocked Boolean When true, the settings lock stays on and cannot be turned off on the Mac.
PauseAllowed Boolean When false, pausing is refused, even with an administrator’s approval.
NetworkRescueAllowed Boolean When false, network rescue and turning the filter off are refused.
UninstallAllowed Boolean When false, Outbound cannot be removed on the Mac.
RuleFeedPublicKeys Array of strings Base64 Ed25519 public keys. When set, every rule feed must be signed by one of them.
RuleFeedAllowRollback Boolean When true, outboundctl feed rollback may reinstall a kept feed.
RuleFeedAllowedRedirectHosts Array of strings Extra hosts a rule-feed or blocklist download may be redirected to.
DeviceGroups Array of strings Groups this Mac belongs to, matched against a feed’s targets.
TimeoutAction String allow or deny for an alert nobody answers.
AppAbsentAction String allow or deny while the background agent is absent.
AlertTimeoutSeconds Integer, 5 to 300 How long a TCP alert waits.
AllowQuitAgent Boolean When false, the background agent cannot be quit.
UpdatesEnabled Boolean When false, app updates are off.
UpdateChannel String stable or beta.
UpdateDeferralDays Integer, 0 to 90 Holds back new updates by this many days.
AIAssistantEnabled Boolean When false, the Assistant and cloud AI are off.
AIAllowedProviders Array of strings Cloud AI provider IDs allowed; on-device AI stays allowed.
MCPServerEnabled Boolean When false, the MCP server cannot run or be installed.
CodingAgentIntegrationEnabled Boolean When false, coding agents cannot connect over ACP.
CLIChanges String Command-line changes: allow (tightening), ask (every change) or off.
CLIChangesAllowed Boolean Deprecated: use CLIChanges. Read for one release; true means allow, false means off.
Blocklists Array of strings Catalogue IDs that must stay subscribed.
HistoryEnabled Boolean When false, connection history is not recorded; rollups are unaffected.
HistoryRetentionDays Integer, 1 to 400 Days of connection history to keep.
EncryptedDNS String Forces the DNS provider: quad9, cloudflare, google, nextDNS (or nextdns), dns4eu, controld or custom. dns4eu selects DNS4EU Protective; controld selects Control D Unfiltered. An unknown value is ignored.
AuditRemoteDetail String Remote detail in audit lines and exports: full, domain or hashed.
AuditHostIdentifier String Host field in the sealed log: computerName or serialHash.
AuditRetentionDays Integer, 1 to 400 Days the sealed audit log is kept (30 when not forced).
AuditFormat String Format for audit sinks: jsonl, cef, leef or ecs.
AuditSyslogURL String Syslog server, syslog+tls://host:port.
AuditSyslogPinnedSHA256 String SHA-256 of the syslog server’s certificate; delivery stops on a mismatch.
AuditHTTPURL String HTTPS endpoint for an HTTP audit sink.
AuditHTTPKind String hec (Splunk), elastic (bulk) or generic JSON.
AuditHTTPTokenKeychainLabel String System keychain service that holds the HTTP sink’s token.
AuditHTTPTokenFile String Absolute path to a root-owned token file, mode 0600 or 0400, at most 8 KiB.
AuditUnifiedLog Boolean When true, redacted audit lines also go to the unified log.
AuditSpoolMegabytes Integer, 1 to 2048 Most data each audit sink queues, in MiB (default 256).
OutboundTelemetryEnabled Boolean Forces anonymous product telemetry on or off.

Mode accepts the three mode names the app stores internally: alert, silentAllow and silentDeny. When the key is forced:

  • The mode picker in the Firewall menu, the menu bar panel and the main window is disabled.
  • The app explains why: “Your organization sets the mode” in the menu bar panel, “Your organization manages the mode on this Mac.” in the main window.
  • outboundctl prefs set mode refuses with “mode is set by your organization and cannot be changed from outboundctl.”

A Mode of any other value, or a value that is not a string at all, is ignored and the user’s own choice stays in force.

With DisableAlerts forced true, connections that would ask are decided without an alert, in the filter itself. An ask verdict becomes deny in Strict mode and allow in Ask and Learn. The decision still appears in the Network Monitor and the audit log. outboundctl prefs set disable-alerts refuses while the key is forced.

This key forces the “Block known telemetry” switch on the Telemetry settings page. The value is an array of category names:

  • analytics, crash-reporting, logging, feature-flags, advertising, attribution, session-replay
  • An empty array forces the switch off.
  • Names this build does not know are ignored. Only forced arrays count; any other type is ignored.

The switch and the category toggles are then disabled in Settings, with a “Managed by your organisation” note. Apps a person turned telemetry off for stay off: the key does not touch per-app opt-outs. The rules appear in the Rules pane as one rule group named “Known telemetry”.

RuleFeedURL and RuleFeedPinnedSHA256 drive the managed rule feed; AuditExportPath drives the audit export. Both are read by the background agent, and both fail safe: a feed address that is not HTTPS, or a pin that is not 64 hexadecimal digits, is reported as a configuration problem in Settings rather than silently ignored. An unusable pin never means “no pin”.

  • outboundctl prefs list and outboundctl prefs get <key> print the effective values, that is, your stored settings with every forced key laid over them. A forced Mode or DisableAlerts is visible there.
  • outboundctl prefs set refuses the two keys it can be overridden by (mode, disable-alerts) while they are forced. Other forced keys do not block prefs set, but a change that would loosen protection is refused in any case and must be approved in the app.