rebreak-monorepo/ops/mdm/profiles/rebreak-iphone-protection.DEV-removable.mobileconfig
chahinebrini 8f2ef2cc98 feat(mdm,vip): MDM-VPN-Pivot + Layer-2-Country-Curated + Custom-Domain-Refactor
MDM-VPN-Pivot (Phase F.2 done):
- ops/mdm/profiles/rebreak-iphone-protection.mobileconfig auf v5 mit
  com.apple.vpn.managed Payload + OnDemandUserOverrideDisabled. iPhone-User
  kann ReBreak-VPN-Profile nicht entfernen und "Bedarf verbinden"-Toggle
  ist disabled. allowEnablingRestrictions empirisch widerlegt für FC-Toggle-
  Lock — out.
- DEV-removable Variante als Test-Profile dazu.
- Bootstrap-Tool (rebreak-supervise.sh) + Supervision-Identity-Setup-Doc.
- PHASES.md updated mit empirischen Befunden.

App-side MDM-Detect (Pfad-a Banner-Logic):
- modules/rebreak-protection: getDeviceState() returnt mdmManaged via
  Heuristik NETunnelProviderManager.count > 1 (App selbst kann nur einen
  eigenen erstellen, MDM-Push fügt einen zweiten hinzu).
- DeviceLayers.mdmManaged?: boolean Type.
- blocker.tsx: lockedIn-Bedingung erweitert um mdmManaged. Bei MDM-managed
  iPhones wird der App-Lock-Card (FC-Authorization-Toggle UI) ausgeblendet
  weil der per-App FC-Toggle nicht lockbar ist und durch den MDM-VPN-Layer
  redundant.

Layer-2-Country-Curated-Pivot:
- backend: vip-swap.post.ts raus, suggest.post.ts rein. Curated-domains
  durch admin (separate Tabelle/Pfad), getrennt von User-Custom-Domains.
- Admin-APIs für curated-domain Pflege (index.get + [id].patch).
- seed-country-blocklists Script für initiale Curated-Domain-Liste.
- protection/webcontent-domains.get refactored für Country-Curated-Pfad.
- Migration drop_vip_swap_fields.sql + schema.prisma adjusted.
- docs/concepts/layer2-country-pivot.md mit Architektur + Decision-Trail.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 07:11:47 +02:00

90 lines
3.4 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
ReBreak iPhone Protection Profile — DEV-REMOVABLE
=================================================
WARNUNG: Dieses Profil ist NUR FÜR TESTS gedacht.
Im Gegensatz zur Produktions-Variante (rebreak-iphone-protection.mobileconfig):
- PayloadRemovalDisallowed = false → User kann via Settings entfernen
- allowEraseContentAndSettings = true → User kann iPhone notfalls wipen
Damit du nach dem Test einfach wieder los wirst.
Alle anderen Restrictions sind identisch — perfekt um zu prüfen ob
allowAppRemoval/VPN-Lock/DNS-Lock greifen, ohne dich in die Falle zu sperren.
Andere PayloadIdentifier + UUIDs als die Produktions-Variante,
damit beide parallel koexistieren können.
-->
<plist version="1.0">
<dict>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>org.rebreak.protection.iphone.DEV.20260524</string>
<key>PayloadUUID</key>
<string>D1B2C3D4-E5F6-4789-ABCD-EF1234567899</string>
<key>PayloadDisplayName</key>
<string>ReBreak Schutz (DEV-Test)</string>
<key>PayloadDescription</key>
<string>TEST-Profil — via Settings entfernbar. NICHT für Produktion.</string>
<key>PayloadOrganization</key>
<string>ReBreak DEV</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadContent</key>
<array>
<dict>
<key>PayloadType</key>
<string>com.apple.applicationaccess</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>org.rebreak.protection.iphone.DEV.restrictions</string>
<key>PayloadUUID</key>
<string>D2234567-ABCD-4F01-9345-67890ABCDED1</string>
<key>PayloadDisplayName</key>
<string>ReBreak Restrictions (DEV)</string>
<!-- Die Restrictions die wir testen wollen -->
<key>allowAppRemoval</key>
<false/>
<key>allowUIConfigurationProfileInstallation</key>
<false/>
<!-- VPN-Restrictions raus (Scope-Pivot 2026-05-24):
allowVPNCreation/Modification blockt auch unsere eigene App via NEVPNManager.
Schutz läuft jetzt über DNS-Settings-Payload, VPN bleibt App-managed. -->
<!-- DEV: bewusst NICHT gesetzt damit du raus kannst falls was schief geht -->
<!-- allowEraseContentAndSettings bleibt default true -->
</dict>
<dict>
<key>PayloadType</key>
<string>com.apple.dnsSettings.managed</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>PayloadIdentifier</key>
<string>org.rebreak.protection.iphone.DEV.dns</string>
<key>PayloadUUID</key>
<string>D3234567-ABCD-4F01-9345-67890ABCDED2</string>
<key>PayloadDisplayName</key>
<string>ReBreak DNS-Filter (DEV)</string>
<key>DNSSettings</key>
<dict>
<key>DNSProtocol</key>
<string>HTTPS</string>
<key>ServerURL</key>
<string>https://dns.rebreak.org/dns-query</string>
</dict>
</dict>
</array>
</dict>
</plist>