Mengumpulkan log Elastic Packet Beats
Dokumen ini menjelaskan cara menyerap log Elastic Packet Beats ke Google Security Operations menggunakan Bindplane. Parser pertama-tama menginisialisasi nilai default untuk berbagai kolom yang ditemukan dalam log Elastic Packet Beats. Kemudian, data diekstrak dari pesan log menggunakan kombinasi pola grok
dan filter json
, melakukan konversi jenis data, dan memetakan kolom yang diekstrak ke kolom yang sesuai dalam Model Data Terpadu (UDM) berdasarkan jenis set data peristiwa (misalnya, flow, dns, http, tls, dhcpv4).
Sebelum memulai
Pastikan Anda memenuhi prasyarat berikut:
- Instance Google SecOps.
- Host Windows 2016 atau yang lebih baru, atau Linux dengan
systemd
. - Jika berjalan di belakang proxy, pastikan port firewall terbuka sesuai dengan persyaratan agen BindPlane.
- Akses istimewa ke konsol pengelolaan atau appliance Elastic Packet Beats.
- Logstash diinstal dan dikonfigurasi.
Mendapatkan file autentikasi penyerapan Google SecOps
- Login ke konsol Google SecOps.
- Buka Setelan SIEM > Agen Pengumpulan.
- Download File Autentikasi Penyerapan.
- Simpan file dengan aman di sistem tempat BindPlane akan diinstal.
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
Instal agen Bindplane di sistem operasi Windows atau Linux Anda sesuai dengan petunjuk berikut.
Penginstalan Windows
- Buka Command Prompt atau PowerShell sebagai administrator.
Jalankan perintah berikut:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Penginstalan Linux
- Buka terminal dengan hak istimewa root atau sudo.
Jalankan perintah berikut:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Referensi penginstalan tambahan
Untuk opsi penginstalan tambahan, lihat panduan penginstalan.
Mengonfigurasi agen BindPlane untuk menyerap Syslog dan mengirimkannya ke Google SecOps
Akses file konfigurasi:
- Cari file
config.yaml
. Biasanya, file ini berada di direktori/etc/bindplane-agent/
di Linux atau di direktori penginstalan di Windows. - Buka file menggunakan editor teks (misalnya,
nano
,vi
, atau Notepad).
- Cari file
Edit file
config.yaml
sebagai berikut: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_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: YOUR_CUSTOMER_ID endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization log_type: 'ELASTIC_PACKETBEATS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Ganti port dan alamat IP sesuai kebutuhan di infrastruktur Anda.
- Ganti
YOUR_CUSTOMER_ID
dengan ID pelanggan yang sebenarnya. - Perbarui
/path/to/ingestion-authentication-file.json
ke jalur tempat file autentikasi disimpan di bagian Dapatkan file autentikasi penyerapan Google SecOps.
Mulai ulang agen Bindplane untuk menerapkan perubahan
Untuk memulai ulang agen Bindplane di Linux, jalankan perintah berikut:
sudo systemctl restart observiq-otel-collector
Untuk memulai ulang agen Bindplane di Windows, Anda dapat menggunakan konsol Services, atau memasukkan perintah berikut:
net stop observiq-otel-collector && net start observiq-otel-collector
Mengonfigurasi penerusan Syslog di Elastic Packet Beats
Karena Packetbeat tidak mendukung output syslog langsung, Anda harus menggunakan Logstash sebagai perantara.
Mengonfigurasi Packetbeat untuk mengirim log ke Logstash
- Login ke Konsol Pengelolaan Elastic Packet Beats.
- Buka Setelan > Penerusan Log.
- Klik tombol + Tambahkan atau Aktifkan.
- Berikan detail konfigurasi berikut:
- Nama: Masukkan nama deskriptif (misalnya,
Logstash Output
). - Host: Masukkan alamat IP server Logstash.
- Port: Masukkan port input beats Logstash (biasanya 5044).
- Protocol: Pilih Beats protocol.
- Format: Pilih JSON.
- Zona waktu: Pilih zona waktu UTC untuk konsistensi universal di seluruh sistem.
- Buka bagian Peristiwa, lalu pilih jenis log yang relevan atau semua.
- Nama: Masukkan nama deskriptif (misalnya,
Simpan konfigurasi.
Alternatif: Edit packetbeat.yml secara langsung:
# /etc/packetbeat/packetbeat.yml packetbeat.protocols: - type: dns ports: [53] - type: http ports: [80, 8080, 8000, 5000, 8002] send_headers: true send_all_headers: true - type: tls ports: [443, 993, 995, 5223, 8443, 8883, 9243] - type: dhcpv4 ports: [67, 68] # Enable processors for additional fields processors: - add_network_direction: source: private destination: private internal_networks: - private - community_id: # Send to Logstash using beats protocol output.logstash: hosts: ["LOGSTASH_IP:5044"]
Ganti
LOGSTASH_IP
dengan alamat IP server Logstash Anda.
Mengonfigurasi Logstash untuk meneruskan ke BindPlane menggunakan Syslog
Buat file konfigurasi pipeline Logstash:
sudo nano /etc/logstash/conf.d/packetbeat-to-bindplane.conf
Tambahkan konfigurasi berikut:
# Receive from Packetbeat input { beats { port => 5044 } } # Optional: Add filters for data enrichment filter { # Preserve original message structure mutate { copy => { "@metadata" => "[@metadata_backup]" } } } # Send to BindPlane via syslog output { syslog { host => "BINDPLANE_IP" port => 514 protocol => "udp" rfc => "rfc5424" facility => "local0" severity => "informational" sourcehost => "%{[agent][hostname]}" appname => "packetbeat" procid => "%{[agent][id]}" msgid => "ELASTIC_PACKETBEATS" structured_data => "packetbeat@32473" message => "%{message}" } }
Ganti
BINDPLANE_IP
dengan alamat IP agen BindPlane Anda.
Mulai ulang Logstash untuk menerapkan konfigurasi:
sudo systemctl restart logstash
Tabel pemetaan UDM
Kolom log | Pemetaan UDM | Logika |
---|---|---|
@timestamp | metadata.event_timestamp | Dipetakan langsung dari kolom log mentah @timestamp . |
agent.hostname | observer.hostname | Dipetakan langsung dari kolom log mentah agent.hostname . |
agent.id | observer.asset_id | Digabungkan dengan agent.type untuk membentuk kolom observer.asset_id . |
agent.type | observer.application | Dipetakan langsung dari kolom log mentah agent.type . |
agent.version | observer.platform_version | Dipetakan langsung dari kolom log mentah agent.version . |
audit_category | security_result.category_details | Dipetakan langsung dari kolom log mentah audit_category . |
audit_cluster_name | additional.fields.audit_cluster_name.value.string_value | Dipetakan langsung dari kolom log mentah audit_cluster_name . |
audit_node_host_address | observer.ip | Dipetakan langsung dari kolom log mentah audit_node_host_address . |
audit_node_id | additional.fields.audit_node_id.value.string_value | Dipetakan langsung dari kolom log mentah audit_node_id . |
audit_node_name | additional.fields.audit_node_name.value.string_value | Dipetakan langsung dari kolom log mentah audit_node_name . |
audit_request_effective_user | observer.user.userid | Dipetakan langsung dari kolom log mentah audit_request_effective_user . |
audit_request_initiating_user | additional.fields.audit_request_initiating_user.value.string_value | Dipetakan langsung dari kolom log mentah audit_request_initiating_user . |
audit_request_remote_address | observer.ip | Dipetakan langsung dari kolom log mentah audit_request_remote_address jika berbeda dengan audit_node_host_address . |
client.bytes | network.received_bytes (MASUK) / network.sent_bytes (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke network.received_bytes . Jika OUTBOUND, dipetakan ke network.sent_bytes . |
client.ip | target.ip (MASUK) / principal.ip (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke target.ip . Jika OUTBOUND, dipetakan ke principal.ip . |
client.port | target.port (INBOUND) / principal.port (OUTBOUND) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke target.port . Jika OUTBOUND, dipetakan ke principal.port . |
cluster.uuid | additional.fields.uuid.value.string_value | Dipetakan langsung dari kolom log mentah cluster.uuid . |
komponen | additional.fields.component.value.string_value | Dipetakan langsung dari kolom log mentah component . |
destination.bytes | network.sent_bytes | Dipetakan langsung dari kolom log mentah destination.bytes untuk peristiwa FLOW. |
destination.ip | target.ip | Dipetakan langsung dari kolom log mentah destination.ip jika network.direction bukan INBOUND atau OUTBOUND. |
destination.mac | target.mac | Dipetakan langsung dari kolom log mentah destination.mac untuk peristiwa FLOW. |
destination.port | target.port | Dipetakan langsung dari kolom log mentah destination.port untuk peristiwa FLOW. |
dhcpv4.assigned_ip | network.dhcp.requested_address | Dipetakan langsung dari kolom log mentah dhcpv4.assigned_ip . |
dhcpv4.client_ip | network.dhcp.yiaddr (ACK) / network.dhcp.ciaddr (REQUEST) / source.ip (REQUEST, jika dhcpv4.client_ip kosong) | Dipetakan berdasarkan kolom network.dhcp.type . Jika ACK, maka dipetakan ke network.dhcp.yiaddr . Jika REQUEST, maka dipetakan ke network.dhcp.ciaddr . Jika REQUEST dan dhcpv4.client_ip kosong, maka akan dipetakan ke source.ip . |
dhcpv4.client_mac | network.dhcp.client_identifier | Dipetakan langsung dari kolom log mentah dhcpv4.client_mac setelah dikonversi menjadi byte. |
dhcpv4.op_code | network.dhcp.opcode | Dipetakan ke network.dhcp.opcode berdasarkan nilai dhcpv4.op_code . Jika dhcpv4.op_code adalah BOOTREPLY atau BOOTREQUEST , nilai akan dipetakan secara langsung. Jika tidak, nilai ini dipetakan ke UNKNOWN_OPCODE . |
dhcpv4.option.hostname | network.dhcp.client_hostname | Dipetakan langsung dari kolom log mentah dhcpv4.option.hostname . |
dhcpv4.option.ip_address_lease_time_sec | network.dhcp.lease_time_seconds | Dipetakan langsung dari kolom log mentah dhcpv4.option.ip_address_lease_time_sec setelah dikonversi menjadi bilangan bulat yang tidak bertanda. |
dhcpv4.option.message_type | network.dhcp.type | Dipetakan ke network.dhcp.type berdasarkan nilai dhcpv4.option.message_type . Pemetaan adalah sebagai berikut: ack -> ACK , nack -> NAK , discover -> DISCOVER , offer -> OFFER , request -> REQUEST , decline -> DECLINE , release -> RELEASE , info -> INFORM . Jika nilainya bukan salah satu dari nilai tersebut, nilai akan dipetakan ke UNKNOWN_MESSAGE_TYPE . |
dhcpv4.option.server_identifier | network.dhcp.sname | Dipetakan langsung dari kolom log mentah dhcpv4.option.server_identifier . |
dns.answers.data | network.dns.answers.data | Dipetakan langsung dari kolom log mentah dns.answers.data . |
dns.answers.class | network.dns.answers.class | Dipetakan ke network.dns.answers.class berdasarkan nilai dns.answers.class . Pemetaan adalah sebagai berikut: IN -> 1, NONE -> 254, ANY -> 255. |
dns.answers.name | network.dns.answers.name | Dipetakan langsung dari kolom log mentah dns.answers.name . |
dns.answers.ttl | network.dns.answers.ttl | Dipetakan langsung dari kolom log mentah dns.answers.ttl setelah dikonversi menjadi bilangan bulat yang tidak bertanda. |
dns.answers.type | network.dns.answers.type | Dipetakan ke network.dns.answers.type berdasarkan nilai dns.answers.type . Pemetaan adalah sebagai berikut: A -> 1, NS -> 2, CNAME -> 5, SOA -> 6, PTR -> 12, MX -> 15, TXT -> 16, AAAA -> 28, SRV -> 33, NAPTR -> 35, DS -> 43, DNSKEY -> 48, IXFR -> 251, AXFR -> 252, TYPE99 -> 99, TKEY -> 249, ANY -> 255, ALL -> 255, URI -> 256, NULL -> 0. |
dns.flags.authoritative | network.dns.authoritative | Dipetakan langsung dari kolom log mentah dns.flags.authoritative jika benar. |
dns.flags.recursion_available | network.dns.recursion_available | Dipetakan langsung dari kolom log mentah dns.flags.recursion_available jika benar. |
dns.flags.recursion_desired | network.dns.recursion_desired | Dipetakan langsung dari kolom log mentah dns.flags.recursion_desired jika benar. |
dns.flags.truncated_response | network.dns.truncated | Dipetakan langsung dari kolom log mentah dns.flags.truncated_response jika benar. |
dns.id | network.dns.id | Dipetakan langsung dari kolom log mentah dns.id setelah dikonversi menjadi bilangan bulat yang tidak bertanda. |
dns.question.class | network.dns.questions.class | Dipetakan ke network.dns.questions.class berdasarkan nilai dns.question.class . Pemetaan adalah sebagai berikut: IN -> 1, NONE -> 254, ANY -> 255. |
dns.question.name | network.dns.questions.name | Dipetakan langsung dari kolom log mentah dns.question.name . |
dns.question.type | network.dns.questions.type | Dipetakan ke network.dns.questions.type berdasarkan nilai dns.question.type . Pemetaan adalah sebagai berikut: A -> 1, NS -> 2, CNAME -> 5, SOA -> 6, PTR -> 12, MX -> 15, TXT -> 16, AAAA -> 28, SRV -> 33, NAPTR -> 35, DS -> 43, DNSKEY -> 48, IXFR -> 251, AXFR -> 252, TYPE99 -> 99, TKEY -> 249, ANY -> 255, ALL -> 255, URI -> 256, NULL -> 0. |
dns.resolved_ip | network.dns.additional.data | Setiap elemen dalam array dns.resolved_ip diproses dan dipetakan ke kolom network.dns.additional.data . |
dns.response_code | network.dns.response_code | Dipetakan ke network.dns.response_code berdasarkan nilai dns.response_code . Pemetaan adalah sebagai berikut: NOERROR -> 0, FORMERR -> 1, SERVFAIL -> 2, NXDOMAIN -> 3, NOTIMP -> 4, REFUSED -> 5, YXDOMAIN -> 6, YXRRSET -> 7, NXRRSET -> 8, NOTAUTH -> 9, NOTZONE -> 10. |
error.message | security_result.summary | Digabungkan dengan status untuk membentuk kolom security_result.summary untuk peristiwa HTTP. |
event.dataset | metadata.product_event_type | Dipetakan langsung dari kolom log mentah event.dataset . |
flow.final | Digunakan untuk menentukan apakah alurnya sudah final. Jika tidak, peristiwa akan dihapus. | |
flow.id | network.session_id | Dipetakan langsung dari kolom log mentah flow.id untuk peristiwa FLOW. |
headers.accept_encoding | security_result.about.labels.Accept-Encoding | Dipetakan langsung dari kolom log mentah headers.accept_encoding . |
headers.content_length | additional.fields.content_length.value.string_value | Dipetakan langsung dari kolom log mentah headers.content_length . |
headers.content_type | additional.fields.content_type.value.string_value | Dipetakan langsung dari kolom log mentah headers.content_type . |
headers.http_accept | additional.fields.http_accept.value.string_value | Dipetakan langsung dari kolom log mentah headers.http_accept . |
headers.http_host | principal.hostname, principal.asset.hostname | Dipetakan langsung dari kolom log mentah headers.http_host . |
headers.http_user_agent | network.http.user_agent | Dipetakan langsung dari kolom log mentah headers.http_user_agent . |
headers.request_method | network.http.method | Dipetakan langsung dari kolom log mentah headers.request_method . |
headers.x_b3_parentspanid | additional.fields.x_b3_parentspanid.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_b3_parentspanid . |
headers.x_b3_sampled | additional.fields.x_b3_sampled.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_b3_sampled . |
headers.x_envoy_attempt_count | security_result.about.labels.x_envoy_attempt_count | Dipetakan langsung dari kolom log mentah headers.x_envoy_attempt_count . |
headers.x_envoy_original_path | additional.fields.x_envoy_original_path.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_envoy_original_path . |
headers.x_forwarded_client_cert | additional.fields.client_cert.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_forwarded_client_cert . |
headers.x_forwarded_for | principal.ip, principal.asset.ip | Dipetakan langsung dari kolom log mentah headers.x_forwarded_for setelah mengekstrak alamat IP menggunakan grok. |
headers.x_forwarded_proto | additional.fields.x_forwarded_proto.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_forwarded_proto . |
headers.x_request_id | additional.fields.x_request_id.value.string_value | Dipetakan langsung dari kolom log mentah headers.x_request_id . |
host | principal.ip, principal.asset.ip | Dipetakan langsung dari kolom log mentah host setelah mengekstrak alamat IP menggunakan grok. |
http.request.method | network.http.method | Dipetakan langsung dari kolom log mentah http.request.method . |
level | security_result.severity | Dipetakan ke security_result.severity berdasarkan nilai level . Pemetaan adalah sebagai berikut: INFO -> INFORMATIONAL , ERROR -> ERROR , WARNING -> LOW . |
logger | additional.fields.logger.value.string_value | Dipetakan langsung dari kolom log mentah logger . |
metode | Digunakan untuk menentukan apakah peristiwa tersebut adalah peristiwa DNS. | |
msg | security_result.description | Dipetakan langsung dari kolom log mentah msg setelah menghapus tanda kutip ganda. |
network.community_id | network.community_id | Dipetakan langsung dari kolom log mentah network.community_id . |
network.direction | network.direction | Dipetakan langsung dari kolom log mentah network.direction setelah mengonversinya menjadi huruf besar. Jika nilainya adalah INGRESS atau INBOUND , nilai tersebut akan dipetakan ke INBOUND . Jika nilainya adalah EGRESS atau OUTBOUND , nilai tersebut akan dipetakan ke OUTBOUND . |
network.protocol | network.application_protocol | Dipetakan langsung dari kolom log mentah network.protocol . |
network.transport | network.ip_protocol | Dipetakan langsung dari kolom log mentah network.transport untuk peristiwa TLS. |
server.bytes | network.sent_bytes (MASUK) / network.received_bytes (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke network.sent_bytes . Jika OUTBOUND, dipetakan ke network.received_bytes . |
server.domain | principal.hostname, principal.asset.hostname (MASUK) / target.hostname, target.asset.hostname (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke principal.hostname . Jika OUTBOUND, dipetakan ke target.hostname . |
server.ip | principal.ip, principal.asset.ip (MASUK) / target.ip, target.asset.ip (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke principal.ip . Jika OUTBOUND, dipetakan ke target.ip . |
server.port | principal.port (INBOUND) / target.port (OUTBOUND) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke principal.port . Jika OUTBOUND, dipetakan ke target.port . |
source.bytes | network.received_bytes | Dipetakan langsung dari kolom log mentah source.bytes untuk peristiwa FLOW. |
source.ip | principal.ip, principal.asset.ip | Dipetakan langsung dari kolom log mentah source.ip untuk peristiwa FLOW. |
source.mac | principal.mac | Dipetakan langsung dari kolom log mentah source.mac untuk peristiwa FLOW. |
source.port | principal.port | Dipetakan langsung dari kolom log mentah source.port untuk peristiwa FLOW. |
status | metadata.description, security_result.summary | Dipetakan ke metadata.description jika level kosong. Digabungkan dengan error.message untuk membentuk kolom security_result.summary untuk peristiwa HTTP dan TLS. |
tls.client.ja3 | network.tls.client.ja3 | Dipetakan langsung dari kolom log mentah tls.client.ja3 . |
tls.client.server_name | network.tls.client.server_name | Dipetakan langsung dari kolom log mentah tls.client.server_name . |
tls.client.supported_ciphers | network.tls.client.supported_ciphers | Setiap elemen dalam array tls.client.supported_ciphers diproses dan dipetakan ke array network.tls.client.supported_ciphers . |
tls.cipher | network.tls.cipher | Dipetakan langsung dari kolom log mentah tls.cipher . |
tls.detailed.server_certificate.not_after | network.tls.server.certificate.not_after | Dipetakan langsung dari kolom log mentah tls.detailed.server_certificate.not_after setelah dikonversi menjadi stempel waktu. |
tls.detailed.server_certificate.not_before | network.tls.server.certificate.not_before | Dipetakan langsung dari kolom log mentah tls.detailed.server_certificate.not_before setelah dikonversi menjadi stempel waktu. |
tls.detailed.server_certificate.serial_number | network.tls.server.certificate.serial | Dipetakan langsung dari kolom log mentah tls.detailed.server_certificate.serial_number . |
tls.detailed.server_certificate.version | network.tls.server.certificate.version | Dipetakan langsung dari kolom log mentah tls.detailed.server_certificate.version setelah dikonversi menjadi string. |
tls.established | network.tls.established | Dipetakan langsung dari kolom log mentah tls.established . |
tls.next_protocol | network.tls.next_protocol | Dipetakan langsung dari kolom log mentah tls.next_protocol . |
tls.resumed | network.tls.resumed | Dipetakan langsung dari kolom log mentah tls.resumed . |
tls.server.hash.sha1 | network.tls.server.certificate.sha1 | Dipetakan langsung dari kolom log mentah tls.server.hash.sha1 setelah mengonversinya menjadi huruf kecil. |
tls.server.issuer | network.tls.server.certificate.issuer | Dipetakan langsung dari kolom log mentah tls.server.issuer . |
tls.server.subject | network.tls.server.certificate.subject | Dipetakan langsung dari kolom log mentah tls.server.subject . |
tls.version | network.tls.version | Dipetakan langsung dari kolom log mentah tls.version . |
tls.version_protocol | network.tls.version_protocol | Dipetakan langsung dari kolom log mentah tls.version_protocol . |
jenis | Digunakan untuk menentukan apakah peristiwa tersebut adalah peristiwa DNS. | |
url.full | principal.url (MASUK) / target.url (KELUAR) | Dipetakan berdasarkan kolom network.direction . Jika INBOUND, dipetakan ke principal.url . Jika OUTBOUND, dipetakan ke target.url . |
user_id | target.user.userid | Dipetakan langsung dari kolom log mentah user_id . |
user_name | target.user.user_display_name | Dipetakan langsung dari kolom log mentah user_name . |
metadata.event_type | Setel ke GENERIC_EVENT secara default. Diubah menjadi jenis peristiwa tertentu berdasarkan sumber log dan data peristiwa. |
|
metadata.vendor_name | Setel ke Elastic secara default. |
|
metadata.product_name | Setel ke PacketBeat secara default. |
|
security_result.action | Setel ke ALLOW secara default. |
|
metadata.log_type | Setel ke ELASTIC_PACKETBEATS secara default. |
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.