Recopila registros de NGINX
Este analizador de NGINX controla los registros con formato JSON y syslog. Extrae campos de varios formatos de registro y los normaliza en el formato UDM. El analizador enriquece el evento con metadatos para la administración del servidor y la actividad de red, incluidos los accesos de los usuarios y las solicitudes HTTP. También controla la lógica de los eventos de SSH y propaga los campos de la UDM según los datos extraídos.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de que NGINX se esté ejecutando y generando registros.
- Asegúrate de tener acceso raíz a la máquina anfitrión de NGINX.
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.
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
- Para la instalación de Windows, ejecuta la siguiente secuencia de comandos:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- Para la instalación de Linux, ejecuta la siguiente secuencia de comandos:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- Puedes encontrar opciones de instalación adicionales en esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
- Accede a la máquina en la que está instalado BindPlane.
Edita el archivo
config.yaml
de la siguiente manera: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
Reinicia el agente de BindPlane para aplicar los cambios:
sudo systemctl restart bindplane
Identifica la ubicación de los archivos de registro de NGINX
Los registros de NGINX se almacenan en:
* Registros de acceso: /var/log/nginx/access.log
* Registros de errores: /var/log/nginx/error.log
1. Accede al host de NGINX con credenciales de administrador.
1. Ejecuta el siguiente comando y busca las rutas de acceso de los archivos de registro en tu host de NGINX:
sudo cat /etc/nginx/nginx.conf | grep log
Configura NGINX para reenviar registros a Bindplane
Abre el archivo de configuración de NGINX (por ejemplo,
/etc/nginx/nginx.conf
):sudo vi /etc/nginx/nginx.conf
Edita la configuración y reemplaza
<BINDPLANE_SERVER>
y<BINDPLANE_PORT>
por tus valores: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; }
Reinicia NGINX para aplicar los cambios:
sudo systemctl reload nginx
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
_Internal_WorkspaceResourceId |
target.resource.product_object_id |
Asignación directa |
Computer |
principal.asset.hostname |
Asignación directa |
Facility |
additional.fields["facility"] |
Asignación directa |
HostName |
principal.asset.hostname |
Se asigna directamente si no hay src_ip |
ProcessName |
principal.application |
Asignación directa |
SeverityLevel |
security_result.severity |
Se asigna a INFORMATIONAL si el valor es "info". |
SourceSystem |
principal.asset.platform |
Se asigna a LINUX si el valor coincide con "Linux". |
SyslogMessage |
Varios campos | Se analiza con grok para extraer time , method , target_path , protocol , response_code , referral_url , user_agent , target_ip , target_host y cache |
TenantId |
additional.fields["TenantId"] |
Asignación directa |
acct |
principal.user.user_id |
Se asigna directamente si no está vacío o si es “?”. |
addr |
principal.asset.ip |
Asignación directa |
audit_epoch |
metadata.event_timestamp |
Se convierte en una marca de tiempo con el formato "UNIX". Los nanosegundos se extraen del mensaje de registro original. |
cache |
additional.fields["cache"] |
Asignación directa |
collection_time.nanos |
metadata.event_timestamp.nanos |
Se usa para los nanosegundos de la marca de tiempo del evento, si está disponible |
collection_time.seconds |
metadata.event_timestamp.seconds |
Se usa para los segundos de la marca de tiempo del evento, si está disponible. |
data |
Varios campos | La fuente principal de datos, que se analiza de forma diferente según el formato de registro (Syslog, JSON o cualquier otro) |
exe |
target.process.command_line |
Se asigna directamente después de quitar las barras diagonales y las comillas. |
hostname |
principal.asset.hostname O principal.asset.ip |
Si es una dirección IP, se asigna a principal.asset.ip . De lo contrario, se asigna a principal.asset.hostname . |
msg |
metadata.description |
Se asignan directamente como la descripción |
node |
target.asset.hostname |
Asignación directa |
pid |
target.process.pid |
Asignación directa |
protocol |
network.application_protocol |
Se asigna a HTTP si el valor coincide con "HTTP". |
referral_url |
network.http.referral_url |
Se asigna directamente si no está vacío o si es “-”. |
res |
security_result.action_details |
Asignación directa |
response_code |
network.http.response_code |
Se asignan directamente y se convierten en números enteros. |
ses |
network.session_id |
Asignación directa |
src_ip |
principal.asset.ip |
Asignación directa |
target_host |
target.asset.hostname |
Asignación directa |
target_ip |
target.asset.ip |
Se asignan directamente después de convertir la representación de cadena en un array JSON y, luego, extraer las IP individuales. |
target_path |
target.url |
Asignación directa |
time |
metadata.event_timestamp |
Se analiza para extraer la marca de tiempo con el formato “dd/MMM/yyyy:HH:mm:ss Z”. |
user_agent |
network.http.user_agent |
Se asigna directamente si no está vacío o si es “-”. |
metadata.event_type |
Se establece en "GENERIC_EVENT" inicialmente y, luego, se puede reemplazar en función de otros campos, como terminal y protocol . El valor predeterminado es "USER_UNCATEGORIZED" si el patrón de Grok principal no coincide. Se establece en "NETWORK_HTTP" si protocol es HTTP y target_ip está presente, y en "STATUS_UPDATE" si protocol es HTTP, pero target_ip no está presente. |
|
metadata.log_type |
Se estableció en “NGINX”. | |
metadata.product_name |
Se estableció en “NGINX”. | |
metadata.vendor_name |
Se estableció en “NGINX”. | |
network.ip_protocol |
Establece el valor en "TCP" si terminal es "sshd" o "ssh", o si el patrón principal de Grok no coincide. |
|
principal.asset_id |
Se establece en "GCP.GCE:0001" si terminal es "sshd" o "ssh". Se establece en "GCP.GCE:0002" si el patrón de Grok principal no coincide. |
|
extensions.auth.type |
Se establece en "MACHINE" si terminal es "sshd" o "ssh". |
Cambios
2022-09-10
- Se creó un analizador predeterminado y se borró el analizador específico del cliente.
- Lanzamiento inicial del analizador.