Schutz vor DNS-Bypass-Versuchen mithilfe des sicheren „x-ch-no-bypass“-Tokens.

Einleitung

In diesem Leitfaden wird erläutert, wie Sie Ihre Urspriebserver vor DNS-Umgehungsversuchen schützen können. Die Implementierung der x-ch-no-bypass Der Header ist für keine CrowdHandler-Integration erforderlich, bietet jedoch eine zusätzliche Verifizierungsebene auf Ihrer Ursprungsseite und wird daher empfohlen.

Für welche Integrationstypen ist dieser Artikel relevant?

Was versteht man unter DNS-Umgehungsversuchen?

Die Integration von CrowdHandler in Ihr CDN erschwert es, die CrowdHandler-Prüfungen zu umgehen. Ein entschlossener Nutzer, der Netzwerkdaten zu Ihrer Infrastruktur ausfindig macht, könnte jedoch in der Lage sein, Datenverkehr an Ihrem CDN-Endpunkt vorbei zu leiten und so den gesamten Schutz zu umgehen, den dieses bietet – einschließlich Ihrer CrowdHandler-Integration.

So funktioniert es

Nach der Konfiguration fügt Ihre CrowdHandler-Integration einen Header mit dem Namen x-ch-no-bypass bei jeder an Ihre Anwendung weitergeleiteten Anfrage. Der Wert entspricht Ihrem „No-Bypass“-Token. Mit nur wenigen Zeilen Code überprüft Ihre Anwendung, ob die Anfragen den Header mit dem erwarteten Wert enthalten, und lehnt diejenigen ab, bei denen dies nicht der Fall ist. Nur Anfragen, die den CrowdHandler durchlaufen haben, erreichen Ihre Anwendung.

Appcelerator (DNS) mit Cloudflare oder Imperva als Frontend

Wenn Ihr DNS auf Cloudflare oder Imperva verweist und dieser Dienst den Datenverkehr an CrowdHandler weiterleitet, legen Sie die Einrichtungstyp zu Cloudflare oder Imperva im CrowdHandler-Kontrollpanel. In diesem Modus fügt CrowdHandler keine eigenen x-ch-no-bypass Header. Stattdessen wird der von Ihnen in Cloudflare oder Imperva festgelegte Header unverändert an Ihren Ursprungsserver weitergeleitet.

Wenn Sie diesen Wert an Ihrem Origin validieren, können Sie damit nachweisen, dass eine Anfrage sowohl über Ihren Upstream-Dienst als auch über den CrowdHandler eingegangen ist. Eine Anfrage, die den CrowdHandler direkt erreicht und dabei Cloudflare oder Imperva umgeht, kommt ohne Header bei Ihrem Origin an und wird abgelehnt.

Wenn der Einstellungstyp auf „Direct DNS“ belassen wird, fügt CrowdHandler sein eigenes Token hinzu und überschreibt alle gleichnamigen Header, die es empfängt.

Wo finde ich mein Token?

Appcelerator (DNS): Öffnen Sie die Einstellungsseite der Domain im CrowdHandler-Kontrollpanel und klappen Sie den Abschnitt „Optionen“ auf. Das Token befindet sich im Feld „No-Bypass-Token “.

Wenn der Setup-Typ „Cloudflare“ oder „Imperva“ lautet, wird in diesem Feld „Von Cloudflare weitergeleitet“ oder „Von Imperva weitergeleitet“ angezeigt. In diesem Fall gibt es kein CrowdHandler-Token. Der zu überprüfende Wert ist derjenige, den Sie vorgelagert konfiguriert haben.

Optionsfenster mit dem Feld „No-Bypass-Token“

Andere CDN-Integrationen (Akamai, Cloudflare, CloudFront): In der jeweiligen Installationsanleitung wird erläutert, wo das Token festgelegt wird. Den Wert können Sie frei wählen.

Beispiele für die Integration

Prüfen, ob das x-ch-no-bypass Der Request-Header ist in den meisten Programmiersprachen und auf den meisten Webservern unkompliziert. Ersetzen Sie IHRTOKENWERT mit Ihrem Token.

Apache

RewriteEngine On

# Block if the x-ch-no-bypass request header does not match
RewriteCond %{HTTP:x-ch-no-bypass} !^(YOURTOKENVALUE)$
RewriteRule ^ - [F]

Nginx

location / {

    if ($http_x_ch_no_bypass != "YOURTOKENVALUE") {
        return 403;
    }

    proxy_pass http://app:3000/;
}

Express.js

app.get('/', (req, res) => {
    if (req.header('x-ch-no-bypass') !== "YOURTOKENVALUE") {
        return res.status(403).send("Sorry! You can't see that.");
    }
    res.sendFile(__dirname + "/views/index.html");
});

PHP

function getRequestHeaders() {
    $headers = array();
    foreach ($_SERVER as $key => $value) {
        if (substr($key, 0, 5) <> 'HTTP_') {
            continue;
        }

        $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
        $headers[$header] = $value;
    }
    return $headers;
}

$headers = getRequestHeaders();

if (($headers['X-Ch-No-Bypass'] ?? '') != "YOURTOKENVALUE") {
    header("HTTP/1.1 403 Forbidden");
    exit;
}

Python (Django)

from django.http import HttpResponseForbidden
from django.http import HttpResponse

def index(request):
    ch_bypass_key = request.META.get('HTTP_X_CH_NO_BYPASS')
    if ch_bypass_key != "YOURTOKENVALUE":
        return HttpResponseForbidden()
    return HttpResponse("Hello world!")

Was der Header schützt und was nicht

Die x-ch-no-bypass Die Überprüfung erfolgt auf Ihrem Origin-Server, sodass sie nur für Anfragen gilt, die Ihren Origin-Server erreichen. Daraus ergeben sich zwei Dinge.

Der Warteschlangeneinsatz wird stets durchgesetzt. CrowdHandler überprüft jede Anfrage am Edge, bevor irgendetwas anderes geschieht – einschließlich Anfragen nach zwischengespeicherten Inhalten. Ein Besucher kann die Warteschlange nicht umgehen, indem er eine zwischengespeicherte Kopie findet.

Bei zwischengespeicherten Inhalten entfällt die Überprüfung des Ursprungsservers. Wenn ein Pfad für die Zwischenspeicherung festgelegt ist, wird er bei der ersten Anfrage von Ihrem Ursprungsserver abgerufen, wo der Header validiert wird, und spätere Anfragen werden aus dem CDN-Cache bedient, ohne erneut auf Ihren Ursprungsserver zurückzugreifen. Eine Anfrage, die Ihren CDN übersprungen hat, könnte daher eine bereits zwischengespeicherte Kopie dieses Pfads erhalten. So funktioniert jeder CDN-Cache, das ist nichts Spezifisches für CrowdHandler. Wenn eine Seite bei jeder Anfrage validiert werden muss, deaktivieren Sie das Caching dafür. Bei Appcelerator ist dies die Spalte „Cache Policy“ unter „Advanced Behaviour Rules“; neue Domains speichern standardmäßig nichts im Cache.