Wähle dein Gerät.

Mac

Ein Profil, mit einem Klick installiert. In zwei Minuten fertig, mit deinem eigenen Passwort.

Was es tut

  • Leitet alle DNS-Anfragen verschlüsselt (DNS über HTTPS) an Cloudflare for Families. Seiten für Erwachsene und Schadsoftware lassen sich dann nicht mehr aufrufen, in jedem Browser und jeder App.
  • Schaltet Apples Filter „Websites für Erwachsene beschränken“ ein.
  • Schaltet iCloud Privat-Relay aus, weil es am DNS-Filter vorbeiführen würde.
  • Chrome, Brave, Edge und Firefox: kein privates Fenster, kein Gastmodus, sicheres DNS fest auf Cloudflare for Families, SafeSearch in Chrome und Edge.

Was es nicht kann

  • Privates Surfen in Safari bleibt möglich. Abschalten lässt Apple es nur über eine Geräteverwaltung (MDM), nicht über ein selbst installiertes Profil. Der DNS-Filter wirkt aber auch im privaten Fenster.
  • Wer das Administrator-Passwort kennt, kann das Profil entfernen.
  • Ein VPN, ein zweiter Benutzer mit Administratorrechten, ein Start von einem anderen Laufwerk oder ein neu aufgesetzter Mac umgehen den Schutz.
  • In WLANs mit Anmeldeseite (Hotel, Zug) kann die Anmeldung haken.

Wer den Schlüssel hält

Du selbst. Mit deinem Passwort kannst du das Profil auch wieder entfernen. Wenn nur dein Anker es lösen können soll, nimm den freiwilligen strengeren Schritt unten.

So geht es

  1. Profil laden. Auf diesem Mac: Mac-Profil laden
  2. Installieren. Systemeinstellungen > Allgemein > Geräteverwaltung öffnen (älteres macOS: Datenschutz & Sicherheit > Profile), „Consurgam Schutz (Mac)“ doppelt anklicken, „Installieren“ wählen. Du tippst dein Passwort ein.
  3. Prüfen. Browser neu starten und nudity.testcategory.com öffnen. Das ist eine harmlose Prüfseite von Cloudflare. Sie darf nicht laden.
  4. Wenn du magst: Bildschirmzeit. In deinem Konto unter Systemeinstellungen > Bildschirmzeit „Inhalt & Datenschutz“ einschalten und „Einstellungen für Bildschirmzeit sperren“ wählen. Strenger: Das Passwort für die Bildschirmzeit legt dein Anker fest.
  5. Freiwillig, strenger: nur dein Anker kann lösen. Dein Anker legt unter Systemeinstellungen > Benutzer:innen & Gruppen ein neues Administrator-Konto an, meldet sich damit an und schaltet bei deinem Konto „Administrator“ aus. Das Passwort des neuen Kontos kennt nur er.

Das Profil ist mit dem Apple-Zertifikat „Developer ID“ von Michael Porwol (effata development) signiert. Was es einstellt, steht in seiner Beschreibung. Es enthält kein Passwort.

Wieder entfernen

Systemeinstellungen > Allgemein > Geräteverwaltung, das Profil auswählen und entfernen. Der Mac fragt nach dem Administrator-Passwort.

Windows-PC

Ein Befehl im Administrator-Terminal. In zwei Minuten fertig, mit deinem eigenen Passwort.

Was es tut

  • Richtet DNS über HTTPS zu Cloudflare for Families ein, für IPv4 und IPv6, ohne Rückfall auf unverschlüsseltes DNS (Windows 11; Windows 10 filtert unverschlüsselt).
  • Trägt diese DNS-Server an allen aktiven Netzwerkadaptern ein.
  • Edge, Chrome, Brave und Firefox: kein InPrivate- oder Inkognito-Fenster, kein Gastmodus, sicheres DNS fest auf Cloudflare for Families, SafeSearch in Edge und Chrome.
  • Prüft am Ende selbst, ob der Filter wirkt.

Was es nicht kann

  • Wer ein Administrator-Konto hat, kann alles zurücknehmen.
  • Andere Browser (etwa Opera oder Vivaldi), ein VPN, ein Start vom USB-Stick oder ein neu installiertes Windows umgehen den Schutz.
  • Ein neuer Netzwerkadapter, etwa ein USB-Netzwerkstecker, bekommt die DNS-Server nicht von selbst. Dann den Befehl noch einmal ausführen.

