本示例将使用 GraphQL Analytics API 查询指定时间范围内的防火墙事件。
以下 API 调用将请求一小时内的防火墙事件,并输出所请求的字段。请务必将 <CLOUDFLARE_ZONE_TAG>、<EMAIL> 和 <API_TOKEN>1 替换为你的 zone 标签和 API 凭据,并根据需要调整 datetime_geg 和 datetime_leq 的值。
echo '{ "query":
"query ListFirewallEvents($zoneTag: string, $filter: FirewallEventsAdaptiveFilter_InputObject) {
viewer {
zones(filter: { zoneTag: $zoneTag }) {
firewallEventsAdaptive(
filter: $filter
limit: 10
orderBy: [datetime_DESC]
) {
action
clientAsn
clientCountryName
clientIP
clientRequestPath
clientRequestQuery
datetime
source
userAgent
}
}
}
}",
"variables": {
"zoneTag": "<CLOUDFLARE_ZONE_TAG>",
"filter": {
"datetime_geq": "2022-07-24T11:00:00Z",
"datetime_leq": "2022-07-24T12:00:00Z"
}
}
}' | tr -d '\n' | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @-返回的结果将为 JSON(按请求),因此将输出通过管道传给 jq 会更易于阅读,例如:
... | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @- | jq .
#=> {
#=> "data": {
#=> "viewer": {
#=> "zones": [
#=> {
#=> "firewallEventsAdaptive": [
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "block",
#=> "clientAsn": "5089",
#=> "clientCountryName": "GB",
#=> "clientIP": "203.0.113.69",
#=> "clientRequestPath": "/%3Cscript%3Ealert()%3C/script%3E",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:11:24Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "58224",
#=> "clientCountryName": "IR",
#=> "clientIP": "2.183.175.37",
#=> "clientRequestPath": "/api/v2",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:00:54Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
#=> },
#=> {
#=> "action": "log",
#=> "clientAsn": "58224",
#=> "clientCountryName": "IR",
#=> "clientIP": "2.183.175.37",
#=> "clientRequestPath": "/api/v2",
#=> "clientRequestQuery": "",
#=> "datetime": "2020-04-24T10:00:54Z",
#=> "source": "waf",
#=> "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
#=> }
#=> ]
#=> }
#=> ]
#=> }
#=> },
#=> "errors": null
#=> }firewallEventsAdaptive 数据集为 Security Events 提供数据,其数据保留限制与 Security Analytics 所用数据集不同。超出数据保留窗口的查询会返回类似以下的错误:
cannot request data older than 2678400s有关 firewallEventsAdaptive 数据集按套餐的限制信息,请参阅 Security Events。
要以编程方式发现你的 zone 的确切限制,请查询 settings 节点:
{
viewer {
zones(filter: { zoneTag: "<CLOUDFLARE_ZONE_TAG>" }) {
settings {
firewallEventsAdaptive {
maxDuration
maxPageSize
notOlderThan
}
httpRequestsAdaptive {
maxDuration
maxPageSize
notOlderThan
}
}
}
}
}有关 settings 节点的更多信息,请参阅 Settings node。
-
有关配置和权限的更多信息,请参阅 Configure an Analytics API token。 ↩