此工具用於從 Sentry Clickhouse 資料庫中提取並分析 failure rate 100% 的惡意請求,協助設定 WAF 規則。
- ✅ 自動從 Clickhouse 查詢 failure rate 100% 的請求
- ✅ 將結果匯出為 CSV 格式,方便後續處理
- ✅ 自動分析攻擊模式並分類
- ✅ 產生詳細的 Markdown 分析報告
- ✅ 提供可直接使用的 WAF 規則建議 (Cloudflare 格式)
cd /home/debian/service/sentry
./export_malicious_requests.sh
執行後會產生兩個檔案:
-
malicious_requests_100_failure.csv
- CSV 格式的完整資料
- 包含:HTTP method,路徑,請求次數,錯誤類型,時間範圍
-
malicious_requests_analysis.md
- Markdown 格式的分析報告
- 包含:統計圖表,攻擊模式分類,WAF 規則建議
http_method,transaction_name,total_requests,not_found_404,internal_error_5xx,unauthenticated_401,other_errors,first_seen,last_seen
GET,/*,51521,0,51521,0,0,2024-08-28 10:01:08,2025-10-13 13:58:29
GET,/.git/config,399,0,399,0,0,2024-09-08 18:23:31,2025-10-14 00:10:36
GET,/.env,322,0,322,0,0,2024-09-15 06:30:16,2025-10-13 09:31:30
報告包含以下章節:
- 📊 資料概述
- 🎯 攻擊模式分類統計
- 🔝 Top 20 惡意請求路徑
- 🛡️ WAF 規則建議
- 🔍 詳細攻擊模式範例
- ✅ 建議措施
編輯 export_malicious_requests.sh
,修改以下變數:
OUTPUT_CSV="${SCRIPT_DIR}/malicious_requests_$(date +%Y%m%d).csv"
OUTPUT_MD="${SCRIPT_DIR}/malicious_requests_analysis_$(date +%Y%m%d).md"
如需修改查詢條件 (例如:failure rate >= 90% 而非 100%),編輯 script 中的 SQL 查詢:
-- 原本:failure rate = 100%
HAVING countIf(transaction_status NOT IN (0, 2)) * 100.0 / COUNT(*) = 100
-- 改為:failure rate >= 90%
HAVING countIf(transaction_status NOT IN (0, 2)) * 100.0 / COUNT(*) >= 90
在 SQL 查詢中加入時間條件:
WHERE http_method IS NOT NULL
AND http_method != ''
AND transaction_name IS NOT NULL
AND transaction_name != ''
AND finish_ts >= now() - INTERVAL 30 DAY -- 只查詢最近 30 天
- 登入 Cloudflare Dashboard
- 選擇您的網域
- 前往 Security > WAF > Custom rules
- 點擊 Create rule
- 複製報告中的 WAF 規則表達式
- 先設定為 Log 模式觀察
- 確認無誤判後改為 Block 模式
- 目錄遍歷攻擊 (最高優先級)
- 敏感檔案存取攻擊
- 命令注入攻擊
- SQL 注入/XSS
- PHP/WordPress 探測
- 後台探測
- 通配符攻擊 (需謹慎設定)
設定規則後,可使用以下方式測試:
# 測試敏感檔案阻擋
curl -I https://your-domain.com/.git/config
# 測試 PHP 探測阻擋
curl -I https://your-domain.com/phpinfo.php
# 預期結果: 403 Forbidden 或 Cloudflare 錯誤頁面
# 檢查服務狀態
docker compose -f docker-compose.yml ps clickhouse
# 啟動服務
docker compose -f docker-compose.yml up -d clickhouse
# 確認 script 有執行權限
chmod +x export_malicious_requests.sh
# 確認目錄有寫入權限
ls -ld /home/debian/service/sentry
如果資料量過大導致查詢超時,可以:
- 增加查詢超時時間 (在 script 中修改)
- 限制查詢時間範圍 (只查詢最近 N 天)
- 增加最小請求次數過濾條件
# 檢查資料庫中是否有資料
docker compose -f docker-compose.yml exec -T clickhouse clickhouse-client --query "
SELECT COUNT(*) FROM default.transactions_local
"
# 檢查是否有失敗的 transaction
docker compose -f docker-compose.yml exec -T clickhouse clickhouse-client --query "
SELECT transaction_status, COUNT(*)
FROM default.transactions_local
GROUP BY transaction_status
"
0
= OK (2xx)1
= Cancelled2
= Unknown (default)3
= Invalid Argument4
= Deadline Exceeded5
= Not Found (404)7
= Already Exists13
= Internal Error (5xx)14
= Unavailable16
= Unauthenticated (401)
Failure Rate = (非 0 和 2 的 status 數量) / 總數量 * 100%
此工具只匯出 Failure Rate = 100% 的請求,代表這些請求從未成功過。
根據嚴重程度排序:
- 目錄遍歷 - 可能導致系統檔案洩漏
- 命令注入 - 可能執行任意系統命令
- 敏感檔案探測 - 可能洩漏憑證、設定
- SQL 注入 - 可能導致資料庫洩漏
- 後台探測 - 可能暴力破解管理介面
- API 探測 - 可能找到未授權的 API
- PHP/WordPress - 一般性掃描,風險較低
- ✅ 每週: 執行 script 並查看新的攻擊模式
- ✅ 每月: 更新 WAF 規則
- ✅ 每季: 檢視 WAF 規則有效性
建議設定以下告警:
- 惡意請求數量超過閾值
- 出現新的攻擊模式
- 特定路徑的失敗率突然上升
- 記錄每次更新 WAF 規則的日期和原因
- 保留歷史報告,追蹤攻擊趨勢
- 記錄誤判情況並調整規則
此專案採用 MIT License - 詳見 LICENSE 檔案