🥀
【PoC用】Cloudflare Log Explorer の Gateway Logs 対応
はじめに
Cloudflare 上でログを検索できる Log Explorer(執筆時点ベータ 2025 年 2 月)について。
以前ゾーンレベルのログに対する対応を紹介しましたが、アカウントレベルのログも対応開始しています。
下記の全てに対応しているわけではないので、徐々に追加されることを期待します。
ゾーンレベル・アカウントレベル
試す
Gateway(HTTP フォワードプロキシー)のログで試します。
シナリオ
- Gateway で TLS decryption 有効にしている
- 従業員がアクセスしようとするサイトに対し TLS decryption が発動する
- 宛先のサイトは不正な TLS 証明書を利用している
- Gateway は接続エラー画面(HTTP response code 526)を生成し、返す
→ この挙動は変更可能
👉️ サイトは badssl.com のリンクから選択
👉️ TLS decryption 対象時のブラウザー画面
探す
👉️ Account
> Analytics & Logs
> Log Explorer
Gateway HTTP
(Dataset)で
HTTPStatusCode
が 526(Filter)な
httphost
(Columuns)
を抽出します。
抽出できました。
CSV でエクスポートもできます。
custom SQL を使って、重複ホスト名をグループ化すると、重複がなくなり、ソートもできました。
API からも同様のことができます。
Output format が変えられます。
command
http -b -A bearer -a $API_TOKEN \
https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/logs/explorer/query/sql \
query=="SELECT httphost FROM gateway_http WHERE date ='2025-02-26'AND httpstatuscode = 526 GROUP BY httphost ORDER BY httphost ASC LIMIT 9" \
"accept: application/json"
output json
{
"errors": [],
"messages": [],
"result": [
{
"httphost": "1000-sans.badssl.com"
},
{
"httphost": "10000-sans.badssl.com"
},
{
"httphost": "3des.badssl.com"
},
{
"httphost": "captive-portal.badssl.com"
},
{
"httphost": "dh-composite.badssl.com"
},
{
"httphost": "dh-small-subgroup.badssl.com"
},
{
"httphost": "dh1024.badssl.com"
},
{
"httphost": "dh2048.badssl.com"
},
{
"httphost": "dh480.badssl.com"
}
],
"success": true
}
output ndjson
{"httphost":"1000-sans.badssl.com"}
{"httphost":"10000-sans.badssl.com"}
{"httphost":"3des.badssl.com"}
{"httphost":"captive-portal.badssl.com"}
{"httphost":"dh-composite.badssl.com"}
{"httphost":"dh-small-subgroup.badssl.com"}
{"httphost":"dh1024.badssl.com"}
{"httphost":"dh2048.badssl.com"}
{"httphost":"dh480.badssl.com"}
output csv
httphost
1000-sans.badssl.com
10000-sans.badssl.com
3des.badssl.com
captive-portal.badssl.com
dh-composite.badssl.com
dh-small-subgroup.badssl.com
dh1024.badssl.com
dh2048.badssl.com
dh480.badssl.com
その他、外部で
Logpush では外部で同様のことが確認可能です。
例を書きます。
R2 に Logpush し、検索
rclone
for P in `rclone lsf $LOGPATH`; do rclone cat $LOGPATH/$P --s3-decompress | jq -c '.|select(.HTTPHost|contains ("badssl.com"))|[.HTTPHost,.HTTPStatusCode,.URL]'; done | sort | uniq
["1000-sans.badssl.com",526,"https://1000-sans.badssl.com/"]
["1000-sans.badssl.com",526,"https://1000-sans.badssl.com/favicon.ico"]
["1000-sans.badssl.com",526,"https://1000-sans.badssl.com/test/dashboard/small-image.png"]
Axiom に Logpush し、検索
以上です。
一時的な調査だけでなく、検索した結果をセキュリティポリシーに動的に反映するなど、継続的な運用管理にも使えそうです。
Discussion