Перейти к содержимому

Фильтрация трафика по пользователю

Правило iptables с условием owner не работает в песочнице AgentBox, потому что в ядре нет модуля xt_owner. Вместо него используйте выражения nftables meta skuid или meta skgid.

В примере создаётся цепочка для исходящего трафика и выбираются процессы с UID 1000. Правило только считает и пропускает их пакеты — замените действие на нужную вашему приложению фильтрацию.

mjs
import { Sandbox } from "@abox-dev/sdk";

const sandbox = await Sandbox.create();

try {
  await sandbox.commands.run(
    "apt-get update -qq && " +
      "DEBIAN_FRONTEND=noninteractive apt-get install -y -qq nftables",
    { user: "root", timeoutMs: 120_000 },
  );

  const result = await sandbox.commands.run(
    "nft add table inet user_filter && " +
      "nft 'add chain inet user_filter output { type filter hook output priority 0; policy accept; }' && " +
      "nft add rule inet user_filter output meta skuid 1000 counter accept && " +
      "nft list chain inet user_filter output",
    { user: "root" },
  );

  console.log(result.stdout);
} finally {
  await sandbox.kill();
}

Запускайте команды настройки сети от пользователя root. Таблица существует только внутри песочницы и удаляется вместе с ней.