Raccogliere i log Apache
Questo documento spiega come importare i log Apache in Google Security Operations utilizzando Bindplane. Il codice del parser tenta innanzitutto di analizzare il messaggio di log non elaborato come JSON. Se l'operazione non va a buon fine, utilizza espressioni regolari (pattern grok
) per estrarre i campi dal messaggio in base ai formati di log Apache comuni.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati di utilizzare Windows 2016 o versioni successive oppure un host Linux con
systemd
. - Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
- Assicurati di disporre dell'accesso con privilegi a un'istanza Apache.
Recuperare il file di autenticazione importazione di Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.
Recuperare l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installazione di Linux
- Apri un terminale con privilegi di root o sudo.
Esegui questo comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Risorse aggiuntive per l'installazione
- Per ulteriori opzioni di installazione, consulta questa guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarli a Google SecOps
Accedi al file di configurazione:
- Individua il file
config.yaml
. In genere, si trova nella directory/etc/bindplane-agent/
su Linux o nella directory di installazione su Windows. - Apri il file utilizzando un editor di testo (ad esempio
nano
,vi
o Blocco note).
- Individua il file
Modifica il file
config.yaml
come segue: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: 'APACHE' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.
Sostituisci
<customer_id>
con l'ID cliente effettivo.Aggiorna
/path/to/ingestion-authentication-file.json
al percorso in cui è stato salvato il file di autenticazione nella sezione Recupera il file di autenticazione per l'importazione di Google SecOps.
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart bindplane-agent
Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurare Syslog in Apache
- Accedi al server Ubuntu tramite SSH.
Crea un file in
/etc/rsyslog.d/
denominato02-apache2.conf
:vim /etc/rsyslog.d/02-apache2.conf
Aggiungi il seguente codice al file:
module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog") input(type="imfile" File="/var/log/apache2/access.log" Tag="http_access" Severity="info" Facility="local6") Local6.info @<bindplane-agnet-ip>:<vindplane-agent-port> module(load="imfile" PollingInterval="10" statefile.directory="/var/spool/rsyslog") input(type="imfile" File="/var/log/apache2/error.log" Tag="http_error"
- Sostituisci
bindplane-agent-ip>
ebindplane-agent-port
con l'indirizzo IP e la porta configurati per l'agente Bindplane. - Se utilizzi il protocollo TCP, aggiungi un ulteriore
@
alla riga dell'host in modo che abbia il seguente aspetto:@@<bindplane-agnet-ip>:<vindplane-agent-port>
.
- Sostituisci
Riavvia i servizi RSyslog:
sudo service rsyslog restart
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
byte | network.received_bytes | Byte ricevuti dal client. |
byte | network.sent_bytes | Byte inviati al client. |
bytes_out | network.sent_bytes | Byte inviati al client. |
bytes_received | network.received_bytes | Byte ricevuti dal client. |
Contenuti | network.http.method | Metodo HTTP estratto dal campo "Contenuti". |
Contenuti | target.url | URL di destinazione estratto dal campo "Contenuti". |
biscotto | additional.fields.value.string_value | Valore del campo "cookie". |
dest_ip | target.ip | Indirizzo IP della destinazione. |
dest_name | target.hostname | Nome host della destinazione. |
dest_port | target.port | Porta della destinazione. |
description | metadata.description | Descrizione dell'evento. |
duration_microseconds | additional.fields.value.string_value | Valore del campo "duration_microseconds". |
file_full_path | target.file.full_path | Percorso completo del file di destinazione. |
nome host | target.hostname | Nome host della destinazione. |
http_content_type | additional.fields.value.string_value | Valore del campo "http_content_type". |
http_host | principal.hostname | Il nome host dell'entità. |
http_method | network.http.method | Metodo HTTP. |
http_referrer | network.http.referral_url | URL referrer HTTP. |
http_user_agent | network.http.user_agent | User agent HTTP. |
ID | metadata.id | ID dell'evento. |
insertId | metadata.product_log_id | ID log prodotto. |
ip | principal.ip | L'indirizzo IP dell'entità. |
jsonPayload.cIP | target.ip | Indirizzo IP della destinazione. |
jsonPayload.cPort | target.port | Porta della destinazione. |
jsonPayload.csBytes | network.sent_bytes | Byte inviati al client. |
jsonPayload.csMethod | network.http.method | Metodo HTTP. |
jsonPayload.csMimeType | target.file.mime_type | Tipo MIME del file di destinazione. |
jsonPayload.csReferer | network.http.referral_url | URL referrer HTTP. |
jsonPayload.csURL | target.url | URL di destinazione. |
jsonPayload.csUserAgent | network.http.user_agent | User agent HTTP. |
jsonPayload.sHierarchy | additional.fields.value.string_value | Valore del campo "sHierarchy". |
jsonPayload.sHostname | principal.hostname | Il nome host dell'entità. |
jsonPayload.sIP | principal.ip | L'indirizzo IP dell'entità. |
jsonPayload.scBytes | network.received_bytes | Byte ricevuti dal client. |
jsonPayload.scHTTPStatus | network.http.response_code | Codice di risposta HTTP. |
jsonPayload.scResultCode | additional.fields.value.string_value | Valore del campo "scResultCode". |
LastStatus | network.http.response_code | Codice di risposta HTTP. |
log_level | security_result.severity | Gravità del risultato di sicurezza. |
logName | security_result.category_details | Dettagli della categoria del risultato di sicurezza. |
metodo | network.http.method | Metodo HTTP. |
pid | principal.process.pid | ID processo dell'entità. |
Porta | target.port | Porta della destinazione. |
proto | network.application_protocol | Protocollo applicativo. |
referer | network.http.referral_url | URL referrer HTTP. |
RemoteHost | principal.ip | L'indirizzo IP dell'entità. |
RemoteUser | principal.user.userid | L'ID utente dell'entità. |
resource.labels.instance_id | target.resource.product_object_id | ID oggetto prodotto della risorsa di destinazione. |
resource.labels.project_id | target.resource.attribute.labels.value | Valore dell'etichetta "project_id". |
resource.labels.zone | target.resource.attribute.cloud.availability_zone | Zona di disponibilità della risorsa di destinazione. |
resource.type | target.resource.resource_type | Tipo di risorsa della destinazione. |
risposta | network.http.response_code | Codice di risposta HTTP. |
SizeBytes | network.received_bytes | Byte ricevuti dal client. |
src_ip | principal.ip | L'indirizzo IP dell'entità. |
src_port | principal.port | Porto dell'entità. |
ssl_cipher | network.tls.cipher | Algoritmo di crittografia TLS. |
ssl_version | network.tls.version_protocol | Protocollo di versione TLS. |
stato | network.http.response_code | Codice di risposta HTTP. |
target | target.url | URL di destinazione. |
target_ip | target.ip | Indirizzo IP della destinazione. |
target_port | target.port | Porta della destinazione. |
tempo | metadata.event_timestamp | Timestamp dell'evento. |
uri_path | target.process.file.full_path | Percorso completo del file di destinazione. |
utente | principal.user.userid | L'ID utente dell'entità. |
useragent | network.http.user_agent | User agent HTTP. |
version_protocol | network.tls.version_protocol | Protocollo di versione TLS. |
Workername | principal.hostname | Il nome host dell'entità. |
x_forwarded_for | Valore dell'intestazione "X-Forwarded-For". | |
metadata.log_type | Il valore è impostato su "APACHE" nel codice del parser. | |
metadata.product_name | Il valore è impostato su "Apache Web Server" nel codice del parser. | |
metadata.vendor_name | Il valore è impostato su "Apache" nel codice del parser. | |
metadata.event_type | Il valore viene determinato in base alla presenza delle informazioni sul principale e sul target. Se sono presenti sia il principale che il target, il tipo di evento è impostato su "NETWORK_HTTP". Se è presente solo l'entità, il tipo di evento è impostato su "STATUS_UPDATE". In caso contrario, viene impostato su "GENERIC_EVENT". | |
additional.fields.key | La chiave è impostata su "keep_alive", "duration_microseconds", "cookie", "http_content_type", "sHierarchy", "scResultCode" nel codice del parser in base al campo. | |
target.port | Se il campo "proto" è "HTTP", la porta è impostata su 80. Se il campo "proto" è "HTTPS", la porta è impostata su 443. Se il campo "proto" è "FTP", la porta è impostata su 21. | |
target.resource.attribute.labels.key | La chiave è impostata su "project_id" nel codice del parser. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.