Hosts-Datei mittels Intune anpassen
Um den Kinderschutz mittels hosts-Datei reibungslos umkehrbar (deinstallierbar) zu machen, ist der beste Weg über Intune die Erstellung einer Win32-App (.intunewin Datei) statt einer reinen Skript-Lösung. Eine Win32-App hat nämlich im Gegensatz zu einfachen Skripten zwingend Deinstallations-Befehle und lässt sich leicht durch die Zuweisung ("Deinstallieren") aktivieren.
Folgende Skripte werden benötigt:
install.ps1: Dieses Skript prüft zuerst, ob es bereits ein Backup unterhosts.backupgibt. Falls nein, legt es das Backup der aktuell aktiven Datei an und kopiert dann die Kinderschutz-Datei hinein.uninstall.ps1: Wenn du einem PC in Intune künftig den Status "Deinstallieren" zuweist, wird dieses Skript ausgeführt. Es spielt diehosts.backupwieder zurück. (Falls aus irgendeinem Grund kein Backup greifbar ist oder eine Kinderschutz-Datei gesichert worden ist, schreibt es aus Sicherheitsgründen die Standard-Windows-hosts-Datei zurück).detect.ps1: Intune braucht für Win32-Apps eine Möglichkeit regelmäßig zu prüfen, ob die Installation erfolgreich war und das Feature "wirklich da" ist.
1. Vorbereitung des Ordners
Kopiere deine angepasste hosts-Datei (ohne Dateiendung) in einen neuen Ordner HostsApp, in dem sich die folgenden ps1-Dateien befinden:
install.ps1
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
$backupPath = "$env:SystemRoot\System32\drivers\etc\hosts.backup"
# 1. Erstelle ein Backup der originalen hosts-Datei, falls noch keines existiert
if (-not (Test-Path $backupPath)) {
Copy-Item -Path $hostsPath -Destination $backupPath -Force
}
# 2. Kopiere die angepasste hosts-Datei aus dem Paketverzeichnis ins System
Copy-Item -Path .\hosts -Destination $hostsPath -Force
uninstall.ps1
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
$backupPath = "$env:SystemRoot\System32\drivers\etc\hosts.backup"
$useFallback = $true
if (Test-Path $backupPath) {
$backupContent = Get-Content -Path $backupPath -Raw
if ($backupContent -notmatch "# Jugendgefährdente Inhalte") {
# 1. Stelle das Backup wieder her
Copy-Item -Path $backupPath -Destination $hostsPath -Force
# Optional: Backup-Datei entfernen
Remove-Item -Path $backupPath -Force
$useFallback = $false
}
}
if ($useFallback) {
# 2. Fallback, falls kein Backup existiert oder es gesperrte Inhalte enthält: Standard Windows hosts-Datei wiederherstellen
$defaultHosts = @"
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
"@
Set-Content -Path $hostsPath -Value $defaultHosts -Force
}
detect.ps1
$hostsPath = "$env:SystemRoot\System32\drivers\etc\hosts"
if (Test-Path $hostsPath) {
# Wir suchen nach einem spezifischen String, der NUR in der neuen hosts vorkommt.
# Du solltest in deiner neuen hosts-Datei einfach ganz oben einen Kommentar wie "# MDM_SCHUELER_HOSTS_V1" hinzufügen.
$content = Get-Content $hostsPath -Raw
if ($content -match "# MDM_SCHUELER_HOSTS_V1") {
# Wenn der String gefunden wird, ist die App "installiert"
Write-Output "Installed"
exit 0
}
}
# Wenn die Datei nicht existiert oder der String nicht gefunden wurde: nicht installiert
exit 1
hosts-Datei
Lade die benötigten Inhalte von GitHub - Sinfonietta/hostfiles: A collection of category-specific host files herunter und speichere sie im gleichen Ordner wie die Skript-Dateien als hosts-Datei ohne Dateiendung.
Füge in deiner modifizierten hosts-Datei in der allerersten Zeile den Kommentar # MDM_SCHUELER_HOSTS_V1 ein. Genau nach dieser Zeile sucht nämlich das detect.ps1 Skript, um zu erkennen, dass "deine" hosts-Datei aktiv im System ist.
2. Als intunewin verpacken
Lade das Microsoft Win32 Content Prep Tool herunter (falls noch nicht geschehen) und führe es als Administrator aus:
- Source folder:
PFAD_ZU\HostsApp - Setup file:
install.ps1 - Output folder: (Dein gewünschtes Ziel)
3. Hochladen ins Intune Portal
Lade die generierte .intunewin Datei unter Apps > Windows > Hinzufügen (Typ: Windows-App (Win32)) hoch.
Trage hierbei folgende Befehle ein:
Installationsbefehl:
%systemroot%\sysnative\windowspowershell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File install.ps1
Deinstallationsbefehl:
%systemroot%\sysnative\windowspowershell\v1.0\powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File uninstall.ps1
(Hinweis: Der Aufruf über sysnative ist wichtig, da Intune als 32-Bit-Agent agiert und sonst in SysWOW64 landet, wo die hosts Datei nicht liegt. sysnative zwingt das Skript in den 64-Bit-Kontext).
- Installationsverhalten: System
- Neustartverhalten: Kein spezielles (App determines based on return codes)
4. Erkennungsregeln (Detection Rules) anlegen
Unter dem Reiter "Erkennungsregeln" im Setup für die App wählst du:
- Regelformat: Benutzerdefiniertes Skript für die Erkennung verwenden
- Lade dort die Datei
detect.ps1hoch. - Erzwingen der Signaturüberprüfung:
Nein - Skript in 64-Bit ausführen:
Ja
5. Deployment / Zuweisung
Jetzt weist du die App in Intune unter Erforderlich (Required) einfach der Gruppe mdm_schuelergeraete (Name anpassen) zu.
Sollte diese Schutzmaßnahme jemals wieder rückgängig gemacht werden müssen, nimmst du diese Gruppe bei Erforderlich heraus und legst die Gruppe (oder auch ein Problem-Gerät einzeln) unter Deinstallieren (Uninstall) hinein. Intune führt dann verlässlich sofort die uninstall.ps1 aus und aktiviert das Backup!
Siehe auch: Kindersicheren DNS-Server auf Intune einrichten