GraphQL Analytics API を使うと、ルールに一致した Cloudflare Network Firewall(旧 Magic Firewall)のネットワークトラフィックを確認できます。対象は、Network Firewall ダッシュボードで設定したルールと、Network Firewall Managed rules および Network Firewall IDS の一部として Cloudflare が管理するルールの両方です。
始める前に、API トークン が必要です。GraphQL Analytics の導入は GraphQL Analytics API を参照してください。
オブジェクト向けの Network Firewall GraphQL クエリを組み立てるには、Cloudflare アカウント ID が必要です。
- Cloudflare ダッシュボード ↗ にログインし、アカウントを選びます。
- ブラウザーのアドレスバーの URL は
https://dash.cloudflare.com/のあとに 16 進文字列が続きます。この 16 進文字列が Cloudflare アカウント ID です。
特定のルールの分析を集めるクエリを組み立てるには、各ファイアウォールルールのルール ID が必要です。
- Cloudflare ダッシュボードで Firewall Policies ↗ ページを開きます。
- Custom policies タブで、ルール ID が必要なルールを一覧から探し、三点リーダー > Edit を選びます。
- ID を探し、コピーボタンを選びます。
- Cancel を選び、Firewall Policies ページに戻ります。
このセクションでは、設定済みのすべての Network Firewall ルールについて、5 分間隔の件数を取得するテストクエリを実行します。次のコードを GraphiQL にコピーして貼り付けられます。
Analytics スキーマの詳細は GraphiQL で Analytics スキーマを確認する を参照してください。
query MagicFirewallExample($accountTag: string!, $start: Time, $end: Time) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
magicFirewallSamplesAdaptiveGroups(
filter: { datetime_geq: $start, datetime_leq: $end }
limit: 2
orderBy: [datetimeFiveMinute_DESC]
) {
sum {
bits
packets
}
dimensions {
datetimeFiveMinute
ruleId
}
}
}
}
}次の例は、直近 1 時間で悪意のある疑いがあるトラフィックストリーム上位 10 件について、パケット数とビット数の合計を表示します。結果を受け取ったあと、5 分平均のパケットレートで並べ替えられます。
各ストリームについて、次を表示します。
- 送信元と宛先の IP アドレス
- 受信した Cloudflare データセンター
- 1 時間以内に受信したトラフィック量(ビットとパケット)
- ファイアウォールルールが取ったアクション
query MagicFirewallObtainRules(
$accountId: string!
$ruleId: string
$start: Time
$end: Time
) {
viewer {
accounts(filter: { accountTag: $accountId }) {
magicFirewallNetworkAnalyticsAdaptiveGroups(
filter: { ruleId: $ruleId, datetime_geq: $start, datetime_leq: $end }
limit: 10
orderBy: [avg_packetRateFiveMinutes_DESC]
) {
sum {
bits
packets
}
dimensions {
coloCity
ipDestinationAddress
ipSourceAddress
outcome
}
}
}
}
}次の例は、直近 1 時間に Network Firewall IDS が検出したトラフィックストリーム上位 10 件について、パケット数とビット数の合計を表示します。
verdict を drop、outcome を pass にすると、検出としてマークされた(つまり verdict が drop)が、ドロップされなかった(たとえば outcome が pass)トラフィックに絞り込めます。現時点では、Network Firewall IDS は悪意のあるトラフィックを検出するだけで、トラフィックはドロップしないためです。
各ストリームについて、次を表示します。
- 送信元と宛先の IP アドレス。
- 受信した Cloudflare データセンター。
- 1 時間以内に受信したトラフィック量(ビットとパケット)。
query MagicFirewallObtainIDS($accountTag: string!, $start: Time, $end: Time) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
magicIDPSNetworkAnalyticsAdaptiveGroups(
filter: {
datetime_geq: $start
datetime_leq: $end
verdict: drop
outcome: pass
}
limit: 10
orderBy: [avg_packetRateFiveMinutes_DESC]
) {
sum {
bits
packets
}
dimensions {
coloCity
ipDestinationAddress
ipSourceAddress
}
}
}
}
}分析したすべてのトラフィックを、悪意のあるトラフィックとその他に分けて確認するには、次の例を使えます。応答には、5 分ごとのタイムスタンプごとに 2 件のエントリが含まれます。悪意のあるトラフィックでは verdict が drop、どの IDS ルールにも一致しなかったトラフィックでは verdict が pass になります。
query MagicFirewallTraffic($accountTag: string!, $start: Time, $end: Time) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
magicIDPSNetworkAnalyticsAdaptiveGroups(
filter: { datetime_geq: $start, datetime_leq: $end }
limit: 10
orderBy: [avg_packetRateFiveMinutes_DESC]
) {
sum {
bits
packets
}
dimensions {
coloCity
ipDestinationAddress
ipSourceAddress
verdict
}
}
}
}
}