Wer den Schlüssel hält

Du selbst. Mit deinem Administrator-Passwort kannst du es auch wieder zurücknehmen. Wenn nur dein Anker es lösen können soll, nimm den freiwilligen strengeren Schritt unten.

So geht es

  1. Terminal öffnen. Rechtsklick auf Start > „Terminal (Administrator)“, bei Windows 10 „Windows PowerShell (Administrator)“. Windows fragt nach dem Administrator-Passwort.
  2. Befehl einfügen. Unten auf „Befehl kopieren“, im Terminal mit Rechtsklick oder Strg+V einfügen, die Frage zum Einfügen mehrerer Zeilen bestätigen, Enter.
  3. Prüfen. Die letzte Prüfzeile meldet „[4/4] OK“. Danach die Browser neu starten.
  4. Freiwillig, strenger: nur dein Anker kann lösen. Dein Anker legt unter Einstellungen > Konten > Andere Benutzer ein Administrator-Konto an (ein lokales Konto genügt) und stellt dein Konto dort auf „Standardbenutzer“.
PowerShell
# Consurgam Schutz fuer Windows / Consurgam protection for Windows (version 1)
# Source: consurgam.com/schutz  -  Sends nothing to Consurgam, downloads nothing.
#
# What it does:
#   1. DNS over HTTPS with Cloudflare for Families (blocks adult and malware sites), IPv4 and IPv6,
#      no fallback to unencrypted DNS (Windows 11; on Windows 10 only plain DNS).
#   2. Sets these DNS servers on every active network adapter.
#   3. Browser policies (HKLM): no InPrivate/Incognito/private windows, no guest mode, secure DNS fixed
#      to Cloudflare for Families, SafeSearch. Edge, Chrome, Brave, Firefox.
#   4. Checks the result: a Cloudflare test domain must resolve to 0.0.0.0.
# Run it in "Terminal (Admin)". Safe to run again (idempotent). To undo: consurgam-windows-entfernen.ps1
# The key: whoever knows the administrator password can undo this. Your anchor keeps it.

