Apps

全般

プロフィール

【返信完了】複数デバイスからのsyslog受信について

kota6年以上前に追加

お世話になります。

先日導入したmomentum Pasteサーバについて、現在PaloAltoからのsyslogを受ける設定としていますが、
これに他のデバイス(McAfee SIEM)からのsyslogを追加で受け取るにはどのように設定したらよいでしょうか。
また、デバイスが送信するsyslogフォーマットにIPやポートがなく、イベント件名と発生時刻のみの場合、
保存されるキャプチャファイルは 「送信元IP,ポート,あて先IP、ポート」のすべてがanyとなるという認識で相違ないでしょうか。


返答 (11)

RE: 複数デバイスからのsyslog受信について - komoriya6年以上前に追加

先日導入したmomentum Pasteサーバについて、現在PaloAltoからのsyslogを受ける設定としていますが、
これに他のデバイス(McAfee SIEM)からのsyslogを追加で受け取るにはどのように設定したらよいでしょうか。

大きく分けまして、2つの方法があります。

  • 1つ目の方法(設定済みのsyslogとは別のファイルとして受信して処理する方法)
    1. syslog-ngの設定を変更し、他のデバイス(McAfee SIEM)からのsyslogを新しいファイルに保存されるように設定する
      /etc/syslog-ng/conf.d/syslog-ng-paste.conf を参照して設定追加する、もしくは、/etc/syslog-ng/conf.d/syslog-ng-paste.conf そのものを変更する
    2. syslog-ngをrestartし、設定変更を反映する
    3. PASTEのconfigのswatchのswatch configのところで、addをクリックし、新しく追加したsyslogのファイルに対応する設定を実施する
      swatchの設定の書式は、設定済みのlocal0.confを参考に記述する
      このswatch設定で指定するdevice_idは、例えばdevice_id=1のものを使用する
      このdevice_id=1のものは、syslogの内容でのfilterを実施しない設定例となっている
    4. PASTEのconfigのswatchのswatch processのところで、restartをクリックし、swatchに設定変更を反映する
  • 2つ目の方法(設定済みのsyslogと同一のファイルに受信して処理する方法)
    1. syslog-ngの設定を変更し、他のデバイス(McAfee SIEM)からのsyslogを設定済みのlocal0.txtファイルにあわせて保存されるように設定する
      /etc/syslog-ng/conf.d/syslog-ng-paste.conf を参照して設定追加する、もしくは、/etc/syslog-ng/conf.d/syslog-ng-paste.conf そのものを変更する
    2. syslog-ngをrestartし、設定変更を反映する
    3. PASTEのconfigのswatchのswatch configのところで、local0.confを選択し、modifyをクリックし、新しく追加したsyslog内容に対応する設定を実施する
      swatchの設定の書式は、設定済みのlocal0.confを参考に記述する
      このswatch設定で指定するdevice_idは、例えばdevice_id=1のものを使用する
      このdevice_id=1のものは、syslogの内容でのfilterを実施しない設定例となっている
    4. PASTEのconfigのswatchのswatch processのところで、restartをクリックし、swatchに設定変更を反映する

PASTEとしては、どちらの方法でも目的は達成できます。

ただし、2つ目の方法の場合、1つのsyslogファイルに複数種類のlogが混ざる形となりますので、
それぞれの種類が特定できるための内容が必要となります。
この意味では、より柔軟にどんなsyslogの内容でも連携がしやすい、という観点で考えますと、1つ目の方法を選択することがよいかもしれません。

特定のデバイスからのlogであることを容易にsyslogの内容から特定できる条件がそろっている場合には、
そもそものsyslogのファイル管理の観点から、どちらの方法を選択するかを決定してください。

また、デバイスが送信するsyslogフォーマットにIPやポートがなく、イベント件名と発生時刻のみの場合、
保存されるキャプチャファイルは 「送信元IP,ポート,あて先IP、ポート」のすべてがanyとなるという認識で相違ないでしょうか。

