NGINX ログを収集する
この NGINX パーサーは、JSON 形式と syslog 形式のログを処理します。さまざまなログ形式からフィールドを抽出し、UDM 形式に正規化します。パーサーは、ユーザー ログインや HTTP リクエストなど、サーバー管理とネットワーク アクティビティのメタデータでイベントを拡充します。また、SSH イベントのロジックを処理し、抽出されたデータに基づいて UDM フィールドに入力します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- NGINX が実行され、ログが生成されている
- NGINX ホストマシンへの root アクセス
Google SecOps の取り込み認証ファイルを取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [コレクション エージェント] に移動します。
- Ingestion Authentication File をダウンロードします。Bindplane をインストールするシステムにファイルを安全に保存します。
Google SecOps のお客様 ID を取得する
- Google SecOps コンソールにログインします。
- [SIEM 設定] > [プロファイル] に移動します。
- [組織の詳細情報] セクションから [お客様 ID] をコピーして保存します。
Bindplane エージェントをインストールする
Windows のインストール
- 管理者として コマンド プロンプトまたは PowerShell を開きます。
次のコマンドを実行します。
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux のインストール
- root 権限または sudo 権限でターミナルを開きます。
次のコマンドを実行します。
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
その他のインストール リソース
- その他のインストール オプションについては、こちらのインストール ガイドをご覧ください。
Syslog を取り込んで Google SecOps に送信するように Bindplane エージェントを構成する
構成ファイルにアクセスします。
config.yaml
ファイルを見つけます。通常、Linux では/etc/bindplane-agent/
ディレクトリに、Windows ではインストール ディレクトリにあります。- テキスト エディタ(
nano
、vi
、メモ帳など)を使用してファイルを開きます。
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
自社のインフラストラクチャでの必要性に応じて、ポートと IP アドレスを置き換えます。
<customer_id>
は、実際の顧客 ID に置き換えます。/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 ログファイルの場所を特定する
- 通常、NGINX ログは次の場所に保存されます。
- アクセスログ:
/var/log/nginx/access.log
- エラーログ:
/var/log/nginx/error.log
- アクセスログ:
- 管理者の認証情報を使用して NGINX ホストにアクセスします。
次のコマンドを実行して、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[ 施設] |
直接マッピングされます。 |
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 に設定します |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。