iPhone: Erzwinge VPN-Verbindung in fremden WLANs
Durch die Verwendung von Profildateien zur Gerätekonfiguration lässt sich das iPhone so einstellen, dass es bei der Verbindung öffentlicher unsicherer WLAN-Netze automatisch eine sichere VPN Verbindung aufbaut. In diesem Beitrag findet sich eine Erklärung und ein einfach anpassbares Template.
Folgendes Szenario: Ihr verbindet Euer iPhone mit dem öffentlichen Hotspot Eurer Wahl, sagen wir in irgendeinem Café am Flughafen. Euer iPhone stellt die Verbindung her und fängt sofort an Accountinformationen, wie Eure E-Mail-Zugangsdaten über das unbekannte WLAN zu senden um die neusten Mails für Euch abzurufen. Eure eigentlich geheimen Zugangsdaten werden nun quasi für jeden lesbar in diesem öffentlichen WLAN übertragen und jeder der technisch in der Lage ist Eure Passwörter mitzulesen kann sich mit diesen nun auch in Euer E-Mailpostfach einloggen. Das ist natürlich kein wünschenswerter Zustand.
Abhilfe schafft hier die Nutzung eines sogenannten VPN-Tunnels. Der sichere und in sich gekapselte VPN-Tunnel wird von Eurem Endgerät zu Euch nach Hause (oder zu einem anderen sicheren Endpunkt) aufgebaut und sämtlicher Brauchdatenverkehr wie Mailaccounts, Chats, etc. erreicht erst vom Endpunkt des Tunnels das Internet. Der VPN-Tunnel ermöglicht somit das sichere Surfen, so als wäre man zuhause.
Wer schonmal versucht hat, seinen Datenverkehr des iPhones durch ein VPN zu schützen, der wird festgestellt haben, dass das iPhone nach einiger Zeit der aktiven VPN-Verbindung den Tunnel einfach beendet, zum Beispiel wenn längere Zeit keine Daten geflossen sind. Außerdem ist es ziemlich nervig den VPN Tunnel zuhause wieder manuell ausschalten zu müssen. Es gibt aber noch ein gravierenderes Problem: Um das VPN manuell anzuschalten, muss man zunächst mit dem WLAN verbunden sein. Noch bevor man also das VPN manuell verbinden könnte, hätte das iPhone in Sekundenschnelle im Hintergrund bereits Daten über ein eventuell unsicheres WLAN-Netz verschickt.
Damit das in Zukunft nicht mehr passiert, weisen wir unser iPhone an, in jedem unbekannten WLAN eine VPN-Verbindung aufzubauen, bevor es Daten verschickt. Das realisieren wir über sogenannte Profile. Profile sind im Grunde genommen Dateien mit (XML-)strukturiertem Inhalt, welche dem iPhone mitteilen wie es sich unter bestimmten Bedingungen zu verhalten hat. In der Regel werden diese Konfigurationsdateien im Firmenumfeld benutzt, damit man nicht tausende smartphones von Mitarbeitern manuell und händisch konfigurieren muss. Stattdessen verteilt man ein einziges Profil und verteilt es mit einem Klick an die Mitarbeiter-Geräte. Dabei erlaubt die Profilkonfiguration teilweise tiefere Eingriffe in die Einstellungen unseres iPhones als es das Einstellungsmenü zulässt. Und das machen wir uns zu Nutze.
Template mit Euren VPN-Daten anreichern
Der folgende Code ist ein Template für genau den oben beschriebenen Anwendungsfall. Genutzt wird in diesem Profil ein VPN vom Typ IPsec, wie es auch die FritzBox bereitstellt.
Sucht einfach nach „ÄNDEREMICH“ und ersetzt in diesen Abschnitten die Daten mit Euren eigenen VPN-Zugangsdaten.
Ihr braucht hierfür folgende Daten:
- Euren Hostname
- Username
- Password
- Shared Secret
- Liste von WLAN-Netzwerken, denen Ihr vertraut und welche keine VPN-Verbindung benötigen (Euer vertrautes Netzwerk am Arbeitsplatz oder Zuhause)
Tragt einfach alle Daten bis auf das Shared Secret als Klartext in die XML-Datei ein.
Euer Shared Secret packt ihr zuvor in diesen Generator (https://www.base64decode.org) und codiert das Shared-Secret somit auf BASE64. Das umgeschlüsselte Shared Secret tragt ihr dann in der passenden Stelle in die Datei ein.
Muss ich auch die Payloaddaten im Template anpassen?
Ihr werdet Euch möglicherweise fragen, ob Ihr auch die in dem Template enthaltenen Payloaddaten wie die PayloadUUID anpassen müsst. Auch auf diese Fragestellung will ich kurz eingehen und erkläre in diesem Abschnitt ein wenig den Hintergrund.
Eigentlich stellt Apple ein Programm bereit, mit dem sich Profile für iOS-Geräte erstellen lassen. Das Tool heißt Apple Configurator 2 und ermöglicht die Erstellung von Profildateien über eine grafische Oberfläche. Wenn mit diesem Tool ein Profil generiert wird, werden automatisch die Payloaddaten generiert. Es handelt sich dabei mehr oder weniger um eine Art Zufallszahl, oder besser gesagt eine Prüfsumme, generiert aus verschiedenen Variablen des erstellten Profils.
Diese Zufallszahl ist sehr wahrscheinlich einzigartig, sprich es wird wohl kaum vorkommen, dass zwei Profile mit der exakt gleichen PayloadUUID auf einem Gerät installiert werden. Und das soll auch so sein, denn diese einzigartige UUID ermöglicht es uns später die Profildatei anzupassen und geändert erneut an das Endgerät zu schicken, ohne dass das Profil doppelt erstellt würde. Wenn bereits ein Profil mit der gleichen UUID auf dem Endgerät installiert ist, wird dieses lediglich upgedatet. Würdet Ihr ein Profil mit einer anderen UUID an das iPhone schikcen, würde es zusätzlich zum bereit vorhanden installiert werden, sprich ihr hättet ggf. doppelte Profile installiert.
TLDR: Nein, ihr müsst die Payload-Abschnitte der Profildatei nicht anpassen.
mobileconfig-Datei abspeichern und an das iPhone schicken
Die Komplette Datei speichert ihr dann zum Beispiel als vpn.mobileconfig ab. Dabei ist besonders die Dateiendung „.mobileconfig“ wichtig.
Nach dem Editieren und Speichern schickt Ihr diese Datei per AirDrop oder E-Mail an Euer iPhone und installiert das erstellte Profil. Fertig.
mobileconfig-Datei zum Anpassen:
[code]<?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">
<plist version="1.0">
<dict>
<key>PayloadContent</key>
<array>
<dict>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifier</key>
<string>ÄNDEREMICHusername</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>RemoteAddress</key>
<string>ÄNDEREMICHmy.hostname.de</string>
<key>SharedSecret</key>
<data>
ÄNDEREMICHABERCODIERMICHVORHERINBASE64
</data>
<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>
<string>ÄNDEREMICHusername</string>
<key>XAuthPassword</key>
<string>ÄNDEREMICHpassword</string>
</dict>
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>
<key>OverridePrimary</key>
<true/>
<key>PayloadDisplayName</key>
<string>Manuelle Verbindung zum Heimnetz</string>
<key>PayloadIdentifier</key>
<string>com.apple.vpn.managed.D58846D4-51B5-437E-9147-199C811ABA1C</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>D58846D4-51B5-437E-9147-199C811ABA1C</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Manuelle Verbindung zum Heimnetz</string>
<key>VPNType</key>
<string>IPSec</string>
</dict>
<dict>
<key>IPSec</key>
<dict>
<key>AuthenticationMethod</key>
<string>SharedSecret</string>
<key>LocalIdentifier</key>
<string>ÄNDEREMICHusername</string>
<key>LocalIdentifierType</key>
<string>KeyID</string>
<key>RemoteAddress</key>
<string>ÄNDEREMICHmy.hostname.de</string>
<key>SharedSecret</key>
<data>
ÄNDEREMICHABERCODIERMICHVORHERINBASE64
</data>
<key>XAuthEnabled</key>
<integer>1</integer>
<key>XAuthName</key>
<string>ÄNDEREMICHusername</string>
<key>XAuthPassword</key>
<string>ÄNDEREMICHpassword</string>
</dict>
<key>IPv4</key>
<dict>
<key>OverridePrimary</key>
<integer>1</integer>
</dict>
<key>OnDemandEnabled</key>
<integer>1</integer>
<key>OnDemandRules</key>
<array>
<dict>
<key>Action</key>
<string>Disconnect</string>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
<key>SSIDMatch</key>
<array>
<string>ÄNDEREMICHHeimnetzwerkname(SSID)</string>
<string>ÄNDEREMICHArbeitsplatznetzwerkname(SSID)</string>
</array>
</dict>
<dict>
<key>Action</key>
<string>Connect</string>
<key>InterfaceTypeMatch</key>
<string>WiFi</string>
</dict>
<dict>
<key>Action</key>
<string>Disconnect</string>
</dict>
</array>
<key>OverridePrimary</key>
<true/>
<key>PayloadDisplayName</key>
<string>Autoconnect zum Heimnetz in fremdem WLAN</string>
<key>PayloadIdentifier</key>
<string>com.apple.vpn.managed.85284094-A9F5-47D7-A1CD-6F831B2FFAC0</string>
<key>PayloadType</key>
<string>com.apple.vpn.managed</string>
<key>PayloadUUID</key>
<string>85284094-A9F5-47D7-A1CD-6F831B2FFAC0</string>
<key>PayloadVersion</key>
<integer>1</integer>
<key>UserDefinedName</key>
<string>Autoconnect zum Heimnetz in fremdem WLAN</string>
<key>VPNType</key>
<string>IPSec</string>
</dict>
</array>
<key>PayloadDescription</key>
<string>Es ermöglicht die manuelle, sichere Verbindung zum Heim-Netz in fremden, nicht sicheren WLAN-Netzen.</string>
<key>PayloadDisplayName</key>
<string>ÄNDEREMICH VPN Configurations for Organisation (z.B. Firmenname)</string>
<key>PayloadIdentifier</key>
<string>DB.BAB78424-28FB-4654-915D-93D0CB87CC7B</string>
<key>PayloadOrganization</key>
<string>ÄNDEREMICH Optional: Vorname Nachname für Name der Organisation (z.B. Firmenname)</string>
<key>PayloadRemovalDisallowed</key>
<false/>
<key>PayloadType</key>
<string>Configuration</string>
<key>PayloadUUID</key>
<string>8CADFABC-C196-4784-948E-FB5345714B22</string>
<key>PayloadVersion</key>
<integer>1</integer>
</dict>
</plist>[/code]
All the links in this text are Amazon Affiliate Links, and by clicking on an affiliate link I will earn a percentage of your subsequent Amazon purchases. However, this circumstance does not influence the background of my product recommendation. This product recommendation is independent, honest and sincere.
Bei allen genannten Links handelt es sich um Amazon-Affiliate-Links. Durch einen Klick auf einen Affiliate-Link werde ich prozentual an Euren darauf folgenden Amazon-Einkäufen beteiligt. Dieser Umstand beeinflusst aber nicht die Hintergründe meiner Produktempfehlung. Diese Produktempfehlung erfolgt unabhängig, ehrlich und aufrichtig.
Steffen
Prima Hilfe!
Ich habe noch einen Part im Autoconnect ergänzt, den ich bei einer anderen Anleitung gefunden habe. Vielleicht nicht notwendig? VG
Action
Disconnect
InterfaceTypeMatch
Cellular
Manu
Hallo,
an sich wäre super aber ich kann unter 13.4.1 die Konfigurations-Datei nicht öffnen. Hat sich da irgendwas geändert?
Harlee Goff
Das ist ein tolles Teilen. Für die base64-Dekodierung ist Folgendes hinzuzufügen: Hier ist ein Tool, das Sie unter https://url-decode.com/tool/base64-decode überprüfen müssen. Dieses Tool ermöglicht auch den Zugriff auf Dutzende anderer Webdienstprogramme.
Jens
Hallo,
ich setze mich das erste Mal mit Profilen auseinander. Erst einmal Dank für die ausführliche Beschreibung. Eine Frage habe ich, Ich baue den VPN über WireGuard-VPN-Server auf. Klappt der XML-File damit wohl auch?
Gruß und Danke
Jens
Tobi
Hi Daniel,
ich bekomme den Hinweis, das das Profil ungültig ist. hat sich zu ios15 etwas geändert?
Jens
Hallo,
ich habe das auf meinem Iphone SE mit IOS15.1 eingerichtet und es funktioniert prima.
Gibt es eine Möglichkeit die definierten WLan Netze auch direkt auf dem Iphone anzupassen oder muss dann immer das Profil angepasst und neu auf dem Iphone installiert werden?
Z.B. wenn ein weiteres Netzt dazu kommt bei dem keine VPN benötigt wird oder sich die SSID ändert.
Über eine Rückmeldung würde ich mich freuen auch wenn der Beitrag schon etwas älter ist.
Danke Gruß Jens
Björn
Hi ich habe das gleiche Problem wie TOBI, bekomme auch die Anzeige, dass das Profil ungültig ist.