はい。
対象のログを処理する設定の部分で指定するdevice_idの設定内容のparamsの部分になにも記述していない場合、
なにも絞り込み条件が指定されていない状態での処理となりますので、「送信元IP,ポート,あて先IP、ポート」のすべてがanyとなります。


次の内容が開示いただける場合、具体的な設定の例を示すことができるかもしれません。

  1. 前述のどちらの方法で実現したいか
  2. 具体的なログのサンプル
  3. ログのサンプルの各部分が固定か可変か、などの内容に関するなんらかの説明
  4. 既存の/etc/syslog-ng/conf.d/syslog-ng-paste.conf の内容
  5. 既存のlocal0.txtの内容

RE: 複数デバイスからのsyslog受信について - kota約6年前に追加

ご回答ありがとうございます。

ひとつ大前提をお伝えし忘れていました。
約2年前ほどに導入し、pasteのバージョンは1.4.2です。
syslog-ng関連のディレクトリがサーバ内に存在しない状況です。

RE: 複数デバイスからのsyslog受信について - komoriya約6年前に追加

rsyslogとの連動の状態で利用されているのですね。

その場合でも、考え方や方法の方向性は、同じです。
syslog-ngの記述となっている部分を、rsyslogに置き換えて実施いただくことで、ご要望のことは実現できます。

たとえば、

1つ目の方法(設定済みのsyslogとは別のファイルとして受信して処理する方法)

syslog-ngの設定を変更し、他のデバイス(McAfee SIEM)からのsyslogを新しいファイルに保存されるように設定する
/etc/syslog-ng/conf.d/syslog-ng-paste.conf を参照して設定追加する、もしくは、/etc/syslog-ng/conf.d/syslog-ng-paste.conf そのものを変更する

は、
rsyslogの設定を変更し、他のデバイス(McAfee SIEM)からのsyslogを新しいファイルに保存されるように設定する
/etc/rsyslog.confに例えば次のような設定を追記して反映させる

local0.*                                                /var/log/local0.txt  # ←例えばこういう既存設定
local1.*                                                /var/log/local1.txt  # ←例えばこういう追加設定

このように、ご利用中の古いPASTEのまま設定を変更するなどしてご要望状態に変更することは可能です。
しかし、機能も向上していますし、開発は継続しておりますので、こういった機会に最新のPASTEにupdateすることをお勧めいたします。
ご検討ください。

RE: 複数デバイスからのsyslog受信について - kota約6年前に追加

rsyslogでも設定可能とのことで安心しました
新バージョンは魅力的ですが動作確認などの時間が確保できないため、今回は1.4.2を継続利用しようと思います

以下の内容を提示いたしますので、設定すべき内容について助言をいただきたいです

1.前述のどちらの方法で実現したいか
1つ目の方法で実現したいと考えています

2.具体的なログのサンプル
こちらです

Jun 22 08:31:48 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 17:31:16
Jun 22 08:40:48 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 17:40:16192.168.5.120192.168.4.2000
Jun 22 08:51:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 17:51:09192.168.5.120192.168.4.2000
Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,0,0,icmp

3.ログのサンプルの各部分が固定か可変か、などの内容に関するなんらかの説明
「Jun 22 08:31:48 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;」はSIEMが決め打ちで付与するヘッダ的な部分です
これ以降は組み込みの変数を使ったりしながらかなり自由に設定できます
ヘッダ部分を第1フィールドとして、以降のカンマ区切りの部分は
第2フィールド:JSTの日付時刻
第3フィールド:送信元IPアドレス
第4フィールド:あて先IPアドレス
第5フィールド:送信元IPポート (icmpなどポート番号が無い場合は0が代入される)
第6フィールド:あて先IPポート (icmpなどポート番号が無い場合は0が代入される)
第7フィールド:プロトコル(udp/tcp/icmp のいずれか)

4.既存の/etc/rsyslog.conf,local0.txtの内容
添付します。
rsyslog.confでSIEMからのログを/var/log/siem.log に書き出すよう指定しました。
local0.confについては独自フォーマットのCEF形式のPaloAlto threatログをスクリプトでフォーマット変換しています。

