NGINX ログを収集する

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

この NGINX パーサーは、JSON 形式と syslog 形式のログを処理します。さまざまなログ形式からフィールドを抽出し、UDM 形式に正規化します。パーサーは、ユーザーのログインや HTTP リクエストなど、サーバー管理とネットワーク アクティビティのメタデータでイベントを拡充します。また、SSH イベントのロジックを処理し、抽出されたデータに基づいて UDM フィールドにデータを入力します。

始める前に

  • Google Security Operations インスタンスがあることを確認します。
  • NGINX が実行され、ログが生成されていることを確認します。
  • NGINX ホストマシンへの root アクセス権があることを確認します。

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

  1. Google SecOps コンソールにログインします。
  2. [SIEM 設定] > [収集エージェント] に移動します。
  3. 取り込み認証ファイルをダウンロードします。

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

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

BindPlane Agent をインストールする

  1. Windows へのインストールの場合は、次のスクリプトを実行します。
    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
  2. Linux へのインストールの場合は、次のスクリプトを実行します。
    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
  3. その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。

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

  1. BindPlane がインストールされているマシンにアクセスします。
  2. config.yaml ファイルを次のように編集します。

    receivers:
      tcplog:
        # Replace the below port <54525> and IP <0.0.0.0> with your specific values
        listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: auditd
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - tcplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. BindPlane エージェントを再起動して変更を適用します。

    sudo systemctl restart bindplane
    

NGINX ログファイルの場所を特定する

NGINX ログは次の場所に保存されます。 * アクセスログ: /var/log/nginx/access.log * エラーログ: /var/log/nginx/error.log 1. 管理者認証情報を使用して NGINX ホストにアクセスします。1. 次のコマンドを実行して、NGINX ホストのログファイルパスを探します。

  sudo cat /etc/nginx/nginx.conf | grep log

ログを Bindplane に転送するように NGINX を構成する

  1. NGINX 構成ファイル(/etc/nginx/nginx.conf など)を開きます。

    sudo vi /etc/nginx/nginx.conf
    
  2. 構成を編集し、<BINDPLANE_SERVER><BINDPLANE_PORT> を値に置き換えます。

    http {
        access_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_access;
        error_log syslog:server=<BINDPLANE_SERVER>:<BINDPLANE_PORT>,facility=local7,tag=nginx_error;
    }
    
  3. NGINX を再起動して変更を適用します。

    sudo systemctl reload nginx
    

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
_Internal_WorkspaceResourceId target.resource.product_object_id 直接マッピング
Computer principal.asset.hostname 直接マッピング
Facility additional.fields["facility"] 直接マッピング
HostName principal.asset.hostname src_ip が存在しない場合、直接マッピング
ProcessName principal.application 直接マッピング
SeverityLevel security_result.severity 値が「info」の場合、INFORMATIONAL にマッピングされます
SourceSystem principal.asset.platform 値が「Linux」と一致する場合は LINUX にマッピングされます。
SyslogMessage 複数のフィールド grok を使用して解析し、timemethodtarget_pathprotocolresponse_codereferral_urluser_agenttarget_iptarget_hostcache を抽出します。
TenantId additional.fields["TenantId"] 直接マッピング
acct principal.user.user_id 空でないか「?」でない場合、直接マッピング
addr principal.asset.ip 直接マッピング
audit_epoch metadata.event_timestamp 「UNIX」形式を使用してタイムスタンプに変換されます。ナノ秒は元のログ メッセージから抽出されます。
cache additional.fields["cache"] 直接マッピング
collection_time.nanos metadata.event_timestamp.nanos イベント タイムスタンプのナノ秒に使用(利用可能な場合)
collection_time.seconds metadata.event_timestamp.seconds イベント タイムスタンプの秒数に使用されます(利用可能な場合)
data 複数のフィールド データの主要なソース。ログ形式(Syslog、JSON など)に基づいて解析されます。
exe target.process.command_line バックスラッシュと引用符を削除した後に直接マッピング
hostname principal.asset.hostname または principal.asset.ip IP アドレスの場合は、principal.asset.ip にマッピングされます。それ以外の場合は principal.asset.hostname にマッピングされます。
msg metadata.description 説明として直接マッピングされている
node target.asset.hostname 直接マッピング
pid target.process.pid 直接マッピング
protocol network.application_protocol 値が「HTTP」と一致する場合は HTTP にマッピングされます
referral_url network.http.referral_url 空でないか「-」でない場合、直接マッピング
res security_result.action_details 直接マッピング
response_code network.http.response_code 直接マッピングされ、整数に変換される
ses network.session_id 直接マッピング
src_ip principal.asset.ip 直接マッピング
target_host target.asset.hostname 直接マッピング
target_ip target.asset.ip 文字列表現を JSON 配列に変換してから個々の IP を抽出した後、直接マッピング
target_path target.url 直接マッピング
time metadata.event_timestamp 「dd/MMM/yyyy:HH:mm:ss Z」の形式で解析され、タイムスタンプが抽出されます。
user_agent network.http.user_agent 空でないか「-」でない場合、直接マッピング
metadata.event_type 最初は「GENERIC_EVENT」に設定され、terminalprotocol などの他のフィールドに基づいて上書きされる可能性があります。メインの grok パターンが一致しない場合、デフォルトは「USER_UNCATEGORIZED」です。protocol が HTTP で target_ip が存在する場合は「NETWORK_HTTP」、protocol が HTTP で target_ip が存在しない場合「STATUS_UPDATE」に設定します。
metadata.log_type 「NGINX」に設定します。
metadata.product_name 「NGINX」に設定します。
metadata.vendor_name 「NGINX」に設定します。
network.ip_protocol terminal が「sshd」または「ssh」の場合、またはメインの grok パターンが一致しない場合は「TCP」に設定します。
principal.asset_id terminal が「sshd」または「ssh」の場合は、「GCP.GCE:0001」に設定します。メインの grok パターンが一致しない場合は「GCP.GCE:0002」に設定します。
extensions.auth.type terminal が「sshd」または「ssh」の場合は「MACHINE」に設定します。

変更点

2022-09-10

  • デフォルトのパーサーを作成し、お客様固有のパーサーを削除しました。
  • パーサーの初回リリース。