收集 OPNsense 防火墙日志
支持的语言:
Google SecOps
SIEM
此解析器可从 OPNsense 防火墙日志(syslog 和 CSV 格式)中提取字段,并将其映射到 UDM。它使用 grok 和 CSV 解析来处理“filterlog”应用日志,处理不同的日志格式和网络协议(TCP、UDP、ICMP 等),以填充 UDM 字段(例如 principal、target、network 和 security_result)。它还会添加供应商和产品名称等元数据,并根据正文和目标信息的存在情况确定事件类型。
准备工作
- 确保您拥有 Google Security Operations 实例。
- 确保您拥有对 OPNsense 网页界面的特权访问权限。
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 个人资料。
- 复制并保存组织详细信息部分中的客户 ID。
安装 BindPlane 代理
- 对于 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 代理以注入 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 代理以应用更改:
sudo systemctl bindplane restart
向 OPNsense 添加 Syslog 服务器配置
- 登录 OPNsense 网页界面。
- 依次前往系统 > 设置 > 日志记录。
- 在远程日志记录部分,勾选相应复选框,以启用将日志发送到远程 Syslog 服务器。
- 在远程 Syslog 服务器字段中,输入 Syslog 服务器的 IP 地址,包括端口(例如 10.10.10.10:54525)。
- 选择 Local0 作为 syslog facility。
将 Syslog 级别设置为 Alert。
点击保存应用更改。
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 :“标志”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 映射;如果 column17 为其他值,则嵌套在 additional.fields 下,键为“tcp_flags”。 |
column29 |
additional.fields[].key :“tcp_options”additional.fields[].value.string_value :column29 的值 |
如果 column17 为 TCP,则直接从 column29 映射;如果 column17 为其他值,则嵌套在 additional.fields 下,键为“tcp_options”。 |
column4 |
additional.fields[].key :“跟踪器”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”。如果为“通过”,则设置为“ALLOW”。 |
column8 |
network.direction |
从 column8 映射。如果为“in”,则设置为“INBOUND”。如果为“out”,则设置为“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 进行映射。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。