RE: 複数デバイスからのsyslog受信について - komoriya約6年前に追加

1.4.2を継続利用されるのですね。
3.00.00以降のPASTEはCEFにも対応していますので、より簡単に、より低負荷で、より多くの機器と連携ができるようになっています。
PASTEの新しいバージョンへの更新も検討ください。

さて、今回の連携の追加について、添付のファイルを見せていただきました。
現状は次の認識だということであっていますでしょうか。

  1. rsyslogの設定は、追加の連携のための設定も完了しており、それがlocal1で受信し「/var/log/siem.log」に記録する、の行でしょうか
  2. 別のファイルにsyslogで書き込むということですので、既存のlocal0.confは変更の必要がありませんが、追加機器のためのswatchの設定はまだ作成していない、ということでしょうか
  3. ログサンプルは厳密にみると各行のフォーマットが異なるように思いますが、4行目のものを参考に考えればよいでしょうか
  4. 連携する際の絞り込み条件は、sourceIP、destIP、sourcePort、destPortの4つでOKでしょうか
  5. 連携に使用する時刻は、先頭の時刻でなく、syslogメッセージの中ほどに出てくる時刻でしょうか
    先頭の時刻はUTCで、中ほどの時刻はlocaltime(JST)、なのでしょうか

この想定が正しいとしますと、次のイメージで連携ができると思います。

  1. rsyslogの設定はそのままでOKです
    設定の動作への反映が未実施の場合は、反映させてください
  2. swatchの設定は、次のようなものをPASTEのswatchのconfigの機能で、たとえばlocal1.confなどとしてadd機能で追加作成してください
    # logfile /var/log/siem.log
    
    watchfor /McAfee.*;,[^,]+,([^,]+),([^,]+),([^,]+),([^,]+),/
      threshold track_by=$1:$2:$3:$4,type=limit,count=1,seconds=60
      pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 5" 
    
  3. device定義で、次のようにdeviceを登録してください
    1. device_id:5
    2. device_type:McAfee SIEM
    3. format type:csv
    4. time format:%Y/%m/%d %H:%M:%S
    5. params:
      time : 1
      ipsrc : 2
      ipdst : 3
      portsrc : 4
      portdst : 5
      
  4. PASTEのswatch管理機能で、swatchをrestartする

なお、この設定例では、この連携で使用するdevice_idを5として記述しています
すでに5を別の用途で使用しているなどの場合は、空いている別の番号に読み替えて実施ください

こんな感じです。

RE: 複数デバイスからのsyslog受信について - kota約6年前に追加

ご教示いただいた内容でSIEMとの連携ができるようになりました。

ただ、IPアドレスやポート番号が存在しないイベントの場合、SIEMのログ仕様から「::」や「n/a」などpasteの検索条件に一致しない文字が記述され、キャプチャファイルが保存されません。
確実に存在するのはイベント発生時刻のみのため、swatch.confを

watchfor /McAfee.*;,[^,]+/
  threshold track_by=$1,type=limit,count=1,seconds=60
  pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 5" 

として時刻以外の条件をanyで保存しようと考えていますが、この場合デフォルトの65秒間分で120MB近くなってしまいます。
ネットワークを流れるトラフィックの中で「確実にシロだと判明している常時そこそこの流量の通信」があります。
この通信を送信元/あて先IPアドレスを条件として除けばキャプチャファイルが過大になる事を避けられると思うのですが、こういった除外設定は可能でしょうか。

RE: 複数デバイスからのsyslog受信について - komoriya約6年前に追加

まずはSIEMとの連携ができたとのことで、安心いたしました。

「イベント発生時刻のみをユニーク条件としてswatchで重複排除」する場合は、次のように記述します。

watchfor /McAfee.*;,([^,]+)/
  threshold track_by=$1,type=limit,count=1,seconds=60
  pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 5" 

ネットワークを流れるトラフィックの中で「確実にシロだと判明している常時そこそこの流量の通信」があります。
この通信を送信元/あて先IPアドレスを条件として除けばキャプチャファイルが過大になる事を避けられると思うのですが、こういった除外設定は可能でしょうか。

