Recopila registros de Forcepoint Web Security
En este documento, se explica cómo transferir registros de Forcepoint Web Security a Google Security Operations con el agente de Bindplane.
Forcepoint Web Security es un proxy web y una puerta de enlace de seguridad que genera mensajes de syslog en CEF (Common Event Format) para el acceso web, los eventos de seguridad, la autenticación y la aplicación de políticas. El analizador extrae campos de los registros con formato CEF y syslog, y los asigna al modelo de datos unificado (UDM).
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o versiones posteriores, o host de Linux con
systemd - Conectividad de red entre el agente de Bindplane y Forcepoint Web Security
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
- Acceso administrativo a Forcepoint Security Manager o a la interfaz de administración del dispositivo
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia.
Guarda el archivo de forma segura en el sistema en el que se instalará el agente de BindPlane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietEspera a que se complete la instalación.
Ejecuta el siguiente comando para verificar la instalación:
sc query observiq-otel-collectorEl servicio debe mostrarse como RUNNING.
Instalación en Linux
- Abre una terminal con privilegios de administrador o sudo.
Ejecuta el comando siguiente:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.shEspera a que se complete la instalación.
Ejecuta el siguiente comando para verificar la instalación:
sudo systemctl status observiq-otel-collectorEl servicio debería mostrarse como activo (en ejecución).
Recursos de instalación adicionales
Para obtener más opciones de instalación y solucionar problemas, consulta la guía de instalación del agente de Bindplane.
Configura el agente de BindPlane para transferir registros de Syslog y enviarlos a Google SecOps
Puedes configurar el agente de Bindplane para que reciba mensajes de syslog a través de TCP (recomendado) o UDP.
Ubica el archivo de configuración
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Edita el archivo de configuración
Reemplaza todo el contenido de config.yaml por la configuración del protocolo que elegiste:
Opción A: Configuración de TCP (recomendada)
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_webproxyOpción B: Configuración de 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
Parámetros de configuración
Reemplaza los marcadores de posición que se indican más abajo:
Configuración del receptor:
listen_address: Dirección IP y puerto para escuchar:0.0.0.0para escuchar en todas las interfaces (recomendado)- El puerto
514es el puerto estándar de syslog (requiere acceso raíz en Linux; usa1514para acceso no raíz).
Configuración del exportador:
creds_file_path: Ruta de acceso completa al archivo de autenticación de la transferencia:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id: ID de cliente copiado de la consola de Google SecOpsendpoint: URL del extremo regional:- EE.UU.:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulta Extremos regionales para obtener la lista completa.
- EE.UU.:
Guarda el archivo de configuración
- Después de editarlo, guarda el archivo:
- Linux: Presiona
Ctrl+O, luegoEntery, por último,Ctrl+X. - Windows: Haz clic en Archivo > Guardar
- Linux: Presiona
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:
sudo systemctl restart observiq-otel-collectorVerifica que el servicio esté en ejecución:
sudo systemctl status observiq-otel-collectorRevisa los registros en busca de errores:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar el agente de Bindplane en Windows, elige una de las siguientes opciones:
Símbolo del sistema o PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsola de Services:
- Presiona
Win+R, escribeservices.mscy presiona Intro. - Busca observIQ OpenTelemetry Collector.
- Haz clic con el botón derecho y selecciona Reiniciar.
Verifica que el servicio esté en ejecución:
sc query observiq-otel-collectorRevisa los registros en busca de errores:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Presiona
Configura el reenvío de Syslog en Forcepoint Web Security
Configura Forcepoint Web Security para que reenvíe registros al agente de BindPlane en formato CEF (formato de evento común).
Uso de Forcepoint Security Manager
- Accede a Forcepoint Security Manager con credenciales de administrador.
- Ve a Settings > Logging.
- En el panel de navegación de la izquierda, selecciona Servidores de registro.
- Haz clic en Agregar para crear una nueva configuración del servidor de registro.
- Proporciona los siguientes detalles de configuración:
- Tipo de servidor: Selecciona Servidor Syslog o Servidor CEF.
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Google Security Operations Bindplane CEF). - Host: Ingresa la dirección IP o el nombre de host del agente de Bindplane.
- Puerto: Ingresa el número de puerto del agente de Bindplane (por ejemplo,
514). - Protocolo: Selecciona el protocolo que coincida con tu configuración de Bindplane:
- Selecciona TCP si configuraste el receptor
tcplogen Bindplane (recomendado). - Selecciona UDP si configuraste el receptor
udplogen Bindplane.
- Selecciona TCP si configuraste el receptor
- Formato: Selecciona CEF (formato de evento común).
- Facility: Selecciona Local0 (o cualquier otra instalación disponible).
- Gravedad: Selecciona Informativo (para capturar todos los niveles de registro).
- En Log Categories o Event Types, selecciona los eventos que deseas reenviar:
- Registros de acceso web (registros de transacciones)
- Eventos de seguridad (detecciones de amenazas)
- Authentication Events (eventos de autenticación; acceso o cierre de sesión del usuario)
- Eventos del sistema (cambios en el sistema y la configuración)
- También puedes seleccionar Todos los eventos para reenviar todos los tipos de registros disponibles.
- Opcional: Configura parámetros adicionales:
- Tamaño del lote: Establece
1para el reenvío en tiempo real o un valor más alto para el procesamiento por lotes. - Formato del mensaje: Asegúrate de que esté seleccionado el formato CEF.
- Include User Information: Habilita esta opción para incluir la identidad del usuario en los registros.
- Tamaño del lote: Establece
- Haz clic en Probar conexión para verificar la conectividad con el agente de BindPlane.
- Haz clic en Guardar para aplicar la configuración.
- Haz clic en Deploy para enviar la configuración a todas las puertas de enlace de Forcepoint Web Security.
Uso del dispositivo Forcepoint Web Security (configuración directa)
Si realizas la configuración directamente en el dispositivo, haz lo siguiente:
- Accede a la interfaz de administración del dispositivo de seguridad web de Forcepoint.
- Ve a Sistema > Servidor de registro.
- Haz clic en Agregar o Editar para crear o modificar un servidor de registros.
- Proporciona los siguientes detalles de configuración:
- Dirección del servidor: Ingresa la dirección IP del agente de BindPlane.
- Puerto: Ingresa
514(o tu puerto personalizado). - Protocolo: Selecciona TCP o UDP para que coincida con la configuración de Bindplane.
- Formato: Selecciona CEF o Formato de evento común.
- Facility: Selecciona Local0.
- En Tipos de registros, selecciona los registros que deseas reenviar:
- Registros de acceso
- Registros de seguridad
- Registros de administrador
- Haz clic en Aplicar o Guardar.
- Si usas varios electrodomésticos, repite esta configuración en cada uno de ellos.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
action |
security_result.summary |
Si action_msg no está vacío, se asigna a security_result.summary. De lo contrario, si action no está vacío, se asigna a security_result.summary. De lo contrario, si act no está vacío, se asigna a security_result.summary. |
action_msg |
security_result.summary |
Si action_msg no está vacío, se asigna a security_result.summary. De lo contrario, si action no está vacío, se asigna a security_result.summary. De lo contrario, si act no está vacío, se asigna a security_result.summary. |
app |
target.application |
Si destinationServiceName no está vacío, se asigna a app_name. De lo contrario, si app no está vacío y no contiene http o HTTP, se asigna a app_name. Por último, app_name se asigna a target.application. |
bytes_in |
network.received_bytes |
Si in no está vacío, se asigna a bytes_in. Por último, bytes_in se asigna a network.received_bytes. |
bytes_out |
network.sent_bytes |
Si out no está vacío, se asigna a bytes_out. Por último, bytes_out se asigna a network.sent_bytes. |
cat |
security_result.category_details |
Si cat no está vacío, se asigna a category. Por último, category se asigna a security_result.category_details. |
category_no |
security_result.detection_fields.value |
Si category_no no está vacío, se asigna a security_result.detection_fields.value con la clave Category Number. |
cn1 |
security_result.detection_fields.value |
Si cn1 no está vacío, se asigna a security_result.detection_fields.value con la clave Disposition Number. |
ContentType |
target.file.mime_type |
Si contentType no está vacío, se asigna a ContentType. Por último, ContentType se asigna a target.file.mime_type. |
cs1 |
target_role.description |
cs1 se asigna a target_role.description. |
cs2 |
security_result.category_details |
Si cs2 no está vacío y no es 0, se asigna a security_result.category_details con el prefijo Dynamic Category:. |
cs3 |
target.file.mime_type |
cs3 se asigna a target.file.mime_type. |
description |
metadata.description |
Si description no está vacío, se asigna a metadata.description. |
destinationServiceName |
target.application |
Si destinationServiceName no está vacío, se asigna a app_name. Por último, app_name se asigna a target.application. |
deviceFacility |
metadata.product_event_type |
Si product_event y deviceFacility no están vacíos, se concatenan con - y se asignan a metadata.product_event_type. De lo contrario, product_event se asigna a metadata.product_event_type. |
disposition |
security_result.detection_fields.value |
Si disposition no está vacío, se asigna a security_result.detection_fields.value con la clave Disposition Number. |
dst |
target.ip |
Si dst no está vacío y dvchost está vacío, se asigna a dst_ip. Por último, dst_ip se asigna a target.ip. |
dst_host |
target.hostname |
Si dst no está vacío y dvchost está vacío, se asigna a dst_host. Por último, dst_host se asigna a target.hostname. |
dst_ip |
target.ip |
Si dst no está vacío y dvchost está vacío, se asigna a dst_ip. Por último, dst_ip se asigna a target.ip. |
dst_port |
target.port |
Si dst no está vacío y dvchost está vacío, se asigna a dst_port. Por último, dst_port se asigna a target.port. |
duration |
network.session_duration.seconds |
Si duration no está vacío y no es 0, se asigna a network.session_duration.seconds. |
dvchost |
intermediary.ip |
Si dvchost no está vacío, se asigna a int_ip. Por último, int_ip se asigna a intermediary.ip si es una dirección IP válida; de lo contrario, se asigna a intermediary.hostname. |
file_path |
target.file.full_path |
Si file_path no está vacío, se asigna a target.file.full_path. |
host |
principal.ip |
Si host no está vacío, se asigna a src. Por último, src se asigna a principal.ip. |
http_method |
network.http.method |
Si requestMethod no está vacío, se asigna a http_method. De lo contrario, si method no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method. |
http_proxy_status_code |
network.http.response_code |
Si http_response está vacío, es 0 o -, y http_proxy_status_code no está vacío, se asigna a network.http.response_code. |
http_response |
network.http.response_code |
Si http_response no está vacío, no es 0 ni -, se asigna a network.http.response_code. |
http_user_agent |
network.http.user_agent |
Si http_user_agent no está vacío y no es -, se asigna a network.http.user_agent. |
in |
network.received_bytes |
Si in no está vacío, se asigna a bytes_in. Por último, bytes_in se asigna a network.received_bytes. |
int_host |
intermediary.hostname |
Si int_ip no está vacío y int_host no está vacío y es diferente de int_ip, se asigna a intermediary.hostname. |
int_ip |
intermediary.ip |
Si dvchost no está vacío, se asigna a int_ip. Por último, int_ip se asigna a intermediary.ip si es una dirección IP válida; de lo contrario, se asigna a intermediary.hostname. |
level |
target_role.name |
Si level no está vacío y role está vacío, se asigna a role. Por último, role se asigna a target_role.name. |
log_level |
security_result.severity |
Si severity es 1 o log_level contiene info o message contiene notice, security_result.severity se establece en INFORMATIONAL. Si severity es 7, security_result.severity se establece en HIGH. |
loginID |
principal.user.userid |
Si loginID no está vacío, se asigna a user. Por último, si user no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid. |
method |
network.http.method |
Si requestMethod no está vacío, se asigna a http_method. De lo contrario, si method no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method. |
NatRuleId |
security_result.detection_fields.value |
Si NatRuleId no está vacío, se asigna a security_result.detection_fields.value con la clave NatRuleId. |
out |
network.sent_bytes |
Si out no está vacío, se asigna a bytes_out. Por último, bytes_out se asigna a network.sent_bytes. |
pid |
target.process.pid |
Si pid no está vacío, se asigna a target.process.pid. |
policy |
target_role.description |
Si Policy no está vacío, se asigna a policy. Si policy no está vacío y no es -, se asigna a target_role.description. |
Policy |
target_role.description |
Si Policy no está vacío, se asigna a policy. Si policy no está vacío y no es -, se asigna a target_role.description. |
product_event |
metadata.product_event_type |
Si product no está vacío, se asigna a product_event. Si product_event y deviceFacility no están vacíos, se concatenan con - y se asignan a metadata.product_event_type. De lo contrario, product_event se asigna a metadata.product_event_type. |
proxyStatus-code |
network.http.response_code |
Si http_response está vacío o es 0 o -, y http_proxy_status_code está vacío y proxyStatus-code no está vacío, se asigna a network.http.response_code. |
refererUrl |
network.http.referral_url |
Si refererUrl no está vacío y no es -, se asigna a network.http.referral_url. |
requestClientApplication |
network.http.user_agent |
Si requestMethod no está vacío, se asigna a http_user_agent. Por último, http_user_agent se asigna a network.http.user_agent. |
requestMethod |
network.http.method |
Si requestMethod no está vacío, se asigna a http_method. Por último, http_method se asigna a network.http.method. |
role |
target_role.name |
Si level no está vacío y role está vacío, se asigna a role. Por último, role se asigna a target_role.name. |
RuleID |
security_result.rule_id |
Si RuleID no está vacío, se asigna a security_result.rule_id. |
serverStatus-code |
network.http.response_code |
Si http_response está vacío o es 0 o -, y http_proxy_status_code está vacío y proxyStatus-code no está vacío, se asigna a network.http.response_code. |
severity |
security_result.severity |
Si severity es 1 o log_level contiene info o message contiene notice, security_result.severity se establece en INFORMATIONAL. Si severity es 7, security_result.severity se establece en HIGH. |
spt |
principal.port |
Si spt no está vacío, se asigna a src_port. Por último, src_port se asigna a principal.port. |
src |
principal.ip |
Si src_host no está vacío, se asigna a source_ip_temp. Si source_ip_temp es una dirección IP válida y src está vacío, se asigna a src. Si host no está vacío, se asigna a src. Por último, src se asigna a principal.ip. |
src_host |
principal.hostname |
Si src_host no está vacío, se asigna a source_ip_temp. Si source_ip_temp no es una dirección IP válida, se asigna a principal.hostname. Si source_ip_temp es una dirección IP válida y src está vacío, se asigna a src. Por último, src se asigna a principal.ip. |
src_port |
principal.port |
Si src_port no está vacío, se asigna a principal.port. |
suser |
principal.user.userid |
Si loginID no está vacío, se asigna a user. Si suser no está vacío, se asigna a user. Por último, si user no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid. |
url |
target.url |
Si url no está vacío, se asigna a target.url. |
user |
principal.user.userid |
Si loginID no está vacío, se asigna a user. Si suser no está vacío, se asigna a user. De lo contrario, si usrName no está vacío, se asigna a user. Por último, si user no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid. |
usrName |
principal.user.userid |
Si loginID no está vacío, se asigna a user. Si suser no está vacío, se asigna a user. De lo contrario, si usrName no está vacío, se asigna a user. Por último, si user no está vacío, no es - y no contiene LDAP, se asigna a principal.user.userid. |
when |
metadata.event_timestamp |
Si when no está vacío, se analiza y se asigna a metadata.event_timestamp. |
| N/A | metadata.log_type |
El valor FORCEPOINT_WEBPROXY está codificado de forma fija en metadata.log_type. |
| N/A | metadata.product_name |
El valor Forcepoint Webproxy está codificado de forma fija en metadata.product_name. |
| N/A | metadata.vendor_name |
El valor Forcepoint está codificado de forma fija en metadata.vendor_name. |
| N/A | network.application_protocol |
Si dst_port es 80, network.application_protocol se establece en HTTP. Si dst_port es 443, network.application_protocol se establece en HTTPS. |
| N/A | principal.user.group_identifiers |
Si user no está vacío, no es - y contiene LDAP, se extrae la parte de la UO de la cadena del usuario y se asigna a principal.user.group_identifiers. |
| N/A | principal.user.user_display_name |
Si user no está vacío, no es - y contiene LDAP, se extrae la parte del nombre de usuario de la cadena del usuario y se asigna a principal.user.user_display_name. |
| N/A | security_result.action |
Si action_msg, action o act no están vacíos, sec_action se establece en ALLOW o BLOCK según sus valores. Por último, sec_action se asigna a security_result.action. |
| N/A | security_result.detection_fields.key |
El valor Disposition Number está codificado de forma rígida en security_result.detection_fields.key cuando se asigna disposition o cn1. El valor NatRuleId se codifica de forma fija en security_result.detection_fields.key cuando se asigna NatRuleId. El valor Category Number se codifica de forma fija en security_result.detection_fields.key cuando se asigna category_no. |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.