Доступ в интернет
По умолчанию песочницы могут обращаться в интернет. Например, команда внутри песочницы может вызвать HTTPS-адрес:
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create();
try {
const result = await sandbox.commands.run(
"curl -fsS -o /dev/null -w '%{http_code}\\n' https://example.com/",
);
console.log(result.stdout);
} finally {
await sandbox.kill();
}Отключение доступа в интернет
Передайте false в allowInternetAccess для JavaScript или allow_internet_access для Python. Команды и файлы продолжат работать, но песочница не сможет открывать исходящие соединения.
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create({ allowInternetAccess: false });
try {
const result = await sandbox.commands.run("printf 'sandbox is running\\n'");
console.log(result.stdout);
} finally {
await sandbox.kill();
}Разрешение отдельных адресов
Параметры allowOut и denyOut ограничивают исходящий трафик. Следующая конфигурация разрешает HTTPS-запросы к example.com и запрещает остальные адреса:
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create({
network: {
allowOut: ["example.com"],
denyOut: ({ allTraffic }) => [allTraffic],
},
});
try {
const result = await sandbox.commands.run(
"curl -fsS -o /dev/null -w '%{http_code}\\n' https://example.com/",
);
console.log(result.stdout);
} finally {
await sandbox.kill();
}В список разрешений можно добавлять IP-адреса, CIDR-блоки, точные доменные имена и домены с префиксом *.. Доменные правила работают для HTTP на порту 80 и TLS на порту 443. Для других портов используйте IP-адреса и CIDR-блоки.
В denyOut и deny_out нельзя указывать домены. Если один адрес попадает и в разрешающее, и в запрещающее правило, применяется разрешающее.
Обновление работающей песочницы
Сетевые настройки можно заменить без перезапуска песочницы:
import { Sandbox } from "@abox-dev/sdk";
const sandbox = await Sandbox.create();
try {
await sandbox.updateNetwork({ allowInternetAccess: false });
const result = await sandbox.commands.run("printf 'network updated\\n'");
console.log(result.stdout);
} finally {
await sandbox.kill();
}updateNetwork и update_network заменяют всю конфигурацию исходящего трафика. Неуказанные поля очищаются, а не объединяются с прежними настройками.