NGINX ログを収集する

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

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

始める前に

次の前提条件を満たしていることを確認します。

  • Google SecOps インスタンス
  • NGINX が実行され、ログが生成されている
  • NGINX ホストマシンへの root アクセス

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

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

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

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

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

Windows のインストール

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

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

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
    

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

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

  1. 構成ファイルにアクセスします。

    1. config.yaml ファイルを見つけます。通常、Linux では /etc/bindplane-agent/ ディレクトリに、Windows ではインストール ディレクトリにあります。
    2. テキスト エディタ(nanovi、メモ帳など)を使用してファイルを開きます。
  2. config.yaml ファイルを次のように編集します。

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'NGINX'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. 自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。

  4. <customer_id> は、実際の顧客 ID に置き換えます。

  5. /path/to/ingestion-authentication-file.json の値を、Google SecOps の取り込み認証ファイルを取得するで認証ファイルを保存したパスに更新します。

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

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

    sudo systemctl restart bindplane-agent
    
  • Windows で Bindplane エージェントを再起動するには、Services コンソールを使用するか、次のコマンドを入力します。

    net stop BindPlaneAgent && net start BindPlaneAgent
    

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

  1. 通常、NGINX ログは次の場所に保存されます。
    • アクセスログ: /var/log/nginx/access.log
    • エラーログ: /var/log/nginx/error.log
  2. 管理者の認証情報を使用して NGINX ホストにアクセスします。
  3. 次のコマンドを実行して、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[施設] 直接マッピングされます。
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 terminalsshd または ssh の場合、またはメインの grok パターンが一致しない場合は、TCP に設定します。
principal.asset_id terminalsshd または ssh の場合、GCP.GCE:0001 に設定します。メインの grok パターンが一致しない場合は GCP.GCE:0002 に設定します
extensions.auth.type terminalsshd または ssh の場合、MACHINE に設定します

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