pfSense ログを収集する

以下でサポートされています。

このドキュメントでは、Bindplane を使用して pfSense ログを Google Security Operations に取り込む方法について説明します。

pfSense は、FreeBSD ベースのオープンソースのファイアウォールとルーター ソフトウェア ディストリビューションです。ステートフル パケット フィルタリング、VPN、トラフィック シェーピング、NAT、DHCP サーバー、DNS フォワーダー、侵入検知機能を提供し、これらはすべてウェブベースのインターフェースで管理されます。パーサーは、pfSense syslog 形式のログからフィールドを抽出します。grok を使用してログ メッセージを解析し、これらの値を統合データモデル(UDM)にマッピングします。また、イベントのソースとタイプのデフォルトのメタデータ値も設定します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • Windows Server 2016 以降、または systemd を使用する Linux ホスト
  • プロキシの背後で実行している場合は、Bindplane エージェントの要件に従ってファイアウォール ポートが開いていることを確認します。
  • pfSense ウェブ インターフェースへの特権アクセス

Google SecOps の取り込み認証ファイルを取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [コレクション エージェント] に移動します。
  3. Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。

Google SecOps のお客様 ID を取得する

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [プロファイル] に移動します。
  3. [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。

Bindplane エージェントをインストールする

次の手順に沿って、Windows または Linux オペレーティング システムに Bindplane エージェントをインストールします。

Windows のインストール

  1. 管理者としてコマンド プロンプトまたは PowerShell を開きます。
  2. 次のコマンドを実行します。

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sc query observiq-otel-collector
    

サービスは RUNNING と表示されます。

Linux のインストール

  1. root 権限または sudo 権限でターミナルを開きます。
  2. 次のコマンドを実行します。

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. インストールが完了するまで待ちます。

  4. 次のコマンドを実行して、インストールの内容を確認します。

    sudo systemctl status observiq-otel-collector
    

サービスが [アクティブ(実行中)] と表示されます。

その他のインストール リソース

その他のインストール オプションとトラブルシューティングについては、Bindplane エージェントのインストール ガイドをご覧ください。

Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する

構成ファイルを見つける

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

構成ファイルを編集します。

  • config.yaml の内容全体を次の構成に置き換えます。

    receivers:
        udplog:
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            customer_id: 'YOUR_CUSTOMER_ID'
            endpoint: malachiteingestion-pa.googleapis.com
            log_type: 'PFSENSE'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

構成パラメータ

  • 各プレースホルダを次のように置き換えます。

    • レシーバーの構成:

      • udplog: UDP Syslog には udplog、TCP Syslog には tcplog を使用します。
      • 0.0.0.0: リッスンする IP アドレス(すべてのインターフェースでリッスンする場合は 0.0.0.0
      • 514: リッスンするポート番号(標準の syslog ポート)
    • エクスポータの構成:

      • creds_file_path: 取り込み認証ファイルのフルパス:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: 「顧客 ID を取得する」セクションの顧客 ID
      • endpoint: リージョン エンドポイント URL:
        • 米国: malachiteingestion-pa.googleapis.com
        • ヨーロッパ: europe-malachiteingestion-pa.googleapis.com
        • アジア: asia-southeast1-malachiteingestion-pa.googleapis.com
        • 完全なリストについては、リージョン エンドポイントをご覧ください。
      • log_type: Chronicle に表示されるログタイプ(PFSENSE

構成ファイルを保存する

  • 編集後、ファイルを保存します。
    • Linux: Ctrl+OEnterCtrl+X の順に押します。
    • Windows: [ファイル>保存] をクリックします。

Bindplane エージェントを再起動して変更を適用する

  • Linux で Bindplane エージェントを再起動するには、次のコマンドを実行します。

    sudo systemctl restart observiq-otel-collector
    
    1. サービスが実行されていることを確認します。

        sudo systemctl status observiq-otel-collector
      
    2. ログでエラーを確認します。

        sudo journalctl -u observiq-otel-collector -f
      
  • Windows で Bindplane エージェントを再起動するには、次のいずれかのオプションを選択します。

    • 管理者としてコマンド プロンプトまたは PowerShell を開きます。

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • サービス コンソール:

      1. Win+R キーを押し、「services.msc」と入力して Enter キーを押します。
      2. observIQ OpenTelemetry Collector を見つけます。
      3. 右クリックして [再起動] を選択します。

      4. サービスが実行されていることを確認します。

        sc query observiq-otel-collector
        
      5. ログでエラーを確認します。

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

pfSense で Syslog 転送を構成する

pfSense は FreeBSD で動作し、リモート syslog 転送など、すべての構成タスク用のウェブベースのインターフェースを提供します。

  1. pfSense ウェブ インターフェースにログインします。
  2. [Status] > [System Logs] > [Settings] に移動します。
  3. [Remote Logging Options] セクションに移動します。
  4. [リモート ロギングを有効にする] を選択します。
  5. 次の構成の詳細を指定します。
    • 送信元アドレス: [任意](または特定のインターフェース)を選択します。
    • IP Protocol: [IPv4] を選択します。
    • リモートログサーバー: 最初の空欄に「BINDPLANE_IP:514」と入力します。BINDPLANE_IP は、Bindplane エージェント ホストの IP アドレスに置き換えます。
  6. [リモート Syslog のコンテンツ] セクションで、転送するログカテゴリを選択します。
    • システム イベント
    • ファイアウォール イベント
    • DNS イベント(Resolver/unbound、Forwarder/dnsmasq)
    • DHCP イベント(DHCP サービス)
    • PPP イベント
    • 認証イベント(ポータル認証、RADIUS)
    • VPN イベント(IPsec、OpenVPN、L2TP)
    • Gateway Events(Gateway モニター)
    • ルーティング イベント(ルーティング デーモン)
    • NTP イベント
    • パッケージ(インストール済みパッケージ)
  7. [保存] をクリックします。
  8. Bindplane エージェントのログを確認して、syslog メッセージが送信されていることを確認します。

UDM マッピング テーブル

ログフィールド UDM マッピング 論理
アプリケーション principal.application 値は、grok パターンを使用してログ メッセージから抽出されます。syslog メッセージの場合、通常、アプリケーション名はホスト名とタイムスタンプの後にあります。
コマンド principal.process.command_line ログがコマンド実行を示している場合、説明フィールドから抽出されます。
説明 metadata.description 説明フィールドは、syslog-ng アプリケーション ログを除き、UDM メタデータの説明にマッピングされます。syslog-ng アプリケーション ログでは、metadata.description にマッピングされます。DHCP イベントの場合、説明の先頭に dhcp_type が付加されます。
dhcp_type metadata.product_event_type DHCP メッセージ タイプ(例: DHCPDISCOVER、DHCPOFFER)が抽出され、マッピングされます。
ホスト intermediary.hostname OR intermediary.ip ホストの値が有効な IP アドレスの場合、intermediary.ip にマッピングされます。それ以外の場合は、intermediary.hostname にマッピングされます。
ホスト principal.hostname、principal.asset.hostname プリンシパル IP が存在しない場合、ホストはプリンシパル ホスト名として扱われます。
mac principal.mac、network.dhcp.chaddr DHCP リクエストに関連付けられた MAC アドレスが抽出され、マッピングされます。
src_ip principal.ip、principal.asset.ip Grok パターンを使用して、特定のログ形式から抽出されます。
src_mac principal.mac Grok パターンを使用して、特定のログ形式から抽出されます。
dst_mac target.mac Grok パターンを使用して、特定のログ形式から抽出されます。
timestamp metadata.event_timestamp タイムスタンプはログ メッセージから抽出され、UDM タイムスタンプ形式に変換されます。タイムゾーン情報(tz)は、利用可能な場合、変換前にタイムスタンプに追加されます。
timestamp_no_year metadata.event_timestamp 年を含まないタイムスタンプが存在する場合は、解析され、解析プロセス中に現在の年が追加されます。
ユーザー principal.user.userid イベントに関連付けられたユーザー名が抽出され、マッピングされます。
column1 security_result.rule_id 説明が CSV 形式の場合、最初の CSV 列からマッピングされます。
column6 security_result.rule_type 説明が CSV 形式の場合、6 番目の CSV 列からマッピングされます。
column7 security_result.action 説明が CSV 形式の場合、7 番目の CSV 列からマッピングされます。「BLOCK」または「ALLOW」に変換されます。
column8 network.direction 説明が CSV 形式の場合、8 番目の CSV 列からマッピングされます。「INBOUND」または「OUTBOUND」に変換されます。
column13 network.ip_protocol(UDP または ICMP の場合) 説明が CSV 形式で、プロトコルが UDP または ICMP の場合、13 番目の CSV 列からマッピングされます。TCP/UDP イベントの場合、キー「Id」を持つ追加フィールドの作成に使用されます。
column16 principal.ip、principal.asset.ip(IPv6 で column9 が 6 の場合) 説明が CSV 形式で、column9 が 6 の場合、16 番目の CSV 列からマッピングされます。TCP/UDP イベントの場合、column9 が 4 の場合はプロトコルの識別に使用されます。
column17 target.ip、target.asset.ip(IPv6 で ip_failure ではない場合) 説明が CSV 形式で、column9 が 6 で、値が有効な IP の場合、17 番目の CSV 列からマッピングされます。TCP/UDP イベントの場合、プロトコルの識別に使用されます。
column18 principal.port(UDP の場合) 説明が CSV 形式で、プロトコルが UDP の場合、18 番目の CSV 列からマッピングされます。TCP/UDP イベントの場合、network.received_bytes にマッピングされます。
column19 target.port(UDP の場合) 説明が CSV 形式で、プロトコルが UDP の場合、19 番目の CSV 列からマッピングされます。DHCP イベントの場合、network.dhcp.yiaddr にマッピングされます。他のイベントでは、principal.ip、principal.asset.ip にマッピングされます。
column20 additional.fields(キー: 「data_length」)(UDP の場合) 説明が CSV 形式で、プロトコルが UDP の場合、20 番目の CSV 列からマッピングされます。他のイベントの場合、target.ip、target.asset.ip にマッピングされます。
column21 principal.port(TCP/UDP の場合) 説明が CSV 形式で、プロトコルが TCP または UDP の場合、21 番目の CSV 列からマッピングされます。
column22 target.port(TCP/UDP の場合) 説明が CSV 形式で、プロトコルが TCP または UDP の場合、22 番目の CSV 列からマッピングされます。
column23 additional.fields(キー: 「data_length」)(TCP/UDP の場合) 説明が CSV 形式で、プロトコルが TCP または UDP の場合、23 番目の CSV 列からマッピングされます。
column24 additional.fields(キー: 「tcp_flags」)(TCP の場合) 説明が CSV 形式で、プロトコルが TCP の場合、24 番目の CSV 列からマッピングされます。
column25 additional.fields(キー: "sequence_number")(TCP/UDP の場合) 説明が CSV 形式で、プロトコルが TCP または UDP の場合、25 番目の CSV 列からマッピングされます。
column29 additional.fields(キー: 「tcp_options」)(TCP の場合) 説明が CSV 形式で、プロトコルが TCP の場合、29 番目の CSV 列からマッピングされます。
compression_algo additional.fields(キー: 「Compression Algorithm」) 説明フィールドから抽出され、追加フィールドとして追加されました。
降順 metadata.description メッセージ フィールドから抽出され、説明として使用されます。
principal_ip principal.ip、principal.asset.ip 説明フィールドから抽出され、プリンシパルの IP アドレスを表します。
principal_username principal.user.userid 説明フィールドから抽出され、プリンシパル ユーザー名を表します。
ステータス security_result.detection_fields(キー: 「status」) 説明フィールドから抽出され、セキュリティ結果内の検出フィールドとして追加されます。
target_host target.hostname、target.asset.hostname 説明フィールドから抽出され、ターゲット ホスト名を表します。
src_port principal.port 説明フィールドから抽出され、送信元ポートを表します。さまざまなログフィールドとパーサー ロジックに基づいて決定されます。NETWORK_CONNECTION、NETWORK_DHCP、STATUS_UPDATE、GENERIC_EVENT のいずれかになります。「PFSENSE」にハードコードされています。「PFSENSE」にハードコードされています。「PFSENSE」にハードコードされています。DHCP イベントの場合は「DHCP」に設定されます。DHCPDISCOVER と DHCPREQUEST の場合は「BOOTREQUEST」、DHCPOFFER と DHCPACK の場合は「BOOTREPLY」に設定します。dhcp_type フィールドに基づいて「DISCOVER」、「REQUEST」、「OFFER」、「ACK」に設定します。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。