& {
  $ErrorActionPreference = 'Stop'
  $doh  = 'https://family.cloudflare-dns.com/dns-query'
  $dns  = @('1.1.1.3', '1.0.0.3', '2606:4700:4700::1113', '2606:4700:4700::1003')
  $test = 'nudity.testcategory.com'   # Cloudflare test domain in the adult category, harmless

  # --- 0. Administrator? ---
  $ich = [Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()
  if (-not $ich.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Write-Host 'Bitte als Administrator starten: Rechtsklick auf Start > Terminal (Administrator).' -ForegroundColor Yellow
    Write-Host 'Please run as administrator: right-click Start > Terminal (Admin).' -ForegroundColor Yellow
    return
  }

  # --- 1. Register DNS over HTTPS (Windows 11 / Server 2022+) ---
  $mitDoh = [bool](Get-Command Add-DnsClientDohServerAddress -ErrorAction SilentlyContinue)
  if ($mitDoh) {
    foreach ($a in $dns) {
      $da = Get-DnsClientDohServerAddress -ServerAddress $a -ErrorAction SilentlyContinue
      if ($da) {
        Set-DnsClientDohServerAddress -ServerAddress $a -DohTemplate $doh -AllowFallbackToUdp $false -AutoUpgrade $true | Out-Null
      } else {
        Add-DnsClientDohServerAddress -ServerAddress $a -DohTemplate $doh -AllowFallbackToUdp $false -AutoUpgrade $true | Out-Null
      }
    }
    Write-Host '[1/4] DNS ueber HTTPS eingerichtet / DNS over HTTPS registered'
  } else {
    Write-Host '[1/4] Dieses Windows kennt kein DNS ueber HTTPS (Windows 10). Es filtert trotzdem, aber unverschluesselt.' -ForegroundColor Yellow
    Write-Host '      This Windows has no DNS over HTTPS (Windows 10). It still filters, unencrypted.' -ForegroundColor Yellow
  }

  # --- 2. DNS servers on all active adapters ---
  $adapter = @(Get-NetAdapter | Where-Object { $_.Status -eq 'Up' })
  foreach ($n in $adapter) {
    Set-DnsClientServerAddress -InterfaceIndex $n.ifIndex -ServerAddresses $dns
  }
  Clear-DnsClientCache
  Write-Host ("[2/4] DNS gesetzt auf {0} Adapter(n) / DNS set on {0} adapter(s): {1}" -f $adapter.Count, (($adapter | ForEach-Object Name) -join ', '))

  # --- 3. Browser policies ---
  function Setze([string]$pfad, [hashtable]$werte) {
    if (-not (Test-Path $pfad)) { New-Item -Path $pfad -Force | Out-Null }
    foreach ($k in $werte.Keys) {
      $v = $werte[$k]
      $typ = if ($v -is [string]) { 'String' } else { 'DWord' }
      New-ItemProperty -Path $pfad -Name $k -Value $v -PropertyType $typ -Force | Out-Null
    }
  }
  Setze 'HKLM:\SOFTWARE\Policies\Microsoft\Edge' @{
    InPrivateModeAvailability = 1; BrowserGuestModeEnabled = 0; ForceGoogleSafeSearch = 1; ForceBingSafeSearch = 2
    DnsOverHttpsMode = 'secure'; DnsOverHttpsTemplates = $doh
  }
  Setze 'HKLM:\SOFTWARE\Policies\Google\Chrome' @{
    IncognitoModeAvailability = 1; BrowserGuestModeEnabled = 0; SafeSitesFilterBehavior = 1; ForceGoogleSafeSearch = 1
    DnsOverHttpsMode = 'secure'; DnsOverHttpsTemplates = $doh
  }
  Setze 'HKLM:\SOFTWARE\Policies\BraveSoftware\Brave' @{
    IncognitoModeAvailability = 1; BrowserGuestModeEnabled = 0; SafeSitesFilterBehavior = 1; ForceGoogleSafeSearch = 1
    DnsOverHttpsMode = 'secure'; DnsOverHttpsTemplates = $doh
  }
  Setze 'HKLM:\SOFTWARE\Policies\Mozilla\Firefox' @{ DisablePrivateBrowsing = 1; PrivateBrowsingModeAvailability = 1 }
  Setze 'HKLM:\SOFTWARE\Policies\Mozilla\Firefox\DNSOverHTTPS' @{ Enabled = 1; ProviderURL = $doh; Locked = 1; Fallback = 0 }
  Write-Host '[3/4] Richtlinien fuer Edge, Chrome, Brave, Firefox gesetzt (Browser neu starten) / Browser policies set (restart browsers)'

  # --- 4. Check ---
  try {
    $ip = @(Resolve-DnsName -Name $test -Type A -DnsOnly -QuickTimeout | Where-Object { $_.IPAddress } | ForEach-Object IPAddress)
  } catch { $ip = @() }
  if ($ip -contains '0.0.0.0') {
    Write-Host "[4/4] OK: $test -> 0.0.0.0. Der Filter wirkt. / The filter works." -ForegroundColor Green
  } else {
    Write-Host ("[4/4] Achtung: {0} -> {1}. Erwartet 0.0.0.0. VPN aktiv oder anderer DNS? / Check failed, expected 0.0.0.0." -f $test, ($ip -join ', ')) -ForegroundColor Yellow
  }
  Write-Host 'Jetzt: eigenes Konto auf Standardbenutzer stellen, Administrator-Passwort behaelt dein Anker.'
  Write-Host 'Next: make your own account a standard user; your anchor keeps the administrator password.'
}

Lieber als Datei: consurgam-windows.ps1. Im Administrator-Terminal starten mit powershell -ExecutionPolicy Bypass -File .\consurgam-windows.ps1

Wieder entfernen

Mit consurgam-windows-entfernen.ps1, genauso gestartet. Es nimmt genau das zurück, was der Befehl gesetzt hat.

Linux

Ein Skript für den DNS-Filter und die Browser, gestartet mit deinem Passwort.

Was es tut

  • Leitet über systemd-resolved alle DNS-Anfragen verschlüsselt (DNS über TLS) an Cloudflare for Families, ohne Ausweich-Server.
  • Chrome, Chromium, Edge, Brave und Firefox: kein privates Fenster, kein Gastmodus, sicheres DNS fest auf Cloudflare for Families.
  • Prüft am Ende selbst, ob der Filter wirkt.

Was es nicht kann

  • Wer root ist oder sudo darf, kann alles zurücknehmen.
  • Browser als Flatpak lesen die Richtlinien unter /etc nicht.
  • Ohne systemd-resolved richtet das Skript keinen DNS-Filter ein. Dann hilft der Router.
  • Ein VPN, ein Live-USB-Stick oder ein neu installiertes System umgehen den Schutz.

Wer den Schlüssel hält

Du selbst. Wer root ist oder sudo darf, kann es zurücknehmen. Wenn nur dein Anker es lösen können soll, nimm den freiwilligen strengeren Schritt unten.

So geht es

  1. Skript laden: consurgam-linux.sh
  2. Ausführen. Im Terminal, im Ordner „Downloads“: su -c 'sh consurgam-linux.sh', mit dem Root-Passwort. Hat das System kein Root-Passwort (etwa Ubuntu), startest du es mit sudo sh und dem Pfad zur Datei.
  3. Prüfen. Die letzte Prüfzeile meldet „[3/3] OK“. Danach die Browser neu starten.
  4. Freiwillig, strenger: nur dein Anker kann lösen. Dein Anker richtet sich ein eigenes Admin-Konto ein und nimmt dein Konto aus der Gruppe sudo (Debian, Ubuntu) bzw. wheel (Fedora, Arch).
Skript ansehen
#!/bin/sh
# Consurgam Schutz fuer Linux / Consurgam protection for Linux (version 1)
# Source: consurgam.com/schutz  -  Sends nothing to Consurgam, downloads nothing.
#
# What it does (run as root: sudo sh consurgam-linux.sh, or su -c 'sh consurgam-linux.sh'):
#   1. systemd-resolved: DNS over TLS with Cloudflare for Families (blocks adult and malware sites) for ALL
#      domains (Domains=~.), no fallback servers. Drop-in /etc/systemd/resolved.conf.d/consurgam.conf
#   2. Browser policies: no private windows/incognito/guest mode, secure DNS fixed to Cloudflare for Families,
#      SafeSearch. Chrome, Chromium, Edge, Brave: own file consurgam.json in .../policies/managed/.
#      Firefox: /etc/firefox/policies/policies.json (merged with existing policies if python3 is present).
#   3. Checks the result: a Cloudflare test domain must resolve to 0.0.0.0.
# Safe to run again. To undo: consurgam-linux-entfernen.sh
# The key: whoever has root (sudo) can undo this. Your own account should not be in the sudo/wheel group;
# your anchor keeps the root or admin password.
set -eu

DOH='https://family.cloudflare-dns.com/dns-query'
TEST='nudity.testcategory.com'   # Cloudflare test domain in the adult category, harmless

if [ "$(id -u)" -ne 0 ]; then
  echo "Bitte als root starten (sudo sh $0) / Please run as root (sudo sh $0)." >&2
  exit 1
fi

# --- 1. systemd-resolved ---
if ! command -v resolvectl >/dev/null 2>&1 || ! systemctl is-active --quiet systemd-resolved; then
  echo "systemd-resolved laeuft nicht. Ohne ihn richtet dieses Skript den DNS-Filter nicht ein." >&2
  echo "systemd-resolved is not running. This script needs it for the DNS filter." >&2
  echo "Alternative: DNS-Server 1.1.1.3 und 1.0.0.3 im Router oder im Netzwerk-Manager eintragen." >&2
  exit 2
fi
mkdir -p /etc/systemd/resolved.conf.d
cat > /etc/systemd/resolved.conf.d/consurgam.conf <<'EOF'
# Consurgam: Cloudflare for Families over DNS-over-TLS for all domains. Remove with consurgam-linux-entfernen.sh
[Resolve]
DNS=1.1.1.3#family.cloudflare-dns.com 1.0.0.3#family.cloudflare-dns.com 2606:4700:4700::1113#family.cloudflare-dns.com 2606:4700:4700::1003#family.cloudflare-dns.com
DNSOverTLS=yes
Domains=~.
FallbackDNS=
EOF
systemctl restart systemd-resolved
resolvectl flush-caches 2>/dev/null || true
echo "[1/3] systemd-resolved: DNS ueber TLS zu Cloudflare for Families / DNS over TLS to Cloudflare for Families"
case "$(readlink -f /etc/resolv.conf 2>/dev/null || true)" in
  */systemd/resolve/stub-resolv.conf|*/systemd/resolve/resolv.conf) ;;
  *) echo "      Achtung: /etc/resolv.conf zeigt nicht auf systemd-resolved. Netzwerk-Manager auf systemd-resolved umstellen." >&2
     echo "      Warning: /etc/resolv.conf does not point to systemd-resolved. Switch your network manager to systemd-resolved." >&2 ;;
