收集 OPNsense 防火墙日志
支持的平台:
Google SecOps
SIEM
此解析器会从 OPNsense 防火墙日志(syslog 和 CSV 格式)中提取字段,并将其映射到 UDM。它使用 grok 和 CSV 解析“filterlog”应用日志,处理不同的日志格式和网络协议(TCP、UDP、ICMP 等),以填充 principal、target、network 和 security_result 等 UDM 字段。它还会添加供应商和产品名称等元数据,并根据是否存在主要对象和目标对象信息来确定事件类型。
准备工作
- 确保您有一个 Google Security Operations 实例。
- 确保您拥有对 OPNsense 网络界面的特权访问权限。
获取 Google SecOps 提取身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载提取身份验证文件。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
- 复制并保存组织详细信息部分中的客户 ID。
安装 BindPlane Agent
- 对于 Windows 安装,请运行以下脚本:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
- 对于 Linux 安装,请运行以下脚本:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
- 如需了解其他安装选项,请参阅此安装指南。
配置 BindPlane Agent 以提取 Syslog 并将其发送到 Google SecOps
- 访问安装了 BindPlane 的机器。
按如下方式修改
config.yaml
文件: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: testNamespace raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog exporters: - chronicle/chronicle_w_labels
使用以下命令重启 BindPlane Agent 以应用更改:
sudo systemctl bindplane restart
向 OPNsense 添加 Syslog 服务器配置
- 登录 OPNsense 网页界面。
- 依次前往系统 > 设置 > 日志记录。
- 在远程日志记录部分,选中将日志发送到远程 syslog 服务器复选框,以启用该功能。
- 在 Remote Syslog Servers 字段中,输入 syslog 服务器的 IP 地址,包括 PORT(例如 10.10.10.10:54525)。
- 选择 Local0 作为 syslog 设施。
将 Syslog 级别设置为提醒。
点击保存以应用更改。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
column1 |
security_result.rule_id |
直接从 column1 映射。 |
column10 |
additional.fields[].key :“tos”additional.fields[].value.string_value :column10 的值 |
直接从 column10 映射,嵌套在 additional.fields 下,键为“tos”。 |
column12 |
additional.fields[].key :“ttl”additional.fields[].value.string_value :column12 的值 |
直接从 column12 映射,嵌套在 additional.fields 下,键为“ttl”。 |
column13 |
additional.fields[].key :“ID”additional.fields[].value.string_value :column13 的值 |
直接从 column13 映射,嵌套在 additional.fields 下,键为“Id”。 |
column14 |
additional.fields[].key :“偏移量”additional.fields[].value.string_value :column14 的值 |
直接从 column14 映射,嵌套在 additional.fields 下,键为“offset”。 |
column15 |
additional.fields[].key :“flags”additional.fields[].value.string_value :column15 的值 |
直接从 column15 映射,嵌套在 additional.fields 下,键为“flags”。 |
column17 |
network.ip_protocol |
转换为大写后,直接从 column17 映射。 |
column18 |
network.received_bytes |
转换为无符号整数后,直接从 column18 映射。 |
column19 |
principal.ip |
直接从 column19 映射。 |
column20 |
target.ip |
直接从 column20 映射。 |
column21 |
principal.port (如果 column17 为 TCP 或 UDP)additional.fields[].key :“data_length”additional.fields[].value.string_value :提取的值(如果 column17 为 ICMP、GRE、ESP 或 IGMP) |
如果 column17 为 TCP/UDP,则直接从 column21 映射并转换为整数。否则,系统会使用 grok 提取“datalength”值,并将其放入 additional.fields 中,键为“data_length”。 |
column22 |
target.port |
如果 column17 为 TCP 或 UDP,则直接从 column22 映射,并转换为整数。 |
column24 |
additional.fields[].key :“tcp_flags”additional.fields[].value.string_value :column24 的值 |
如果 column17 为 TCP,则直接从 column24 映射;如果为 UDP,则嵌套在 additional.fields 下,键为“tcp_flags”。 |
column29 |
additional.fields[].key :“tcp_options”additional.fields[].value.string_value :column29 的值 |
如果 column17 为 TCP,则直接从 column29 映射;如果为 UDP,则嵌套在 additional.fields 下,键为“tcp_options”。 |
column4 |
additional.fields[].key :“tracker”additional.fields[].value.string_value :column4 的值 |
直接从 column4 映射,嵌套在 additional.fields 下,键为“tracker”。 |
column5 |
additional.fields[].key :“接口”additional.fields[].value.string_value :column5 的值 |
直接从 column5 映射,嵌套在 additional.fields 下,键为“interface”。 |
column6 |
security_result.rule_type |
直接从 column6 映射。 |
column7 |
security_result.action |
从 column7 映射而来。如果为“block”,则转换为大写的“BLOCK”。如果为“pass”,请设置为“ALLOW”。 |
column8 |
network.direction |
从 column8 映射而来。如果为“in”,请设置为“INBOUND”。如果为“出”,请设置为“OUTBOUND”。 |
domain |
principal.administrative_domain |
直接从 grok 提取的 domain 映射而来。如果同时存在主 IP 地址和目标 IP 地址,则设置为“NETWORK_CONNECTION”,否则设置为“GENERIC_EVENT”。已硬编码为“OPNSENSE”。已硬编码为“OPNSENSE”。 |
message |
各种字段 | 使用 grok 和 csv 过滤器进行解析,以提取各种字段。如需查看具体映射,请参阅其他行。 |
ts |
metadata.event_timestamp.seconds ,timestamp.seconds |
使用 grok 从消息字段解析,然后转换为时间戳。秒数值用于填充 metadata.event_timestamp.seconds 和 timestamp.seconds 。 |
application |
principal.application |
直接从 grok 提取的 application 映射而来。 |
更改
2023-11-22
- 新创建的解析器。