NGINX ログを収集する
以下でサポートされています。
Google SecOpsSIEM
この NGINX パーサーは、JSON 形式と syslog 形式のログを処理します。さまざまなログ形式からフィールドを抽出し、UDM 形式に正規化します。パーサーは、ユーザーのログインや HTTP リクエストなど、サーバー管理とネットワーク アクティビティのメタデータでイベントを拡充します。また、SSH イベントのロジックを処理し、抽出されたデータに基づいて UDM フィールドにデータを入力します。
始める前に
- Google Security Operations インスタンスがあることを確認します。
- NGINX が実行され、ログが生成されていることを確認します。
- NGINX ホストマシンへの root アクセス権があることを確認します。
Google SecOps 取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [収集エージェント] に移動します。
- 取り込み認証ファイルをダウンロードします。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細] セクションから [お客様 ID] をコピーして保存します。
BindPlane Agent をインストールする
- Windows へのインストールの場合は、次のスクリプトを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Linux へのインストールの場合は、次のスクリプトを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように BindPlane エージェントを構成する
- BindPlane がインストールされているマシンにアクセスします。
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
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 を構成する
NGINX 構成ファイル(
/etc/nginx/nginx.conf
など)を開きます。sudo vi /etc/nginx/nginx.conf
構成を編集し、
<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; }
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 を使用して解析し、time 、method 、target_path 、protocol 、response_code 、referral_url 、user_agent 、target_ip 、target_host 、cache を抽出します。 |
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」に設定され、terminal や protocol などの他のフィールドに基づいて上書きされる可能性があります。メインの 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
- デフォルトのパーサーを作成し、お客様固有のパーサーを削除しました。
- パーサーの初回リリース。