macOS Guide
BetBlocker on macOS uses a Network Extension for DNS filtering and runs as a launchd daemon.
Supported versions: macOS 13 Ventura and later
Installation
Section titled “Installation”Requirements
Section titled “Requirements”- macOS 13 Ventura or later
- Administrator account
- Apple Silicon or Intel x86-64
Install via pkg
Section titled “Install via pkg”- Download
BetBlocker-macOS.pkgfrom your BetBlocker server’s download page or betblocker.com - Double-click the package and follow the installer
- macOS will prompt for your administrator password to install the system extension
- On the Server Configuration screen:
- Server URL: your server address (e.g.
https://betblocker.example.com) - Enrollment Token: paste the token from the web dashboard
- Server URL: your server address (e.g.
- Click Install
Approving the Network Extension (required)
Section titled “Approving the Network Extension (required)”After installation, macOS displays a notification:
System Extension Blocked — A program tried to install a new system extension.
This approval is required for BetBlocker to function. Without it, DNS filtering will not work.
To approve:
- Open System Settings > Privacy & Security
- Scroll to the Security section
- Next to “BetBlocker Network Extension was blocked”, click Allow
- Enter your administrator password
- Reboot when prompted
After reboot, the Network Extension loads and blocking begins automatically.
Note for managed Macs: If your Mac is enrolled in MDM (corporate or school management), your IT administrator may need to pre-approve the BetBlocker system extension via a configuration profile. See the MDM deployment section below.
What the Agent Does
Section titled “What the Agent Does”Two processes run continuously after installation:
| Process | Launched by | Account |
|---|---|---|
io.betblocker.agent | launchd (system) | root |
io.betblocker.watchdog | launchd (system) | root |
The Network Extension (io.betblocker.networkextension) runs in its own extension process managed by the OS — it cannot be stopped without removing the extension or rebooting.
The agent configures itself as the device’s DNS proxy via the Network Extension’s NEDNSProxyProvider API. All DNS queries from all apps on the device route through the agent’s local resolver before reaching the network.
LaunchDaemon plist locations
Section titled “LaunchDaemon plist locations”/Library/LaunchDaemons/io.betblocker.agent.plist/Library/LaunchDaemons/io.betblocker.watchdog.plistThese are owned by root and locked from modification.
Configuration and logs
Section titled “Configuration and logs”/Library/Application Support/BetBlocker/ — configuration and blocklist cache/Library/Logs/BetBlocker/ — log filesSystem Preferences Configuration
Section titled “System Preferences Configuration”BetBlocker requires no manual System Settings configuration beyond the initial extension approval. However, the following settings are relevant if you are troubleshooting:
Privacy & Security > Network Extensions: BetBlocker should appear here as enabled. If it shows disabled, re-approve it.
VPN & Filters (older macOS): On macOS 14 and earlier, DNS filters appear under System Settings > VPN > DNS. BetBlocker will appear in this list. Do not manually disable it.
MDM Deployment
Section titled “MDM Deployment”For deploying to managed Macs via MDM (Jamf, Kandji, Mosyle, etc.):
System Extension pre-approval payload
Section titled “System Extension pre-approval payload”<dict> <key>PayloadType</key> <string>com.apple.system-extension-policy</string> <key>AllowedSystemExtensions</key> <dict> <key>io.betblocker</key> <array> <string>io.betblocker.networkextension</string> </array> </dict> <key>AllowedTeamIdentifiers</key> <array> <string>BETBLOCKER_TEAM_ID</string> </array></dict>Replace BETBLOCKER_TEAM_ID with the BetBlocker code signing team identifier from the release notes.
Silent installation
Section titled “Silent installation”# Install pkg silentlysudo installer -pkg BetBlocker-macOS.pkg -target /
# Configure and enrollsudo /Library/BetBlocker/betblocker-agent enroll \ --server https://betblocker.example.com \ --token tok_...Updating
Section titled “Updating”Updates are applied automatically when the agent detects a new version on heartbeat. The update process:
- Downloads and verifies the new
.pkg - Installs in the background using
installer - Restarts the agent daemons
- If the Network Extension version changes, macOS may prompt the user to approve the new extension version — this requires the same approval flow as initial installation
For manual updates, download the new .pkg and run it.
Uninstallation
Section titled “Uninstallation”Standard drag-to-Trash removal of the BetBlocker app does not uninstall the system components. Use the official uninstaller.
Uninstallation requires an approved unenrollment:
- Complete the unenrollment process in the web dashboard
- Run the uninstaller:
Terminal window sudo /Library/BetBlocker/uninstall.sh - Reboot when prompted (required to fully unload the Network Extension)
Troubleshooting
Section titled “Troubleshooting”Network Extension not loading
Section titled “Network Extension not loading”# Check extension statussystemextensionsctl list | grep betblocker# Expected: [activated enabled] io.betblocker.networkextension
# If status is [activated waiting for user]# Go to System Settings > Privacy & Security and approveAgent not running
Section titled “Agent not running”# Check launchd statussudo launchctl list | grep betblocker
# View recent logslog show --predicate 'subsystem == "io.betblocker"' --last 1h
# Or check log files directlytail -f /Library/Logs/BetBlocker/agent.logStart manually if needed (should not be necessary in normal operation):
sudo launchctl start io.betblocker.agentDNS not being filtered
Section titled “DNS not being filtered”# Verify BetBlocker is the active DNS proxyscutil --dns | grep -A5 "resolver #1"# Should show nameserver[0]: 127.0.0.53
# Test a blocknslookup gamblingsite.com 127.0.0.53# Expected: NXDOMAINIf 127.0.0.53 is not the resolver, the Network Extension may not be active. Check extension status (above) and re-approve if needed.
”This Mac is managed” — conflicts with corporate MDM
Section titled “”This Mac is managed” — conflicts with corporate MDM”If your Mac is managed by your employer, the corporate MDM may have DNS filters of its own that conflict with BetBlocker. In this case:
- Contact your IT department to allowlist BetBlocker’s system extension
- Or use BetBlocker on a personal (unmanaged) Mac
BetBlocker cannot function correctly when a conflicting DNS filter is already active.
Collecting a diagnostic bundle
Section titled “Collecting a diagnostic bundle”sudo /Library/BetBlocker/betblocker-agent diagnostics --output ~/Desktop/bb-diag.zipThe bundle contains logs and configuration (secrets redacted). No browsing history or personal data is included.