2

特定のアプリケーションのすべてのネットワークパケット(IPパケット)をダンプしてから(ダムNICのように)ドロップして、パケットが実際にNICを通過しないようにします。これらはすべて、アプリケーションを意識せずに実行されます。(これは、アプリケーションがパッケージが正常に送信されたと見なしますが、実際にはドロップされることを意味します。)

これは、ダンプされたデータを別のマシンに送信し、少し変更を加えてそれらのパッケージを再送信できるようにするためです。

プラットフォームはLinuxであり、iptables、netfilter、tap / tunを使用するなど、これを行うにはいくつかの適切な方法が必要だと思います。問題は、ダンプとドロップを1つのアプリケーションに対してのみ実行する必要があることです。このシナリオでルールを設定するにはどうすればよいですか?

最後の手段は、カーネルを変更し、アプリケーションが呼び出すためのいくつかのインターフェースを追加することです。それが唯一の方法ではないことを願っています。

4

1 に答える 1

0

プロセスを起動できる場合は、次のようにします。

1)lxc(Linux Containers)を使用して、アプリケーションを独自のネットワーク名前空間に配置します。そのコンテナに対してのみnetfilterルールを設定できます。必要に応じて、アプリに独自のIPアドレスを与えることができます。

/usr/bin/lxc-execute -n app_container -f my_net_lxc.conf your_application

2)Wuが指摘したように、LD_PRELOADを使用して標準ライブラリをオーバーライドできます。いくつかのラッパー関数にポイントするだけで、アプリケーションからのすべての呼び出しをインターセプトできます。

LD_PRELOAD=/usr/lib/mylib.so your_application
# See here for info: https://github.com/wh5a/ld_preload

3)Gilesが指摘したように、iptablesを使用できます。そのアプリケーション専用の特別なユーザーを作成する必要があります。

# Setup: Add a user and give him some rules
adduser --shell /bin/false --no-create-home tempuser
iptables -A OUTPUT -m owner --uid-owner tempuser -j ACCEPT
# Run your app
sudo -u tempuser your_application

4)ユーザーモードLinuxやQEMMUなどのVMテクノロジーでアプリを実行できます。これにより、複数のレベルで変更/制御できるカーネル全体がアプリに提供されます。

プロセスを起動しなかった場合でも、ptraceを使用してプロセスにアタッチできます。これにより、プロセスが行うすべてのシステムコールを調べることができます。

于 2013-04-16T12:52:58.603 に答える