esac

# --- 2. Browser policies ---
CHROMIUM_JSON='{
  "IncognitoModeAvailability": 1,
  "BrowserGuestModeEnabled": false,
  "SafeSitesFilterBehavior": 1,
  "ForceGoogleSafeSearch": true,
  "DnsOverHttpsMode": "secure",
  "DnsOverHttpsTemplates": "'"$DOH"'"
}'
EDGE_JSON='{
  "InPrivateModeAvailability": 1,
  "BrowserGuestModeEnabled": false,
  "ForceGoogleSafeSearch": true,
  "ForceBingSafeSearch": 2,
  "DnsOverHttpsMode": "secure",
  "DnsOverHttpsTemplates": "'"$DOH"'"
}'
for d in /etc/opt/chrome/policies/managed /etc/chromium/policies/managed /etc/chromium-browser/policies/managed /etc/brave/policies/managed; do
  mkdir -p "$d" && printf '%s\n' "$CHROMIUM_JSON" > "$d/consurgam.json"
done
mkdir -p /etc/opt/edge/policies/managed && printf '%s\n' "$EDGE_JSON" > /etc/opt/edge/policies/managed/consurgam.json

FF=/etc/firefox/policies/policies.json
mkdir -p /etc/firefox/policies
if [ -s "$FF" ] && [ ! -f /etc/firefox/policies/.consurgam ]; then
  if command -v python3 >/dev/null 2>&1; then
    python3 - "$FF" "$DOH" <<'EOF'
