Internetzugriff umschalten
Beim Erstellen einer Sandbox kannst du den ParameterallowInternetAccess / allow_internet_access verwenden, um die Internetkonnektivität zu konfigurieren. Der Internetzugriff ist standardmäßig aktiviert, kann aber für Workloads mit strengeren Sicherheitsanforderungen deaktiviert werden.
Das Übergeben eines falsy-Werts an
allowInternetAccess / allow_internet_access hat denselben Effekt wie das Hinzufügen von ['0.0.0.0/0'] zu network.denyOut / network.deny_out, wodurch jedes Ziel blockiert wird.Feingranulare Netzwerksteuerung
Die Netzwerkkonfiguration bietet feingranularere Kontrolle über ausgehenden Datenverkehr, indem du Zulassungslisten und Sperrlisten definieren kannst.Zulassungs- und Sperrlisten
IP-Adressen, CIDR-Blöcke oder Domainnamen, auf die die Sandbox zugreifen darf, können angegeben werden.Das CIDR
'0.0.0.0/0' / "0.0.0.0/0" ist eine Kurzschreibweise für „jedes Ziel“. Eine exportierte Konstante ALL_TRAFFIC wird auf denselben Wert 0.0.0.0/0 aufgelöst, falls du eine benannte Alternative zum Literal bevorzugst.Domainbasiertes Filtern
Du kannst Hostnamen inallowOut / allow_out angeben, um ausgehenden Datenverkehr zu ausgewählten Domains zu erlauben. Wenn domainbasiertes Filtern aktiviert ist, muss der gesamte verbleibende Datenverkehr über denyOut / deny_out blockiert werden. Domain-Einträge werden nur in Zulassungslisten unterstützt und können nicht in Sperrlisten verwendet werden.
Immer wenn eine Domain in der Konfiguration erscheint, wird der Standard-Nameserver
8.8.8.8 automatisch zugelassen, damit die DNS-Auflösung weiterhin funktioniert.Das Filtern nach Domain gilt nur für HTTP über Port 80 (geprüft über den Host-Header) und TLS über Port 443 (geprüft über SNI). Jeder andere Port fällt auf CIDR-basiertes Matching zurück, und UDP-Protokolle wie QUIC/HTTP3 können nicht nach Domain gefiltert werden.
Verhalten blockierter TCP-Verbindungen
Aufgrund der Firewall-Architektur kann eine blockierte ausgehende Verbindung innerhalb der Sandbox dennoch erfolgreich erscheinen. Die Firewall muss die TCP-Verbindung zunächst akzeptieren, bevor sie auswerten kann, ob das Ziel erlaubt ist. Daher kann Code, der innerhalb der Sandbox ausgeführt wird, sehen, dass die Verbindung erfolgreich ist und der Socket geöffnet wird, selbst wenn das Ziel blockiert ist. In diesem Fall wird tatsächlich kein Datenverkehr an den entfernten Endpunkt zugestellt. Um zu bestätigen, dass das Ziel erreichbar ist, solltest du eine Antwort auf Anwendungsebene validieren, anstatt dich nur auf den Erfolg der TCP-Verbindung zu verlassen. Prüfe beispielsweise auf einen HTTP-Statuscode, einen abgeschlossenen TLS-Handshake oder die erwarteten Antwortbytes des Protokolls. Dieses Verhalten ist eine aktuelle Einschränkung der Art und Weise, wie ausgehender Sandbox-Datenverkehr durch unsere Firewall geleitet wird, und kann in Zukunft aktualisiert werden.Prioritätsregeln
Wenn sowohl Zulassungs- als auch Sperrregeln konfiguriert sind, haben die Zulassungsregeln Vorrang. Daher wird jede IP-Adresse, die in beiden Listen erscheint, weiterhin erlaubt.network werden nur wirksam, wenn die Sandbox erstellt wird — übergib sie an Sandbox.create. Sobald die Sandbox existiert, sind sie festgelegt und können nicht geändert werden.
Öffentliche Sandbox-URL
Auf Dienste in einer Sandbox kann über die öffentliche URL der Sandbox zugegriffen werden.Verbindung zu einem Server, der innerhalb der Sandbox läuft
Du kannst dich mit einem Server verbinden, der innerhalb der Sandbox läuft, indem du die zuvor beschriebene Methode verwendest. Starte beispielsweise einen schlanken HTTP-Server auf Port 3000, um Dateien aus seinem Startverzeichnis bereitzustellen.Maskieren von Host-Headern in Anfragen
Du kannst die OptionmaskRequestHost / mask_request_host verwenden, um den Host-Header anzupassen, der an Dienste gesendet wird, die innerhalb der Sandbox laufen. Das ist nützlich, wenn deine Anwendung erwartet, dass Anfragen einem bestimmten Host-Format folgen.
${PORT} in der Maske durch die tatsächliche Portnummer des angesprochenen Dienstes ersetzt.