Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
NetworkSandboxEngine — nftablesルールをテストするための決定論的ネットワークサンドボックス。一時的なLinuxネットワーク名前空間(netns)とScapyを使用して、ファイアウォールロジックを安全に検証します。 | Kitploit
ツール/GitHubGitHub/onyks-os/networksandboxengine
防御ツールパケットスニッフィングと分析スクリプトと自動化構成監査ネットワークセキュリティDevSecOps
GitHubonyks-os/networksandboxengine

NetworkSandboxEngine

nftablesルールをテストするための決定論的ネットワークサンドボックス。一時的なLinuxネットワーク名前空間(netns)とScapyを使用して、ファイアウォールロジックを安全に検証します。

リポジトリを見る
251日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
ウェブサイト

Network Sandbox Engine (NSE)

分離されたネットワーク名前空間内で決定論的な nftables ファイアウォールテスト を行うための Linux エンジン。

Linux Python CI Status Documentation PyPI License

Why NSE? • Features • Requirements • Installation • Quickstart • How It Works • Project Structure


Network Sandbox Engine Interface


Why NSE?

稼働中の Linux システム上でファイアウォールルールセットをテストすることには重大なリスクが伴います。不正なルールは SSH 管理セッションを切断したり、テスト中に平文トラフィックを漏洩させたり、ホスト上に孤立したファイアウォールテーブルを残したりする可能性があります。

Network Sandbox Engine (NSE) は、安全で再現可能なテストハーネスを提供します。一時的な Linux ネットワーク名前空間を構築し、仮想イーサネットペアを接続し、nftables ルールセットをコンパイルし、Scapy を使用して合成レイヤー2およびレイヤー3パケットを注入します。すべての評価はサンドボックス名前空間内で行われ、ホストのファイアウォール状態は一切変更されません。

主要なアーキテクチャ特性:

  • ホストへの変更ゼロ: ルールセットは一時的なサンドボックス名前空間 (nse_<uuid>) にのみロードされ、ティアダウン時に完全に削除されます。
  • 自己検証オラクル: 各実行では、テストパケットの前に カナリア パケットを、その後にもう一度注入し、両方のカーネルトレースが観測された場合にのみ結果を報告します。オラクル契約を参照してください。
  • デュアルスタックとトポロジー: IPv4 および IPv6 トラフィックのネイティブサポートに加え、ルーター、NAT、転送ルールセットの検証のためのマルチ名前空間ゲートウェイトポロジーを提供します。
  • 小さく監査可能な表面: 1つのパッケージ、Web サーバーなし、JavaScript なし。nse/ は約1150ステートメントで、テストカバレッジは98%です。

root 権限が必要

NSE はネットワーク名前空間を作成し、nftables ルールセットをロードし、カーネルトレースイベントを読み取るため、root として実行されます。ソケット、ポート、RPC エンドポイントのいずれも開きません。これは呼び出して使用するライブラリおよび CLI であり、実行期間中のみ特権を保持します。

バージョン 2.1.0 では、以前のリリースに同梱されていた FastAPI/Svelte Web インターフェースが削除されました。このインターフェースは 2.0.0 以降、root としてインプロセスで実行されており、テストツールとしては大きな攻撃面となっていました。必要であれば、コードはタグ v2.0.0 の git 履歴に残っています。


The oracle contract

ファイアウォールテストは否定的な主張 — 「このパケットは通過しなかった」 — であり、計測器が正常に動作していることが確認されない限り、否定的な主張には何の価値もありません。カーネルに一度もアタッチしなかったトレースモニターと、すべてをブロックしたファイアウォールは、バイト単位で同一の出力を生成します。

したがって NSE は、測定したことを示せない判定を報告することを拒否します:

カナリアパケットはトレース ID によって結果から除外されるため、判定ストリームに現れることはありません。

スイートはこれを主張するのではなく、成り立つことを証明します。make test-blind はパーサーに何も理解させないように強制し、ランナーが非ゼロで終了しない限りビルドは失敗します。このジョブは毎回のプッシュで CI 上で実行されます。


