Raccogliere i log di Forcepoint Web Security
Questo documento spiega come importare i log di Forcepoint Web Security in Google Security Operations utilizzando l'agente Bindplane.
Forcepoint Web Security è un proxy web e un gateway di sicurezza che genera messaggi syslog in formato CEF (Common Event Format) per accesso web, eventi di sicurezza, autenticazione e applicazione dei criteri. Il parser estrae i campi dai log formattati CEF e syslog e li mappa al modello Unified Data Model (UDM).
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host Linux con
systemd - Connettività di rete tra l'agente Bindplane e Forcepoint Web Security
- Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
- Accesso amministrativo a Forcepoint Security Manager o all'interfaccia di gestione dell'appliance
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 l'agente 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
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri 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" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sc query observiq-otel-collectorIl servizio dovrebbe essere visualizzato come IN ESECUZIONE.
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.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo:
sudo systemctl status observiq-otel-collectorIl servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Puoi configurare l'agente Bindplane per ricevere messaggi syslog tramite TCP (opzione consigliata) o UDP.
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di config.yaml con la configurazione del protocollo scelto:
Opzione A: configurazione TCP (consigliata)
receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/forcepoint_webproxy: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: FORCEPOINT_WEBPROXY raw_log_field: body service: pipelines: logs/forcepoint_tcp_to_chronicle: receivers: - tcplog exporters: - chronicle/forcepoint_webproxyOpzione B: configurazione UDP
receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/forcepoint_webproxy: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: '<customer_id>' endpoint: malachiteingestion-pa.googleapis.com log_type: FORCEPOINT_WEBPROXY raw_log_field: body service: pipelines: logs/forcepoint_udp_to_chronicle: receivers: - udplog exporters: - chronicle/forcepoint_webproxy
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
listen_address: Indirizzo IP e porta da ascoltare:0.0.0.0per ascoltare su tutte le interfacce (consigliato)- La porta
514è la porta syslog standard (richiede l'accesso root su Linux; utilizza1514per l'accesso non root)
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione importazione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID cliente copiato dalla console Google SecOpsendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per un elenco completo, vedi Endpoint regionali.
- Stati Uniti:
Salvare il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole Services:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
- Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configura l'inoltro di syslog su Forcepoint Web Security
Configura Forcepoint Web Security per inoltrare i log all'agente Bindplane in formato CEF (Common Event Format).
Utilizzo di Forcepoint Security Manager
- Accedi a Forcepoint Security Manager con le credenziali amministrative.
- Vai a Impostazioni > Registrazione.
- Nel riquadro di navigazione a sinistra, seleziona Server di log.
- Fai clic su Aggiungi per creare una nuova configurazione del server di log.
- Fornisci i seguenti dettagli di configurazione:
- Server Type (Tipo di server): seleziona Syslog Server (Server Syslog) o CEF Server (Server CEF).
- Nome: inserisci un nome descrittivo (ad esempio,
Google Security Operations Bindplane CEF). - Host: inserisci l'indirizzo IP o il nome host dell'agente Bindplane.
- Porta: inserisci il numero di porta dell'agente Bindplane (ad esempio,
514). - Protocollo: seleziona il protocollo corrispondente alla configurazione di Bindplane:
- Seleziona TCP se hai configurato il ricevitore
tcplogin Bindplane (opzione consigliata). - Seleziona UDP se hai configurato il ricevitore
udplogin Bindplane.
- Seleziona TCP se hai configurato il ricevitore
- Formato: seleziona CEF (Common Event Format).
- Facility (Struttura): seleziona Local0 (o un'altra struttura disponibile).
- Gravità: seleziona Informativa (per acquisire tutti i livelli di log).
- In Categorie log o Tipi di eventi, seleziona gli eventi da inoltrare:
- Log di accesso web (log delle transazioni)
- Eventi di sicurezza (rilevamenti di minacce)
- Eventi di autenticazione (accesso/disconnessione utente)
- Eventi di sistema (modifiche al sistema e alla configurazione)
- In alternativa, seleziona Tutti gli eventi per inoltrare tutti i tipi di log disponibili.
- (Facoltativo) Configura le impostazioni aggiuntive:
- Dimensioni batch: imposta
1per l'inoltro in tempo reale o un valore superiore per l'elaborazione batch. - Formato messaggio: assicurati che sia selezionato il formato CEF.
- Includi informazioni utente: attiva questa opzione per includere l'identità utente nei log.
- Dimensioni batch: imposta
- Fai clic su Prova connessione per verificare la connettività all'agente Bindplane.
- Fai clic su Salva per applicare la configurazione.
- Fai clic su Esegui il deployment per eseguire il push della configurazione su tutti i gateway Forcepoint Web Security.
Utilizzo dell'appliance Forcepoint Web Security (configurazione diretta)
Se esegui la configurazione direttamente sull'appliance:
- Accedi all'interfaccia di gestione dell'appliance di sicurezza web Forcepoint.
- Vai a Sistema > Server di log.
- Fai clic su Aggiungi o Modifica per creare o modificare un server di log.
- Fornisci i seguenti dettagli di configurazione:
- Indirizzo server: inserisci l'indirizzo IP dell'agente Bindplane.
- Porta: inserisci
514(o la tua porta personalizzata). - Protocollo: seleziona TCP o UDP in base alla configurazione di Bindplane.
- Formato: seleziona CEF o Common Event Format.
- Facility (Struttura): seleziona Local0.
- In Tipi di log, seleziona i log da inoltrare:
- Log degli accessi
- Log di sicurezza
- Log amministratore
- Fai clic su Applica o Salva.
- Se utilizzi più elettrodomestici, ripeti questa configurazione su ciascuno di essi.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
action |
security_result.summary |
Se action_msg non è vuoto, viene mappato a security_result.summary. In caso contrario, se action non è vuoto, viene mappato a security_result.summary. In caso contrario, se act non è vuoto, viene mappato a security_result.summary. |
action_msg |
security_result.summary |
Se action_msg non è vuoto, viene mappato a security_result.summary. In caso contrario, se action non è vuoto, viene mappato a security_result.summary. In caso contrario, se act non è vuoto, viene mappato a security_result.summary. |
app |
target.application |
Se destinationServiceName non è vuoto, viene mappato a app_name. In caso contrario, se app non è vuoto e non contiene http o HTTP, viene mappato a app_name. Infine, app_name è mappato a target.application. |
bytes_in |
network.received_bytes |
Se in non è vuoto, viene mappato a bytes_in. Infine, bytes_in è mappato a network.received_bytes. |
bytes_out |
network.sent_bytes |
Se out non è vuoto, viene mappato a bytes_out. Infine, bytes_out è mappato a network.sent_bytes. |
cat |
security_result.category_details |
Se cat non è vuoto, viene mappato a category. Infine, category è mappato a security_result.category_details. |
category_no |
security_result.detection_fields.value |
Se category_no non è vuoto, viene mappato a security_result.detection_fields.value con la chiave Category Number. |
cn1 |
security_result.detection_fields.value |
Se cn1 non è vuoto, viene mappato a security_result.detection_fields.value con la chiave Disposition Number. |
ContentType |
target.file.mime_type |
Se contentType non è vuoto, viene mappato a ContentType. Infine, ContentType è mappato a target.file.mime_type. |
cs1 |
target_role.description |
cs1 è mappato a target_role.description. |
cs2 |
security_result.category_details |
Se cs2 non è vuoto e non è 0, viene mappato a security_result.category_details con il prefisso Dynamic Category:. |
cs3 |
target.file.mime_type |
cs3 è mappato a target.file.mime_type. |
description |
metadata.description |
Se description non è vuoto, viene mappato a metadata.description. |
destinationServiceName |
target.application |
Se destinationServiceName non è vuoto, viene mappato a app_name. Infine, app_name è mappato a target.application. |
deviceFacility |
metadata.product_event_type |
Se product_event e deviceFacility non sono vuoti, vengono concatenati con - e mappati a metadata.product_event_type. In caso contrario, product_event viene mappato a metadata.product_event_type. |
disposition |
security_result.detection_fields.value |
Se disposition non è vuoto, viene mappato a security_result.detection_fields.value con la chiave Disposition Number. |
dst |
target.ip |
Se dst non è vuoto e dvchost è vuoto, viene mappato a dst_ip. Infine, dst_ip è mappato a target.ip. |
dst_host |
target.hostname |
Se dst non è vuoto e dvchost è vuoto, viene mappato a dst_host. Infine, dst_host è mappato a target.hostname. |
dst_ip |
target.ip |
Se dst non è vuoto e dvchost è vuoto, viene mappato a dst_ip. Infine, dst_ip è mappato a target.ip. |
dst_port |
target.port |
Se dst non è vuoto e dvchost è vuoto, viene mappato a dst_port. Infine, dst_port è mappato a target.port. |
duration |
network.session_duration.seconds |
Se duration non è vuoto e non è 0, viene mappato a network.session_duration.seconds. |
dvchost |
intermediary.ip |
Se dvchost non è vuoto, viene mappato a int_ip. Infine, int_ip viene mappato su intermediary.ip se è un indirizzo IP valido, altrimenti viene mappato su intermediary.hostname. |
file_path |
target.file.full_path |
Se file_path non è vuoto, viene mappato a target.file.full_path. |
host |
principal.ip |
Se host non è vuoto, viene mappato a src. Infine, src è mappato a principal.ip. |
http_method |
network.http.method |
Se requestMethod non è vuoto, viene mappato a http_method. In caso contrario, se method non è vuoto, viene mappato a http_method. Infine, http_method è mappato a network.http.method. |
http_proxy_status_code |
network.http.response_code |
Se http_response è vuoto o 0 o - e http_proxy_status_code non è vuoto, viene mappato a network.http.response_code. |
http_response |
network.http.response_code |
Se http_response non è vuoto, non è 0 e non è -, viene mappato a network.http.response_code. |
http_user_agent |
network.http.user_agent |
Se http_user_agent non è vuoto e non è -, viene mappato a network.http.user_agent. |
in |
network.received_bytes |
Se in non è vuoto, viene mappato a bytes_in. Infine, bytes_in è mappato a network.received_bytes. |
int_host |
intermediary.hostname |
Se int_ip non è vuoto e int_host non è vuoto e diverso da int_ip, viene mappato a intermediary.hostname. |
int_ip |
intermediary.ip |
Se dvchost non è vuoto, viene mappato a int_ip. Infine, int_ip viene mappato su intermediary.ip se è un indirizzo IP valido, altrimenti viene mappato su intermediary.hostname. |
level |
target_role.name |
Se level non è vuoto e role è vuoto, viene mappato a role. Infine, role è mappato a target_role.name. |
log_level |
security_result.severity |
Se severity è 1 o log_level contiene info o message contiene notice, security_result.severity è impostato su INFORMATIONAL. Se severity è 7, security_result.severity è impostato su HIGH. |
loginID |
principal.user.userid |
Se loginID non è vuoto, viene mappato a user. Infine, se user non è vuoto e non è - e non contiene LDAP, viene mappato a principal.user.userid. |
method |
network.http.method |
Se requestMethod non è vuoto, viene mappato a http_method. In caso contrario, se method non è vuoto, viene mappato a http_method. Infine, http_method è mappato a network.http.method. |
NatRuleId |
security_result.detection_fields.value |
Se NatRuleId non è vuoto, viene mappato a security_result.detection_fields.value con la chiave NatRuleId. |
out |
network.sent_bytes |
Se out non è vuoto, viene mappato a bytes_out. Infine, bytes_out è mappato a network.sent_bytes. |
pid |
target.process.pid |
Se pid non è vuoto, viene mappato a target.process.pid. |
policy |
target_role.description |
Se Policy non è vuoto, viene mappato a policy. Se policy non è vuoto e non è -, viene mappato a target_role.description. |
Policy |
target_role.description |
Se Policy non è vuoto, viene mappato a policy. Se policy non è vuoto e non è -, viene mappato a target_role.description. |
product_event |
metadata.product_event_type |
Se product non è vuoto, viene mappato a product_event. Se product_event e deviceFacility non sono vuoti, vengono concatenati con - e mappati a metadata.product_event_type. In caso contrario, product_event viene mappato a metadata.product_event_type. |
proxyStatus-code |
network.http.response_code |
Se http_response è vuoto o 0 o - e http_proxy_status_code è vuoto e proxyStatus-code non è vuoto, viene mappato a network.http.response_code. |
refererUrl |
network.http.referral_url |
Se refererUrl non è vuoto e non è -, viene mappato a network.http.referral_url. |
requestClientApplication |
network.http.user_agent |
Se requestMethod non è vuoto, viene mappato a http_user_agent. Infine, http_user_agent è mappato a network.http.user_agent. |
requestMethod |
network.http.method |
Se requestMethod non è vuoto, viene mappato a http_method. Infine, http_method è mappato a network.http.method. |
role |
target_role.name |
Se level non è vuoto e role è vuoto, viene mappato a role. Infine, role è mappato a target_role.name. |
RuleID |
security_result.rule_id |
Se RuleID non è vuoto, viene mappato a security_result.rule_id. |
serverStatus-code |
network.http.response_code |
Se http_response è vuoto o 0 o - e http_proxy_status_code è vuoto e proxyStatus-code non è vuoto, viene mappato a network.http.response_code. |
severity |
security_result.severity |
Se severity è 1 o log_level contiene info o message contiene notice, security_result.severity è impostato su INFORMATIONAL. Se severity è 7, security_result.severity è impostato su HIGH. |
spt |
principal.port |
Se spt non è vuoto, viene mappato a src_port. Infine, src_port è mappato a principal.port. |
src |
principal.ip |
Se src_host non è vuoto, viene mappato a source_ip_temp. Se source_ip_temp è un indirizzo IP valido e src è vuoto, viene mappato a src. Se host non è vuoto, viene mappato a src. Infine, src è mappato a principal.ip. |
src_host |
principal.hostname |
Se src_host non è vuoto, viene mappato a source_ip_temp. Se source_ip_temp non è un indirizzo IP valido, viene mappato a principal.hostname. Se source_ip_temp è un indirizzo IP valido e src è vuoto, viene mappato a src. Infine, src è mappato a principal.ip. |
src_port |
principal.port |
Se src_port non è vuoto, viene mappato a principal.port. |
suser |
principal.user.userid |
Se loginID non è vuoto, viene mappato a user. Se suser non è vuoto, viene mappato a user. Infine, se user non è vuoto e non è - e non contiene LDAP, viene mappato a principal.user.userid. |
url |
target.url |
Se url non è vuoto, viene mappato a target.url. |
user |
principal.user.userid |
Se loginID non è vuoto, viene mappato a user. Se suser non è vuoto, viene mappato a user. In caso contrario, se usrName non è vuoto, viene mappato a user. Infine, se user non è vuoto e non è - e non contiene LDAP, viene mappato a principal.user.userid. |
usrName |
principal.user.userid |
Se loginID non è vuoto, viene mappato a user. Se suser non è vuoto, viene mappato a user. In caso contrario, se usrName non è vuoto, viene mappato a user. Infine, se user non è vuoto e non è - e non contiene LDAP, viene mappato a principal.user.userid. |
when |
metadata.event_timestamp |
Se when non è vuoto, viene analizzato e mappato a metadata.event_timestamp. |
| N/D | metadata.log_type |
Il valore FORCEPOINT_WEBPROXY è hardcoded in metadata.log_type. |
| N/D | metadata.product_name |
Il valore Forcepoint Webproxy è hardcoded in metadata.product_name. |
| N/D | metadata.vendor_name |
Il valore Forcepoint è hardcoded in metadata.vendor_name. |
| N/D | network.application_protocol |
Se dst_port è 80, network.application_protocol è impostato su HTTP. Se dst_port è 443, network.application_protocol è impostato su HTTPS. |
| N/D | principal.user.group_identifiers |
Se user non è vuoto e non è - e contiene LDAP, la parte dell'unità organizzativa della stringa utente viene estratta e mappata a principal.user.group_identifiers. |
| N/D | principal.user.user_display_name |
Se user non è vuoto e non è - e contiene LDAP, la parte del nome utente della stringa utente viene estratta e mappata a principal.user.user_display_name. |
| N/D | security_result.action |
Se action_msg, action o act non sono vuoti, sec_action è impostato su ALLOW o BLOCK in base ai loro valori. Infine, sec_action è mappato a security_result.action. |
| N/D | security_result.detection_fields.key |
Il valore Disposition Number è hardcoded in security_result.detection_fields.key quando viene mappato disposition o cn1. Il valore NatRuleId è hardcoded in security_result.detection_fields.key durante la mappatura di NatRuleId. Il valore Category Number è hardcoded in security_result.detection_fields.key durante la mappatura di category_no. |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.