web-dev-qa-db-ja.com

グレイログ:パイプラインルールのフィールドが検索データに表示されない

システムログとSnortアラートのGraylogを試しています。例 ここ に従ってsnortアラートをGraylogに取り込み、別のIDSログソース用に別のストリーム、パイプライン、ルールを追加しました。基本的にSnortの例をコピーし、正規表現を変更して、新しいログソースから関連フィールドを抽出しました。 [検索]タブからメッセージを選択し、[ストリームに対してテスト]を選択すると、新しい正規表現は正常にテストされます。グレイログの上部にあるStreamsメニュー項目から選択すると、メッセージも新しいストリームの下に表示されます。

パイプラインルールでは、set_field()関数を使用して、正規表現から一致するグループの値を割り当てます。 set_field()を使用してルールに9つのフィールドがありますが、いずれも検索データに表示されていません。どうしてこれなの? GELFの例のように、最初にadd_field()を使用する必要がありますか? set_field()が自動的にそれを行うと想定していました。これは、上記のリンクのsnortの例が機能する方法です。以下に、GraylogのIDropsストリームに添付されているパイプラインルールを添付しました。

rule "Extract IDropS fields"
when
  has_field("message")
then
  let m = regex("^([a-z]+)\\s.*(TCP|UDP|ICMP)\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5})\\s([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}):(\\d{1,5}).*SnortSid.*:([0-9]+):([0-9]+)\\s(.*)$", to_string($message.message));

  set_field("snort_alert", false);

  set_field("sd_Host", m["0"]);
  set_field("sd_proto", m["1"]);
  set_field("sd_src", m["2"]);
  set_field("sd_sport", m["3"]);

  set_field("sd_dst", m["4"]);
  set_field("sd_dport", m["5"]);
  set_field("sd_sid", (m["6"]));
  set_field("sd_rev", m["7"]);

  set_field("sd_desc", m["8"]);
end
1
Server Fault

問題は、Configurations画面でMessage Processors Configurationの順序を変更する必要があることである可能性があります。

デフォルトではGeoIP Processor > Pipeline Processor > Message Filter Chainです。

パイプラインの使用法に関するGreylogの公式ドキュメント の「メッセージプロセッサの構成」に記載されているように、これをMessage Filter Chain > Pipeline Processor > GeoIP Processorに変更する必要があります。

2.1で数週間動作させた後、新しくインストールした2.2Graylogでこれを行うのを忘れました。症状はあなたと同じで、snortストリームルールとパイプラインルールが一致し、シミュレーションは機能しましたが、実際にはフィールドが設定されておらず、エラーの兆候もありませんでしたが、不思議なことに、パイプラインをデフォルトの「すべてのメッセージ」ストリームに接続すると機能します。私は欲しくない。ここで、このメッセージプロセッサの順序を変更して、snortパイプラインが期待どおりに機能するようにしました。

2
Dan Slatford

それが正しい方法かどうかはわかりませんが、すべてのパイプラインルールをデフォルトストリーム(システム/パイプライン>パイプライン>デフォルトストリーム)に追加しました>接続を編集..次にカスタムパイプラインを追加)すると、すべてのフィールドが検索データに表示され始めました。

0
Server Fault