現在、次の、おそらく標準のセットアップがあります。Snortを実行している物理サーバーがあります。 Snortは、必要に応じてログファイルにログインします。これらのファイルは、Snorbyのデータベースにトラフィックを書き込むbarnyard2によって追跡されます。
Snortとbarnyard2はsystemdサービスとして開始されます。 Snortによるネットワークトラフィックの継続的な分析に加えて、Snortルールを適用して、約1時間ごとに異なるソースからpcapファイルを読み取りたいと思います。
幸い、snortはこの機能を直接提供します。ただし、snort -r foo.pcap
を使用すると、Snortの新しいインスタンスが開始されます。これにより、もちろん新しいログファイルが作成されます。 Barnyard2は、この新しいログファイルを認識し、期待どおりにpcapからのデータを処理します=>ルールは問題なく、pcapトラフィックに対して機能します。ただし、サービスとして実行されているSnortインスタンスからのトラフィックは引き続き古いファイルに書き込まれ、新しいログファイルが存在するため、barnyard2はこれらのパケットを処理しません。
これを回避するために、Snortサービスが他のトラフィックと同じようにパケットを処理できるように、tcpreplay
を使用してpcapを外部インターフェイスに再生しようとしています。残念ながら、この方法で再生された場合、Snortはどのパケットとも一致しません。 snort -r
を介して機能するルールは、それらが正しいことを証明する必要があります。
tcpreplay
を使用する場合、MACアドレスなどを書き換える必要がありますか? pcapトラフィックを読み取れるようにするには、Snortを--enable-non-ether-decoders
パラメーターで再コンパイルする必要があったことを言及する価値があるかもしれません。
解決策は、tcprewrite
を使用して、tcprewrite --dlt=enet
を介してデータリンクフレームを書き換えることでした。この問題は、Snortを--enable-non-ether-decoders
でコンパイルする必要があるのと同じようです。これは、観察された環境のどこかに仮想化が関与していることに起因していると思います。