現状、このような内容を実現する機構は、PASTEに実装していません。

少し方向の違う方法であれば、類似の状態を作ることはできるかもしれません。
例えば、次のような方法です。

  • capture filterで特定の通信についてcaptureしないように設定する
    この場合、結果的には、イベント発生時刻のみでpcapを取り出した際に、ある程度サイズが小さくなる効果は期待できます
    しかし、それと同時に、その保存を除外した通信については、そもそも保存がされていない状態となりますので、これをあとで確認することはできない状態となります

もう一つ、方向の違う方法も考えられます。
例えば、次のような方法です。

  • 「IPアドレスやポート番号が存在しないイベント」が、そのSIEMのlogで特定の文字列を含むような場合、これを活用する
    例えば特定の場所に特定の文字列がある場合には、必ずIPアドレスやポート番号が存在する、などの状態が期待できる場合、以下の例のようにその種類のログに限定して
    処理をする、ということもできるかもしれません
    ## paloalto PA CSV format log, THREAT, threshold by src,dst,threat-name,severity(info,low)
    #watchfor /THREAT,[^,]*,[^,]*,[^,]*,([^,]+),([^,]+),([^,]*,){23,23}([^,]+),[^,]*,(informational|low),/
    #       threshold track_by=$1:$2:$4:$5,type=limit,count=1,seconds=60
    #       pipe "/opt/momentum_client/bin/syslog_pcap_save.pl PROBEIP DEVICEID" 
    

    これは、paloaltoの例で、ログの中にinformationやlowがある場合に限定した処理をさせている例です。
    このように、「XXXXX」という文字列が特定の場所に現れる場合には、IPやportで絞り込みを実施するように設定されたdevice_idの設定を使用する、
    「YYYYY」という文字列が特定の場所に現れる場合には、イベント時刻のみで絞り込みを実施するように設定されたdevice_idの設定を使用する、
    というようにマッチさせるログを限定して別々に処理させることができるかもしれません

出力されるログがどの程度自由に調整できるかに依存すると思いますので、これらの方向も考慮して、全体の動きを検討していただくことがよいかもしれません。

RE: 複数デバイスからのsyslog受信について - kota約6年前に追加

対応案のご提示ありがとうございます。

  • capture filterで特定の通信についてcaptureしないように設定する
     これはどのようにして設定するのか、設定例をご教示いただけないでしょうか
  • 「IPアドレスやポート番号が存在しないイベント」が、そのSIEMのlogで特定の文字列を含むような場合、これを活用する
     こちらは今回作成したlocal1.confに、
     イベント発生時刻 IPアドレス ポート番号がすべてある場合
     イベント発生時刻 IPアドレスだけの場合
     イベント発生時刻だけの場合
     といったふうに列挙することで指定した条件に応じて処理が分岐するということなのでしょうか

ログのサンプルは以下の通りです 
各フィールドが空の時、あて先IPは「::」、ソース/あて先ポート番号は「0」が代入されます

Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,0,0
Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;,2018/06/22 18:01:01,192.168.5.22,::,0,0 

ソースIPが空の時はイベントを発生させたホストではなく、ログを送ってきたホストのIPが代入されます
このため、送信元/あて先IP、送信元/あて先ポートの4つがそろってない時はイベント発生時刻でキャプチャ保存せざるを得なさそうです

案1のcapture filterで実現する手法が本環境では適しているように思います

RE: 複数デバイスからのsyslog受信について - komoriya約6年前に追加

capture filterで特定の通信についてcaptureしないように設定する方法

  1. momentum ProbeのWebUIにログインする
  2. 「フィルタ設定」の「フィルタエントリ」に移動する
  3. sampleの内容を参考に、今回の用途に合うように、特定の通信を除外できるように条件指定したフィルタ設定を、「新規作成」機能で定義する

ログの特定の場所の意味が複数あることへの対応方法