import json, sys
p, doh = sys.argv[1], sys.argv[2]
d = json.load(open(p))
pol = d.setdefault("policies", {})
pol.update({"DisablePrivateBrowsing": True, "PrivateBrowsingModeAvailability": 1,
            "DNSOverHTTPS": {"Enabled": True, "ProviderURL": doh, "Locked": True, "Fallback": False}})
json.dump(d, open(p, "w"), indent=2)
EOF
    echo "      Firefox: bestehende Richtlinien ergaenzt / existing policies extended"
  else
    echo "      Firefox: $FF existiert schon und python3 fehlt. Bitte von Hand ergaenzen. / exists, python3 missing: please merge by hand." >&2
  fi
else
  cat > "$FF" <<EOF
{
  "policies": {
    "DisablePrivateBrowsing": true,
    "PrivateBrowsingModeAvailability": 1,
    "DNSOverHTTPS": { "Enabled": true, "ProviderURL": "$DOH", "Locked": true, "Fallback": false }
  }
}
EOF
  : > /etc/firefox/policies/.consurgam   # marks the file as ours, so the removal script may delete it
fi
echo "[2/3] Richtlinien fuer Chrome, Chromium, Edge, Brave, Firefox gesetzt (Browser neu starten) / browser policies set (restart browsers)"

# --- 3. Check ---
ERG=$(resolvectl query --legend=no -t A "$TEST" 2>/dev/null | head -1 || true)
case "$ERG" in
  *0.0.0.0*) echo "[3/3] OK: $TEST -> 0.0.0.0. Der Filter wirkt. / The filter works." ;;
  *) echo "[3/3] Achtung: $TEST -> ${ERG:-keine Antwort}. Erwartet 0.0.0.0. VPN aktiv? / Check failed, expected 0.0.0.0." >&2 ;;
esac
echo "Jetzt: dein eigenes Konto ohne sudo, das Root- oder Admin-Passwort behaelt dein Anker."
echo "Next: your own account without sudo; your anchor keeps the root or admin password."

Wieder entfernen

Mit consurgam-linux-entfernen.sh, genauso gestartet.

Router zu Hause

