收集 Akamai WAF 日志
本文档介绍了如何使用 Akamai CEF 连接器和 Bindplane 将 Akamai WAF 日志注入到 Google Security Operations。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 安装 Bindplane 代理的 Windows 2016 或更高版本或 Linux 主机(带 systemd)
- 一台 Linux 服务器(建议使用 CentOS/RHEL/Ubuntu),至少具有 2 个 CPU 核心、6GB RAM、2GB 可用磁盘空间(用于 Akamai CEF 连接器)
- 在 CEF 连接器主机上安装了 Java 8 (JRE 1.8) 或更高版本
- 如果 Bindplane 在代理后面运行,请确保防火墙端口根据 Bindplane 代理要求处于开放状态,并且代理许可名单包含
*.cloudsecurity.akamaiapis.net和*.luna.akamaiapis.net - 对 Akamai 控制中心的特权访问权限
- 启用了 App & API Protector、Kona Site Defender、Web Application Protector、Bot Manager 或 Account Protector 的 Akamai 安全配置
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
- 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 个人资料。
- 复制并保存组织详细信息部分中的客户 ID。
在 Akamai Control Center 中启用 SIEM 集成
- 登录 Akamai 控制中心。
- 在网站和数据中心安全下,点击安全配置。
- 打开安全配置以及要收集 SIEM 数据的相应版本。
- 点击高级设置,然后展开 SIEM 集成的数据收集。
- 点击开启以启用 SIEM。
- 选择要导出哪些安全政策的数据:
- 所有安全政策:选择此选项可针对违反安全配置中任何或所有安全政策的事件发送 SIEM 数据。
- 特定安全政策:选择此选项可发送与一项或多项特定安全政策相关的数据。从下拉列表中选择相应政策。
- 可选:如果您使用账号保护器,并希望包含未加密的用户名,请选中包含用户名复选框。
- 可选:如果您想在 SIEM 事件中接收 JA4 指纹信息,请选中包含 JA4 客户端 TLS 指纹复选框。
- 可选:如果您想排除属于特定保护类型和操作的事件,请点击添加例外情况。选择您不希望 SIEM 收集的保护措施和相关操作。点击保存。
- 复制网络安全配置 ID 字段中的值。保存此 ID 以供日后使用。
- 点击激活,将安全配置更改推送到生产网络。在网络下,点击正式版,然后点击激活。
设置用户以在 Akamai Control Center 中管理 SIEM
- 在 Akamai Control Center 中,点击账号管理下的身份与访问权限。
- 在用户和 API 客户端标签页中,找到您要向其分配角色的用户,或点击创建用户按钮。
- 如需将 SIEM 角色分配给现有用户,请执行以下操作:
- 打开用户的账号,然后点击修改角色标签页。
- 找到相应群组,点击角色菜单,然后选择 Manage SIEM 角色。
- 点击提交。
- 如需为新用户分配 SIEM 角色,请执行以下操作:
- 点击创建用户。
- 输入用户的基本信息,然后前往分配角色部分。
- 找到相应群组,点击角色菜单,然后选择 Manage SIEM 角色。
- 点击保存。
在 Akamai 控制中心内预配 SIEM API 凭据
- 请访问 Akamai 文档中的创建身份验证凭据页面。
- 按照相应步骤为分配了 SIEM 管理权限的用户配置 SIEM API。
- 复制并妥善保存以下凭据:
- Access Token
- 客户端令牌
- 客户端密钥 (Client Secret)
- 基础网址
安装 Akamai CEF 连接器
- 在 Linux 服务器上,从 Akamai GitHub 代码库下载最新的 CEF 连接器分发软件包。
- 使用
wget或 SFTP 将软件包转移到您的服务器。 - 验证下载文件的 SHA256 哈希值,以确保完整性。
提取分发软件包:
unzip CEFConnector-<version>.zip导航到提取的目录:
cd CEFConnector-<version>如需安装该服务,请创建指向启动脚本的符号链接:
sudo ln -s /path/to/CEFConnector-<version>/bin/AkamaiCEFConnector.sh /etc/init.d/AkamaiCEFConnector
配置 Akamai CEF 连接器
导航到 CEF 连接器安装中的
config目录:cd config使用文本编辑器(例如
nano、vi)打开CEFConnector.properties文件:sudo nano CEFConnector.properties配置以下必需参数:
# Akamai API Configuration akamai.data.requesturlhost=https://cloudsecurity.akamaiapis.net akamai.data.configs=<YOUR_SECURITY_CONFIG_ID> akamai.data.timebased=false akamai.data.limit=200000 # API Credentials (from Step: Provision SIEM API credentials) akamai.data.accesstoken=<YOUR_ACCESS_TOKEN> akamai.data.clienttoken=<YOUR_CLIENT_TOKEN> akamai.data.clientsecret=<YOUR_CLIENT_SECRET> akamai.data.baseurl=<YOUR_BASE_URL> # CEF Format Configuration akamai.cefformatheader=CEF:0|Akamai|akamai_siem|1.0|eventClassId()|name()|severity() akamai.cefformatextension=act=appliedAction() app=${httpMessage.protocol} c6a2=ipv6src() c6a2Label="Source IPv6 Address" cs1=${attackData.rules} cs1Label="Rules" cs2=${attackData.ruleMessages} cs2Label="Rule Messages" cs3=${attackData.ruleData} cs3Label="Rule Data" cs4=${attackData.ruleSelectors} cs4Label="Rule Selectors" cs5=${attackData.clientReputation} cs5Label="Client Reputation" cs6=${attackData.apiId} cs6Label="API ID" devicePayloadId=${httpMessage.requestId} dhost=${httpMessage.host} dpt=${httpMessage.port} flexString1=${attackData.configId} flexString1Label="Security Config ID" flexString2=${attackData.policyId} flexString2Label="Firewall Policy Id" out=${httpMessage.bytes} request=requestURL() requestMethod=${httpMessage.method} src=${attackData.clientIP} start=${httpMessage.start} AkamaiSiemSlowPostAction=${attackData.slowPostAction} AkamaiSiemSlowPostRate=${attackData.slowPostRate} AkamaiSiemRuleVersions=${attackData.ruleVersions} AkamaiSiemRuleTags=${attackData.ruleTags} AkamaiSiemJA4=${identity.ja4} AkamaiSiemRuleActions=${attackData.ruleActions} # Connector Pull Configuration connector.refresh.period=60 connector.consumer.count=3 connector.retry=5 # Proxy Configuration (if applicable) # connector.proxy.host= # connector.proxy.port=将以下占位符替换为您的实际值:
<YOUR_SECURITY_CONFIG_ID>:您之前复制的 Web 安全配置 ID。对于多个配置,请用英文分号分隔 ID(例如12345;67890)。<YOUR_ACCESS_TOKEN>:Akamai API 凭据中的访问令牌<YOUR_CLIENT_TOKEN>:来自 Akamai API 凭据的客户端令牌<YOUR_CLIENT_SECRET>:Akamai API 凭据中的客户端密钥<YOUR_BASE_URL>:来自 Akamai API 凭据的基础网址
保存并关闭文件。
配置 CEF 连接器日志记录
- 前往 CEF 连接器安装中的
config目录。 使用文本编辑器打开
log4j2.xml文件:sudo nano log4j2.xml为发送到 Bindplane 的 syslog 输出配置以下参数:
<!-- Syslog Appender Configuration --> <Syslog name="SyslogAppender" host="<BINDPLANE_IP_ADDRESS>" port="<BINDPLANE_PORT>" protocol="<PROTOCOL>" facility="LOCAL0" format="RFC5424"> <PatternLayout pattern="%m%n"/> </Syslog>替换以下占位符:
<BINDPLANE_IP_ADDRESS>:安装了 Bindplane 代理的服务器的 IP 地址<BINDPLANE_PORT>:Bindplane 代理监听的端口号(例如,UDP 为514,TCP 为601)<PROTOCOL>:选择UDP或TCP
通过配置特定于 CEF 的设置,确保 CEF 连接器将日志发送到远程 syslog 服务器 (BindPpane):
# In CEFConnector.properties, ensure these are set: # Note: These settings are typically in log4j2.xml but referenced here for clarity保存并关闭文件。
启动 Akamai CEF 连接器
启动 CEF 连接器服务:
sudo /etc/init.d/AkamaiCEFConnector start验证服务是否正在运行:
sudo /etc/init.d/AkamaiCEFConnector status监控日志,确保连接器从 Akamai 拉取事件并将其发送到 Bindplane:
tail -f /path/to/CEFConnector-<version>/bin/logs/cefconnector.log
安装 Bindplane 代理
按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
其他安装资源
- 如需了解其他安装选项,请参阅此安装指南。
配置 Bindplane 代理以注入 Syslog 并将其发送到 Google SecOps
访问配置文件:
- 找到
config.yaml文件。通常,它位于 Linux 上的/etc/bindplane-agent/目录中或 Windows 上的安装目录中。 - 使用文本编辑器(例如
nano、vi或记事本)打开该文件。
- 找到
按如下方式修改
config.yaml文件:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" tcplog: # Alternative TCP receiver if using TCP protocol listen_address: "0.0.0.0:601" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in the Get ingestion authentication file section creds_file_path: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from the Get customer ID section customer_id: <YOUR_CUSTOMER_ID> # Select the appropriate regional endpoint based on where your Google SecOps instance is provisioned # For regional endpoints, see: https://cloud.google.com/chronicle/docs/reference/ingestion-api#regional_endpoints endpoint: malachiteingestion-pa.googleapis.com # Set the log_type to ensure the correct parser is applied log_type: 'AKAMAI_WAF' raw_log_field: body # Add optional ingestion labels for better organization ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog # - tcplog # Uncomment if using TCP exporters: - chronicle/chronicle_w_labels
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请运行以下命令:
sudo systemctl restart bindplane-agent如需在 Windows 中重启 Bindplane 代理,您可以使用服务控制台,也可以输入以下命令:
net stop BindPlaneAgent && net start BindPlaneAgent
验证日志注入
- 登录 Google SecOps 控制台。
- 前往搜索或原始日志扫描。
使用提取标签搜索最近的 Akamai WAF 日志:
metadata.log_type = "AKAMAI_WAF"验证日志是否显示,以及是否包含预期字段和时间戳。
检查 CEF 格式字段是否已正确解析并映射到 UDM。
问题排查
CEF 连接器问题
- 未提取任何事件:检查
cefconnector.log文件是否存在错误。验证 Akamai API 凭证是否正确,以及安全配置 ID 是否有效。 - 连接错误:确保代理设置(如果适用)已正确配置,并且所需网域已列入许可名单。
数据库重置:如果您需要重置偏移量跟踪,请运行:
sudo /etc/init.d/AkamaiCEFConnector resetdb
Bindplane 代理问题
- 日志未到达 Bindplane:验证 CEF 连接器是否已配置为将 syslog 发送到正确的 Bindplane IP 地址和端口。检查 CEF 连接器与 Bindplane 代理之间的防火墙规则。
日志未到达 Google SecOps:验证 Bindplane 配置文件、客户 ID 和注入身份验证路径。检查 Bindplane 日志是否存在错误:
sudo journalctl -u observiq-otel-collector -f
网络和连接
- 验证 CEF 连接器是否可以访问 Akamai SIEM API 端点。
- 验证 Bindplane 代理是否可以访问 Google SecOps 注入端点 (
malachiteingestion-pa.googleapis.com)。 - 检查所有必需的防火墙端口是否已打开。
检索过往安全事件
Akamai CEF 连接器以两种模式运行:
- 基于偏移量(推荐):连接器会自动记录收集到的安全性事件,近乎实时。当
akamai.data.timebased设置为false时,此为默认模式。 - 基于时间:可用于检索在特定时间段内(最长为过去 12 小时)发生的事件。
如需检索丢失或过往的安全事件,请执行以下操作:
打开连接器的配置文件:
sudo nano /path/to/CEFConnector-<version>/config/CEFConnector.properties更改基于时间的配置:
akamai.data.timebased=true akamai.data.timebased.from=<EPOCH_START_TIME> akamai.data.timebased.to=<EPOCH_END_TIME>- 将
<EPOCH_START_TIME>替换为以纪元格式表示的开始时间(在过去 12 小时内)。 - 将
<EPOCH_END_TIME>替换为以纪元格式表示的结束时间(可选;如果留空,则提取截至目前的所有事件)。
- 将
重启 CEF 连接器:
sudo /etc/init.d/AkamaiCEFConnector restart检索到历史数据后,恢复为偏移模式:
akamai.data.timebased=false再次重启 CEF 连接器。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
src (attackData.clientIP) |
principal.ip |
发出请求的客户端的来源 IP 地址 |
c6a2 (ipv6src) |
principal.ip |
如果 attackData.clientIP 采用 IPv6 格式,则为来源 IPv6 地址 |
dhost (httpMessage.host) |
target.hostname |
来自 HTTP HOST 标头的主机名 |
dpt (httpMessage.port) |
target.port |
入站请求使用的端口号 |
requestMethod (httpMessage.method) |
network.http.method |
传入请求的 HTTP 方法(GET、POST 等) |
request (request网址) |
target.url |
根据 httpMessage 字段计算出的完整网址 |
cs1 (attackData.rules) |
security_result.rule_id |
为此请求触发的规则的规则 ID |
cs2 (attackData.ruleMessages) |
security_result.rule_name |
触发的规则的消息 |
act (appliedAction) |
security_result.action |
采取的操作(提醒、拒绝、中止等) |
severity |
security_result.severity |
计算出的严重程度(检测为 5,缓解为 10) |
cs5 (attackData.clientReputation) |
security_result.threat_name |
客户端信誉的客户端 IP 得分 |
cs6(attackData.apiId) |
security_result.detection_fields |
API 保护的 API ID |
start (httpMessage.start) |
metadata.event_timestamp |
边缘服务器发起连接的时间(纪元格式) |
devicePayloadId (httpMessage.requestId) |
metadata.product_log_id |
消息的全局唯一 ID |
flexString1 (attackData.configId) |
security_result.detection_fields |
应用于相应请求的安全配置的 ID |
flexString2 (attackData.policyId) |
security_result.detection_fields |
应用于相应请求的防火墙政策的 ID |
AkamaiSiemJA4 (identity.ja4) |
network.tls.client.ja3 |
JA4 客户端 TLS 指纹 |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。