PASTEのログの解釈では、特定の場所が特定の意味になるようになっていないと、意図した連携をさせることは困難です。
これまでのやり取りで、ログの内容は自由になる、という話でしたので、これは実現できるのかもしれないと思っています。
たとえば、こういうことを考えました。

  • イベント発生時刻 IPアドレス ポート番号がすべてある場合
    Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_IP_PORT,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,12345,80
  • イベント発生時刻 IPアドレスだけの場合
    Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_IP_NOPORT,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,0,0
  • イベント発生時刻だけの場合
    Jun 22 09:01:28 127.0.0.1 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_NOIP_NOPORT,2018/06/22 18:01:01,192.168.5.22,::,0,0

たとえばこのように、そのログの情報の各場所の意味が一意になるように判定できるための情報をログそのものに持たせることができれば、
それを条件にして連係動作させるdevice_idを変化させる使い方で、意図動作を実現させることができます。

検討してみてください。

RE: 複数デバイスからのsyslog受信について - kota約6年前に追加

capture filter の意味を勘違いしておりました。さすがに『プローブでそもそも「確実にシロだと判明している通信」自体を全くキャプチャしない』
という訳にはいきませんので「ログの様式で条件分岐して保存内容を変更する」方法を採る必要があります。
条件分岐させるには、各条件ごとに

watchfor ~
       threshold ~
       pipe ~

の3行を記述すればよいのでしょうか。
また、条件ごとに個別の設定ファイルを作るのか、それとも1ファイルに並べて記述できるのかもご教示ください。
よろしくお願いいたします。

RE: 複数デバイスからのsyslog受信について - komoriya約6年前に追加

PASTEでは、PASTE機器上で保存された段階での1つのログファイルに対して、1つのswatchの設定、というように使用することを想定しています。

1つの機器から送出される、異なる書式のログを処理する場合、通常は1つのswatch設定に記載して利用することになります。
通常1つの機器からは、同一の送信元IP・同一のfacility、で送出されるようにすることが多いと思われるためです。
ということで、syslog送出側がどのように動作するかによります。

また、PASTEのsyslogサーバの受信のための設定によってもどのような範囲が1つのログファイルとなるのかは変化しますので、そういった意味ではやはり全体の設定の組み合わせによるといえます。

条件分岐させるには、各条件ごとに

watchfor ~
threshold ~
pipe ~

の3行を記述すればよいです。

以下のようなログがPASTE機器の1つのログファイル(/var/log/local1.txt)に届く場合の記述例は、次のようになります。

  • イベント発生時刻 IPアドレス ポート番号がすべてある場合
    Jun 22 09:01:28 192.168.1.11 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_IP_PORT,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,12345,80
  • イベント発生時刻 IPアドレスだけの場合
    Jun 22 09:01:28 192.168.1.11 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_IP_NOPORT,2018/06/22 18:01:01,192.168.5.12,192.168.4.200,0,0
  • イベント発生時刻だけの場合
    Jun 22 09:01:28 192.168.1.11 : McAfee;0F9C:8BB3;Correlation - Medium;Line 1;LOG_NOIP_NOPORT,2018/06/22 18:01:01,192.168.5.22,::,0,0
# logfile /var/log/local1.txt

# threshold by src,dst,srcport,dstport
watchfor /McAfee.*LOG_IP_PORT,[^,]+,([^,]+),([^,]+),([^,]+),([^,]+)/
        threshold track_by=$1:$2:$3:$4,type=limit,count=1,seconds=60
        pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 11" 

# threshold by src,dst
watchfor /McAfee.*LOG_IP_NOPORT,[^,]+,([^,]+),([^,]+)/
        threshold track_by=$1:$2,type=limit,count=1,seconds=60
        pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 12" 

# threshold by msg
watchfor /McAfee.*LOG_NOIP_NOPORT/
        threshold track_by=/LOG_NOIP_NOPORT/,type=limit,count=1,seconds=60
        pipe "/opt/momentum_client/bin/syslog_pcap_save.pl 10.69.100.14 13" 

このように、マッチさせる内容毎に設定を作成し、そのそれぞれに適合する内容をPASTEのdevice設定で設定すると、意図した動作が実現できます。

    (1-11/11)