Ein DNS-Filter im Router schützt alle Geräte im WLAN, auch Fernseher und Konsole.

Was es tut

  • Alle Geräte in deinem WLAN oder am Kabel fragen Cloudflare for Families. Seiten für Erwachsene lassen sich dort nicht aufrufen.
  • Auf der FRITZ!Box verschlüsselt (DNS over TLS).

Was es nicht kann

  • Wirkt nur zu Hause, unterwegs und im Mobilfunk nicht.
  • iCloud Privat-Relay, ein VPN oder ein Browser mit eigenem „sicheren DNS“ gehen daran vorbei. Dagegen helfen die Bausteine für Mac und Windows.
  • Wer den Router auf Werkseinstellungen zurücksetzt, ist den Filter los.

Wer den Schlüssel hält

Du selbst, mit dem Kennwort der Router-Oberfläche. Strenger: Dein Anker ändert das Kennwort und behält es.

So geht es

  1. Im Browser fritz.box öffnen und anmelden.
  2. Internet > Zugangsdaten > DNS-Server. Unter DNSv4 „Andere DNSv4-Server verwenden“: 1.1.1.3 und 1.0.0.3. Unter DNSv6 „Andere DNSv6-Server verwenden“: 2606:4700:4700::1113 und 2606:4700:4700::1003.
  3. „Verschlüsselte Namensauflösung im Internet (DNS over TLS)“ einschalten, als Auflösungsname family.cloudflare-dns.com eintragen.
  4. „Fallback auf unverschlüsselte Namensauflösung“ lieber aus lassen. Das ist strenger. Ist Cloudflare einmal nicht erreichbar, geht kurz keine Seite auf. Dann kann dein Anker den Fallback einschalten.
  5. Übernehmen. Danach ändert dein Anker unter System > FRITZ!Box-Benutzer das Kennwort der Oberfläche.
  6. Andere Router: Das Menü heißt oft „DNS“, „Internet“ oder „WAN“. Dort dieselben Adressen eintragen. Menünamen können je nach Version abweichen.

Wieder entfernen

Unter DNS-Server wieder „Vom Internetanbieter zugewiesene DNS-Server verwenden“ wählen. Dafür braucht es das Kennwort deines Ankers.

iPhone und iPad

Dafür ist die App Consurgam da. Ein Kauf gilt auf iPhone und iPad.

Was es tut

  • In der App unter Begleiter > Schutz: Safari-Schutz mit Atempause, Apples Filter für Erwachsene und eine Pause vor Apps, die du wählst.

Was es nicht kann

  • Diese Sperren kannst du selbst wieder lösen. Einen echten Schlüssel gibt es auf iPhone und iPad nur über Apples Bildschirmzeit-Code.

Wer den Schlüssel hält

Du selbst, in der App. Strenger: Dein Anker legt den Bildschirmzeit-Code fest und trägt für die Wiederherstellung seine eigene Apple-ID ein. Die App führt euch unter Begleiter > Alle Geräte schützen durch die Schritte.

Android

Privates DNS auf Cloudflare for Families stellen.

Was es tut

  • Seiten für Erwachsene lassen sich in allen Apps nicht mehr aufrufen, auch im Mobilfunk.

Was es nicht kann

  • Für Erwachsene bietet Android keinen Schlüssel: Die Einstellung kannst du selbst zurückstellen.

Wer den Schlüssel hält

Niemand. Wenn dir das zu wenig ist: der Router zu Hause hält zumindest dort.

So geht es

  1. Einstellungen > Netzwerk & Internet > Privates DNS, „Hostname des Anbieters für privates DNS“: family.cloudflare-dns.com. Menünamen können je nach Hersteller abweichen.

Kein Filter ist lückenlos. Eine Sperre verschafft dir Zeit, sie ersetzt kein Gespräch.

Was wir erfahren: nichts

Profil und Skripte enthalten keine Kennung von dir und senden nichts an uns. Sie laden auch nichts nach. Die Namen der Seiten, die du aufrufst (DNS-Anfragen), gehen an Cloudflare for Families. Cloudflare kürzt dort nach eigener Zusage die IP-Adresse und löscht sie binnen 25 Stunden (Datenschutz-Zusage von Cloudflare). Mehr in unserer Datenschutzerklärung.

← Consurgam