Features

  • インプロセスエンジン: 直接的な Python API (run_test_pipeline) が構造化された Pydantic モデル (TestRequest、TraceEvent) を返します。
  • Scapy パケット注入: 任意の TCP (カスタム SYN、ACK、FIN、RST フラグ付き)、UDP、ICMP、ICMPv6 パケットを生成します。
  • 分離されたトポロジー:
    • Simple: 単一のサンドボックス名前空間 (nse_<id>) がホストに直接接続されます。
    • Gateway: 転送および NAT テスト用のルーター (nse_router_<id>) とサーバー (nse_server_<id>) のチェーン。
  • 自動クリーンアップ: 起動時のスイープにより、以前の中止された実行から残った名前空間と veth ペアを検出して削除します。ティアダウンには指数バックオフ再試行が含まれます。
  • CLI YAML テストランナー: 自動化された CI/CD パイプライン用の宣言的な YAML テストスイートを実行します (nse-runner)。誤った判定の場合および観測に失敗した判定の場合に非ゼロで終了します。
  • 厳格な品質基準: 完全な静的型チェック (mypy --strict)、アーキテクチャ境界の強制 (import-linter)、ruff フォーマット、カバレッジラチェット (make test-cov、下限98%)。

Requirements

  • Linux OS (ネットワーク名前空間と nftables をサポートするカーネル 5.4 以降)
  • Python 3.10+
  • nftables (nft)
  • iproute2 (ip)
  • root 権限 (ip netns およびカーネルトレース操作に必要)

Debian または Ubuntu システムの場合:

root@kitploit:~
sudo apt update && sudo apt install -y nftables iproute2 conntrack

Installation

1. PyPI パッケージ (推奨)

CLI サポート付きのコアエンジンをインストールします:

root@kitploit:~
pip install "network-sandbox-engine[cli]"

2. 手動ソースインストール

ローカル開発の場合:

root@kitploit:~
git clone https://github.com/onyks-os/NetworkSandboxEngine.git
cd NetworkSandboxEngine
make setup

Quickstart

1. ヘッドレス Python ライブラリ

root@kitploit:~
import asyncio
from nse.core.netns_controller import NetnsController
from nse.core.pipeline import run_test_pipeline
from nse.models.test_request import TestRequest, PacketSpec

rules = """
table ip filter {
    chain input {
        type filter hook input priority 0; policy drop;
        tcp dport 80 accept
    }
}
"""

request = TestRequest(
    rules=rules,
    packets=[
        PacketSpec(protocol="tcp", src_ip="10.0.0.1", dst_ip="10.0.0.2", dst_port=80),
        PacketSpec(protocol="tcp", src_ip="10.0.0.1", dst_ip="10.0.0.2", dst_port=22),
    ],
)


async def main():
    controller = NetnsController()
    events = await run_test_pipeline(request=request, controller=controller)
    for evt in events:
        if evt.verdict:
            print(f"[{evt.chain}] Verdict: {evt.verdict}")


asyncio.run(main())

2. YAML テストスイートランナー (CLI)

テストファイル firewall_test.yaml を作成します:

root@kitploit:~
tests:
  - name: "Allow HTTP Port 80, Drop SSH Port 22"
    topology: simple
    rules: |
      table ip filter {
        chain input {
          type filter hook input priority 0; policy drop;
          tcp dport 80 accept
        }
      }
    packets:
      - protocol: tcp
        src_ip: 10.0.0.1
        dst_ip: 10.0.0.2
        dst_port: 80
        expected_verdict: ACCEPT
      - protocol: tcp
        src_ip: 10.0.0.1
        dst_ip: 10.0.0.2
        dst_port: 22
        expected_verdict: DROP

expected_verdict はパケットごとです。未知のキーはデフォルト値ではなく拒否されるため、タイプミスはスイートを失敗させます。書いていない期待値に静かに変わることはありません。

root 権限でスイートを実行します:

root@kitploit:~
sudo nse-runner --file firewall_test.yaml

終了コード: 0 はすべてのパケットが一致。1 は判定が誤っていたまたはエンジンが判定を観測できなかった。オラクルエラーはファイアウォールの失敗とは別に報告されます。これはルールセットではなく測定が壊れたことを意味するためです。

3. コンテナ内で

root@kitploit:~
podman build -t nse .
podman run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW \
    -v "$PWD/firewall_test.yaml:/suite.yaml:ro" nse --file /suite.yaml

ルールのテスト対象となる nftables のバージョンを固定するのに便利です。


How It Works

NSE は Linux カーネルのネットワークサブシステムとトレースインターフェースを、構造化された多段階の実行パイプラインを通じてオーケストレーションします:

