Mengumpulkan log NGINX
Parser NGINX ini menangani log berformat JSON dan syslog. Alat ini mengekstrak kolom dari berbagai format log dan menormalisasinya ke dalam format UDM. Parser memperkaya peristiwa dengan metadata untuk pengelolaan server dan aktivitas jaringan, termasuk login pengguna dan permintaan HTTP. Fungsi ini juga menangani logika untuk peristiwa SSH dan mengisi kolom UDM berdasarkan data yang diekstrak.
Sebelum memulai
- Pastikan Anda memiliki instance Google Security Operations.
- Pastikan NGINX berjalan dan menghasilkan log.
- Pastikan Anda memiliki akses root ke mesin host NGINX.
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Proses Transfer.
Mendapatkan ID pelanggan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Profil.
- Salin dan simpan ID Pelanggan dari bagian Detail Organisasi.
Menginstal Agen BindPlane
- Untuk penginstalan Windows, jalankan skrip berikut:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Untuk penginstalan Linux, jalankan skrip berikut:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Opsi penginstalan tambahan dapat ditemukan di panduan penginstalan ini.
Mengonfigurasi Agen BindPlane untuk menyerap Syslog dan mengirim ke Google SecOps
- Akses komputer tempat BindPlane diinstal.
Edit file
config.yaml
sebagai berikut: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
Mulai ulang Agen BindPlane untuk menerapkan perubahan:
sudo systemctl restart bindplane
Mengidentifikasi lokasi file log NGINX
Log NGINX disimpan di:
* Log akses: /var/log/nginx/access.log
* Log error: /var/log/nginx/error.log
1. Akses host NGINX menggunakan kredensial administratif.
1. Jalankan perintah berikut dan cari jalur file log di host NGINX Anda:
sudo cat /etc/nginx/nginx.conf | grep log
Mengonfigurasi NGINX untuk Meneruskan Log ke Bindplane
Buka file konfigurasi NGINX (misalnya,
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
Edit konfigurasi, ganti
<BINDPLANE_SERVER>
dan<BINDPLANE_PORT>
dengan nilai Anda: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; }
Mulai ulang NGINX untuk menerapkan perubahan:
sudo systemctl reload nginx
Tabel Pemetaan UDM
Kolom Log | Pemetaan UDM | Logika |
---|---|---|
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Dipetakan secara langsung |
Computer |
principal.asset.hostname |
Dipetakan secara langsung |
Facility |
additional.fields["facility"] |
Dipetakan secara langsung |
HostName |
principal.asset.hostname |
Dipetakan langsung jika src_ip tidak ada |
ProcessName |
principal.application |
Dipetakan secara langsung |
SeverityLevel |
security_result.severity |
Dipetakan ke INFORMASI jika nilainya adalah "info" |
SourceSystem |
principal.asset.platform |
Dipetakan ke LINUX jika nilainya cocok dengan "Linux" |
SyslogMessage |
Beberapa kolom | Diurai menggunakan grok untuk mengekstrak time , method , target_path , protocol , response_code , referral_url , user_agent , target_ip , target_host , dan cache |
TenantId |
additional.fields["TenantId"] |
Dipetakan secara langsung |
acct |
principal.user.user_id |
Dipetakan langsung jika tidak kosong atau "?" |
addr |
principal.asset.ip |
Dipetakan secara langsung |
audit_epoch |
metadata.event_timestamp |
Dikonversi menjadi stempel waktu menggunakan format "UNIX". Nanodetik diekstrak dari pesan log asli. |
cache |
additional.fields["cache"] |
Dipetakan secara langsung |
collection_time.nanos |
metadata.event_timestamp.nanos |
Digunakan untuk nanodetik stempel waktu peristiwa jika tersedia |
collection_time.seconds |
metadata.event_timestamp.seconds |
Digunakan untuk detik stempel waktu peristiwa jika tersedia |
data |
Beberapa kolom | Sumber data utama, diuraikan secara berbeda berdasarkan format log (Syslog, JSON, atau lainnya) |
exe |
target.process.command_line |
Dipetakan langsung setelah menghapus garis miring terbalik dan tanda kutip |
hostname |
principal.asset.hostname ATAU principal.asset.ip |
Jika merupakan alamat IP, dipetakan ke principal.asset.ip . Jika tidak, dipetakan ke principal.asset.hostname |
msg |
metadata.description |
Dipetakan langsung sebagai deskripsi |
node |
target.asset.hostname |
Dipetakan secara langsung |
pid |
target.process.pid |
Dipetakan secara langsung |
protocol |
network.application_protocol |
Dipetakan ke HTTP jika nilainya cocok dengan "HTTP" |
referral_url |
network.http.referral_url |
Dipetakan langsung jika tidak kosong atau "-" |
res |
security_result.action_details |
Dipetakan secara langsung |
response_code |
network.http.response_code |
Dipetakan dan dikonversi langsung menjadi bilangan bulat |
ses |
network.session_id |
Dipetakan secara langsung |
src_ip |
principal.asset.ip |
Dipetakan secara langsung |
target_host |
target.asset.hostname |
Dipetakan secara langsung |
target_ip |
target.asset.ip |
Dipetakan langsung, setelah mengonversi representasi string menjadi array JSON, lalu mengekstrak setiap IP |
target_path |
target.url |
Dipetakan secara langsung |
time |
metadata.event_timestamp |
Diurai untuk mengekstrak stempel waktu menggunakan format "dd/MMM/yyyy:HH:mm:ss Z" |
user_agent |
network.http.user_agent |
Dipetakan langsung jika tidak kosong atau "-" |
metadata.event_type |
Awalnya ditetapkan ke "GENERIC_EVENT", lalu berpotensi ditimpa berdasarkan kolom lain seperti terminal dan protocol . Defaultnya adalah "USER_UNCATEGORIZED" jika pola grok utama tidak cocok. Tetapkan ke "NETWORK_HTTP" jika protocol adalah HTTP dan target_ip ada, dan "STATUS_UPDATE" jika protocol adalah HTTP, tetapi target_ip tidak ada |
|
metadata.log_type |
Tetapkan ke "NGINX" | |
metadata.product_name |
Tetapkan ke "NGINX" | |
metadata.vendor_name |
Tetapkan ke "NGINX" | |
network.ip_protocol |
Tetapkan ke "TCP" jika terminal adalah "sshd" atau "ssh", atau jika pola grok utama tidak cocok |
|
principal.asset_id |
Tetapkan ke "GCP.GCE:0001" jika terminal adalah "sshd" atau "ssh". Tetapkan ke "GCP.GCE:0002" jika pola grok utama tidak cocok |
|
extensions.auth.type |
Tetapkan ke "MACHINE" jika terminal adalah "sshd" atau "ssh" |
Perubahan
2022-09-10
- Membuat parser default dan menghapus parser khusus pelanggan.
- Rilis parser awal.