2011-02-03 11 views
0

入ってくるパケットが入っていて、ローカルで処理されている場合は、 にイベントが通知されますか?netfilterイベントがローカルで処理されたパケット(netfilter Cカーネルモジュールコード)

現在、NF_IP_LOCAL_INフックを使用しています。しかし、これは、インターフェイス宛てのすべてのパケットを与えるように見えます。たとえば、tcpパケットXがポート5000に送信され、ポート5000で受信待ちのソケットがあるとします。このイベントを受信したいとします。

明確にするために、私はパケットXイベントを受信したいだけです。ローカルで処理されない他のすべてのパケット(つまり、ICMP宛先に到達できないパケットは通知されたくありません)

+0

ポート5000でリッスンするプロセスがある場合は通知を受け取り、プロセスがリッスンしていない場合は通知されません。それはネットフィルタの知識の外です。 – ninjalj

+0

@ninjaljどうやって接続を追跡するの?それは、現在再生中のリスニングソケットを追跡しませんか? – ajpyles

+0

@ajpyles:いいえ、TCPセグメントの見た目に基づいて推測されたTCP状態を追跡します。 – ninjalj

答えて

1

NetfilterはL3/L4に存在するため、L4までの情報にしかアクセスできません。 OTOHのLSM(Linux Security Modules)には、socket_recvmsgを含むほとんどすべてのフックがあります。あなたが興味のあるパケットに対してのみ呼び出されるべきだと思います。

これはあなたの状況によって異なります。あなたの環境ですでにLSMが動作していますか?答えが「はい」の場合、目的に合ったLSMのポリシーを作成して挿入できますか?

+0

これは興味深いですLSMの意味を明確にすることはできますか? – ajpyles

+0

@ajpyles:展開略語。 LSMの例はSelinuxです。 – ninjalj

+0

ありがとうございます! – ajpyles

0

まあ、インタフェースはloでなければなりません。

なぜLOCAL_INフックがあなたを満足させないのか分かりません。

+0

たとえば、ポート5000にリスニングソケットしかないとします。パケットXはポート5000に入り、パケットYは5001に入ります。両方のイベントはLOCAL_INフックに表示されます。しかし、私はちょうどパケットXが(ローカルで処理されるので)入ってくるイベントを取得したいと思います。 – ajpyles

+1

「ソケット」一致モジュール(xt_socket.c)があります。多分それが助けになるでしょう。 – adobriyan

関連する問題