root@kitploit:~
graph TD
    subgraph Step1["1. Test Specification"]
        Req["<b>TestRequest</b><br/>ruleset + packets + topology"]
    end

    subgraph Step2["2. Ephemeral Netns Sandbox"]
        direction TB
        Netns["<b>Netns Setup</b><br/>nse_&lt;id&gt; & veth links"]
        RuleEng["<b>Rule Engine</b><br/>validate & load nftables"]
        Inject["<b>Scapy Injector</b><br/>L2/L3 packet injection"]
        NFT["<b>Kernel nftables</b><br/>meta nftrace set 1"]

        Netns --> RuleEng
        RuleEng --> Inject
        Inject --> NFT
    end

    subgraph Step3["3. Trace Evaluation & Oracle"]
        direction TB
        Harvester["<b>Trace Harvester</b><br/>nft monitor trace stream"]
        Oracle["<b>Deterministic Oracle</b><br/>TraceEvents & verdicts"]

        Harvester --> Oracle
    end

    Step1 --> Step2
    Step2 --> Step3
  1. ルールセット検証: RuleEngine.validate() は nft --check -f を使用してルールセットをドライランします。
  2. サンドボックスプロビジョニング: NetnsController が分離されたネットワーク名前空間を作成し、仮想イーサネット (veth) インターフェースを構成します。
  3. トレース初期化: ルールセットがカーネルトレースを有効にして (meta nftrace set 1) 名前空間にロードされます。
  4. パケット注入: ScapyInjector が veth リンクを介して合成フレームを注入します。
  5. 判定の収集: TraceHarvester が nft monitor trace イベントをキャプチャし、構造化された TraceEvent オブジェクトを返します。
  6. ティアダウン: 名前空間と関連するすべての veth インターフェースが自動的に削除されます。

完全な技術仕様については、Technical Architecture Guide を参照してください。


Project Structure

root@kitploit:~
NetworkSandboxEngine/
├── nse/                        # Core PyPI package (network-sandbox-engine)
│   ├── core/                   # Kernel primitives, pipeline, and naming rules
│   ├── models/                 # Pydantic models (TestRequest, PacketSpec, TraceEvent)
│   └── cli/                    # Headless YAML runner entrypoint
├── docs/                       # Architecture specs and MkDocs web documentation
├── tests/                      # Unit, golden file, and privileged e2e tests
│   └── fixtures/nft_trace/     # Golden `nft monitor trace` corpus
├── pyproject.toml              # Build backend configuration
└── Makefile                    # Local automation and CI workflow

Releasing

1つのタグ。git push origin vX.Y.Z がビルドし、Sigstore で署名し、GitHub Release を公開し、TestPyPI にアップロードし、TestPyPI からインストールしてスモークテストし、その後でのみ PyPI にアップロードします。make release-dry でリハーサルできます。

docs/RELEASING.md を参照してください。

Documentation

完全なインタラクティブ Web ドキュメントは以下で利用可能です:
https://onyks-os.github.io/nse/

ドキュメントをローカルでビルドします:

root@kitploit:~
make docs

http://127.0.0.1:8000 でホットリロード付きのドキュメントを配信します:

root@kitploit:~
make docs-serve

Testing & Local CI

静的リンティングとユニットテストを実行します:

root@kitploit:~
make verify

完全なローカル CI 検証を実行します (リンティング、ユニットテスト、フロントエンドビルド、ドキュメントビルド、PyPI スモークテスト、特権統合テストを含む):

root@kitploit:~
make ci-local

License

このプロジェクトは MIT License の下でライセンスされています。

ツールをダウンロード
保証メカニズム
モニターが最初のテストパケットの前にアタッチされていたレディネスカナリアが注入され、そのカーネルトレースが観測されるまで再注入されます。観測がなければ実行もありません。
モニターが最後のテストパケットの後も依然としてアタッチされていた注入後にライブネスカナリアが実行されます。これが見逃された場合、判定ストリームは切り詰められたと宣言されます。
パーサーがカーネルの発言を理解したどのパターンにも一致しないトレース行がカウントされ、カウントがゼロを超える場合はデバッグログではなくエラーとなります。
モニターが静かに死ななかった読み取りループは、それがなぜ終了したか — クリーンストップ、予期しない EOF、タイムアウト、クラッシュ — を記録し、クリーンストップのみが許容されます。
判定の欠落は合格ではないCLI ランナーは、観測された判定の数が期待される数と異なる場合、どちらの方向であっても失敗します。