cgroups を使用したネットワーク アカウンティングの方法

cgroups を使用したネットワーク アカウンティングの方法

プロセス グループのネットワーク統計を取得しようとしています。私の知る限り、Linux での複雑なネットワーク アカウンティングは通常、netfilter/iptables のアカウンティング インフラストラクチャを使用して行われます。

このようなグループに継承を持たせたいので、それcgroupsが良い一致になると思います。

classid私の最善のアイデアは、iptables を -controllerを使用して設定できるものと一致させることですnet_cls

しかし、どうやらiptablesはセットこの値は を介し​​て取得されます--set--class

それで、Linux 上のプロセス グループの (複雑かつ柔軟な) ネットワーク アカウンティングとログ記録を取得する優れた方法はあるのでしょうか?

答え1

とても良い質問ですね!ありがとうございます。古い質問ですが、ここにいる人たちの役に立つと思います


A. tc で cgroups を使用できます。これについては聞いたことがありませんでしたが、グーグルで検索すると次のことがわかりました。

net_cls — このサブシステムは、ネットワーク パケットにクラス識別子 (classid) のタグを付けます。これにより、Linux トラフィック コントローラー (tc) は、特定の cgroup タスクから発信されたパケットを識別できます。

これによると、tc を使用してそこから統計を取得する必要があります (多くのツールが利用可能です)。

http://patchwork.ozlabs.org/patch/194809/

Alexey に連絡してください。彼が助けてくれるかもしれません :)


B. 統計には SELinux と iptables を使用できますが、cgroups を使用して帯域幅を制限します。私はこのアプローチの方が好きです。tc は場合によっては見栄えが悪く、統合には最適ではありません。

SELinux にはネットワーク用のフックがあり、プロセス ラベルに従って各パケットに追加のデータをラベルとして割り当てることができます。また、別のシステムに送信したり、フィルタリング/ログ記録/統計を取得したり、SECMARK を使用して iptables でできることをすべて実行することもできます。

http://selinuxproject.org/page/NB_Networking

SELinux にまだ慣れていない場合は、RedHat/Fedora ガイドの「Security-Enhanced Linux」と「SELinux FAQ」を読むことをお勧めします。さらに、Daniel J. Walsh (Dan Walsh) による非常に優れた説明とガイド、ブログ投稿がありますので、Google で検索してください。

また、初心者にとって非常に良い(そしてより良い)出発点は、YouTube の次のビデオです。必要なことをすべて理解するのに 3 時間ほどで十分だと思います。

  • 誰でも使える SELinux - ポール・ウェイパー
  • システム管理者のための SELinux - Paul Wayper

SELINUXは簡単です、恐れることはありません

答え2

最新のカーネルでは、iptables 内の cgroup と直接一致させることができます。以下を参照してください。http://lwn.net/Articles/569678/

メインラインカーネルに組み込まれました。

関連情報