Cloudflare WAF Custom Rules: Vá False Positive và 5 mẹo tinh chỉnh bảo mật nâng cao
WAF Managed Rules (đã nói ở bài trước) tự động chặn phần lớn các kiểu tấn công đã biết, kể cả những lỗ hổng zero-day mới phát hiện. Nhưng không bộ lọc nào hoàn hảo tuyệt đối — đôi khi hệ thống “báo động nhầm”, chặn đứng một request hoàn toàn vô hại chỉ vì nó tình cờ trông giống mẫu tấn công. Custom Rules chính là công cụ giúp bạn tự viết thêm luật riêng để xử lý những tình huống đặc thù mà Managed Rules chưa xử lý tốt.
🔔 False Positive — khi chuông báo động kêu nhầm
Hãy hình dung chuông báo trộm trong nhà kêu ầm ĩ giữa đêm nhưng thực ra chẳng có kẻ trộm nào cả — đó chính là false positive. Trong bảo mật ứng dụng web, hiện tượng này xảy ra khi công cụ quét (như WAF) gắn cờ một request là nguy hiểm — ví dụ nghi ngờ SQL Injection — trong khi bản chất request đó hoàn toàn hợp lệ, chỉ là cấu trúc dữ liệu hơi đặc biệt. Nói ngắn gọn: hệ thống “chặn nhầm” thay vì “chặn đúng”.
Vậy làm sao xử lý những trường hợp chặn nhầm mà không cần tắt hẳn cả bộ Managed Rules — vốn vẫn đang bảo vệ rất tốt cho phần traffic còn lại? Câu trả lời nằm ở Custom Rules.
⚙️ Custom Rules là gì?
Custom Rules cho phép bạn tự định nghĩa cách Cloudflare xử lý traffic đổ vào một zone, dựa trên điều kiện do chính bạn đặt ra — thay vì phụ thuộc hoàn toàn vào các ruleset có sẵn. Giống như Managed Rules, Custom Rules cũng chạy trên cùng Ruleset Engine của Cloudflare, gồm 2 thành phần cốt lõi:
- Biểu thức điều kiện (Expression): mô tả tiêu chí cần đối sánh với traffic, viết bằng Rules Language (ví dụ
ip.src eq 192.0.2.1) - Hành động (Action): việc cần thực hiện khi có request khớp điều kiện — Block, Challenge, Log, Skip…
📋 Quy trình tạo một Custom Rule
Bước 1 — Chọn đúng tài khoản và domain
Đăng nhập dash.cloudflare.com, ở màn hình Accounts chọn tài khoản đang quản lý domain cần cấu hình, sau đó chọn đúng zone (domain) muốn thêm rule.
Bước 2 — Mở Custom rules và tạo mới
Vào Security → WAF → Custom rules → bấm Create rule. Trang Create rule sẽ hiện ra với 3 vùng chính: đặt tên rule, khai báo điều kiện khớp request, và chọn hành động thực hiện.
Bước 3 — Khai báo điều kiện (Field / Operator / Value)
Mỗi điều kiện gồm 3 phần: Field là thuộc tính của request (IP Source, Hostname, URI, User Agent, Country, Verified Bot…), Operator là phép so sánh (equals, contains, does not equal, is in list…), Value là giá trị tham chiếu. Có thể nối nhiều điều kiện bằng And/Or.
Tham khảo đầy đủ danh sách field tại Rules language fields và các toán tử so sánh tại Comparison operators.
Bước 4 — Chọn hành động & triển khai
Tại mục Then take action…, chọn hành động phù hợp rồi bấm Deploy để áp dụng ngay, hoặc Save as Draft nếu muốn xem lại trước khi kích hoạt chính thức.
🎯 Các loại Action và cấu hình Custom Response
Phần Choose action cung cấp 6 lựa chọn:
Block
Từ chối hoàn toàn request khớp điều kiện
Managed Challenge
Đưa ra thử thách không tương tác hoặc CAPTCHA tùy ngữ cảnh
JS Challenge / Interactive Challenge
Yêu cầu trình duyệt giải mã JS hoặc tương tác xác minh là người thật
Log
Chỉ ghi nhận, không chặn — phù hợp giai đoạn thử nghiệm rule mới
Skip
Bỏ qua một hoặc nhiều tính năng bảo mật khác cho request khớp
Khi chọn Block, bạn có thể tùy chỉnh thêm nội dung phản hồi trả về cho người dùng thay vì dùng trang mặc định của Cloudflare:
Response type khả dụng
- Default Cloudflare WAF block page
- Custom HTML — mime
text/html - Custom Text — mime
text/plain - Custom JSON — mime
application/json - Custom XML — mime
text/xml
Lưu ý cấu hình
Response code chỉ nhận giá trị trong khoảng 400–499, mặc định là 403. Response body giới hạn tối đa 2 KB — phù hợp để trả về trang lỗi thương hiệu riêng hoặc JSON báo lỗi cho API.
⏭️ Hành động Skip — bỏ qua bảo vệ có chủ đích
Skip dùng khi bạn muốn một nhóm request nhất định không bị một hoặc nhiều lớp bảo mật khác xử lý — ví dụ traffic từ chính hệ thống nội bộ hoặc bot đã xác minh. Một rule cấu hình với action Skip còn được gọi là skip rule.
Log matching requests: nếu tắt toggle này, các request khớp với skip rule sẽ không xuất hiện trong Security overview — hữu ích khi muốn giữ dashboard sạch khỏi traffic nội bộ đã được whitelist hợp lệ.
🔢 Thứ tự rule quan trọng như thế nào?
Custom Rules được Cloudflare đánh giá tuần tự theo thứ tự (Order) từ trên xuống. Một số action như Block hoặc Skip có thể khiến hệ thống dừng đánh giá các rule phía sau ngay khi khớp — vì vậy luôn đặt các rule “cho phép” (Allow/Skip) lên trên các rule “chặn” để tránh tình huống bot hợp lệ bị chặn nhầm trước khi kịp chạm tới rule whitelist.
💡 5 mẹo thực chiến để Custom Rules phát huy tối đa hiệu quả
Mẹo 1 — Whitelist các bot đã xác minh (Google, Meta, Microsoft…)
Các bộ rule kiểm soát bot đôi khi chặn nhầm cả những bot “chính chủ” như Googlebot hay bot của Meta — ảnh hưởng trực tiếp đến SEO. Giải pháp là tạo một rule cho phép (whitelist) đặt lên đầu danh sách:
Tại WAF → Custom rules → Create rule: đặt tên rule, thêm điều kiện Verified Bot equals true. Nếu muốn giới hạn thêm phạm vi (chỉ áp dụng cho một số đường dẫn cụ thể), nối thêm điều kiện bằng Or với field như ASN, URI Path, User Agent hoặc JA3 Fingerprint. Chọn action Skip → tick All remaining custom rules, All managed rules, All Super Bot Fight Mode Rules → Deploy.
Mẹo 2 — Tận dụng Managed IP Lists thay vì tự thống kê IP xấu
Thay vì tự sưu tầm danh sách IP độc hại, Cloudflare cung cấp sẵn các Managed IP Lists được cập nhật liên tục dựa trên threat intelligence toàn cầu:
Open Proxies
IP của Open HTTP/SOCKS5 proxy — thường dùng để tấn công và ẩn danh kẻ tấn công
Anonymizers
Open SOCKS Proxies, VPN, TOR node — dùng để ẩn danh
VPNs
Địa chỉ IP của các máy chủ VPN đã biết
Malware
IP nguồn phát tán mã độc
Botnets, Command and Control Servers
IP của máy chủ điều khiển botnet (C2) đã được xác định
Mẹo 3 — Khai thác WAF Attack Score để bắt cả những biến thể tấn công
Managed Rules hoạt động dựa trên signature — các mẫu vector tấn công đã được định danh sẵn, nên tỷ lệ dương tính giả khá thấp. Nhược điểm là chúng kém nhạy với các biến thể được kẻ tấn công biến đổi nhẹ để né signature, kiểu kỹ thuật fuzzing. WAF Attack Score giải quyết khoảng trống này bằng cách dùng machine learning để chấm điểm khả năng độc hại của từng request, từ 1 đến 99.
| Nhãn trên Dashboard | Giá trị Field | Khoảng điểm |
|---|---|---|
| Attack | attack |
1 – 20 |
| Likely attack | likely_attack |
21 – 50 |
| Likely clean | likely_clean |
50 – 80 |
| Clean | clean |
81 – 99 |
💡 Để tối đa hóa khả năng bảo vệ, Cloudflare khuyến nghị dùng cả Managed Rules lẫn Attack Score trong Custom Rules — hai lớp bổ trợ cho nhau thay vì thay thế nhau.
Tạo rule với các field WAF Attack Score, WAF RCE Attack Score, WAF SQLi Attack Score, WAF XSS Attack Score — operator less than or equal to, giá trị ví dụ 20, nối với nhau bằng Or:
(cf.waf.score le 20) or (cf.waf.score.rce le 20) or (cf.waf.score.sqli le 20) or (cf.waf.score.xss le 20)
→ Action: Managed Challenge → Deploy.
🌏 Bonus: chặn theo quốc gia cho website phục vụ thị trường riêng biệt
Nếu dịch vụ chỉ phục vụ người dùng tại một quốc gia cụ thể (ví dụ Việt Nam), có thể tạo thêm rule: field Country does not equal Vietnam, action Managed Challenge, đặt Place at → First để ưu tiên đánh giá trước. Lưu ý: chỉ nên áp dụng khi phân tích traffic cho thấy lượng truy cập ngoài quốc gia mục tiêu cao bất thường — không khuyến khích dùng đại trà vì có thể chặn nhầm khách hàng/đối tác hợp lệ ở nước ngoài.
Mẹo 4 — Tinh chỉnh Cloudflare Managed Ruleset bằng traffic thật
Trước khi mạnh tay chuyển Managed Rules sang chế độ Block, nên trải qua một vòng “huấn luyện” dựa trên traffic thực tế để loại bỏ các false positive còn sót lại:
4.1–4.2: Cho người dùng thật truy cập website và thao tác đầy đủ các tính năng trong vài ngày để tạo ra mẫu traffic đại diện. Sau đó vào Security → Events, dùng bộ lọc Managed rules để tách riêng những request đã bị bộ Managed Rules đánh dấu.
4.3: Mở từng event để xem chi tiết — Rule ID nào kích hoạt, request đến từ URI/hostname nào, qua HTTP Method gì, User Agent ra sao. Đây là dữ liệu để xác định request đó có thực sự nguy hiểm hay chỉ là hành vi hợp lệ của ứng dụng (ví dụ một API nội bộ dùng method PUT bất thường).
4.4: Với mỗi false positive xác định được, tạo Exception hoặc Custom Rule để bypass đúng rule đó cho đúng URI/hostname liên quan — lặp lại quá trình này nhiều vòng cho đến khi không còn false positive đáng kể.
4.5: Khi traffic đã “sạch”, chọn hàng loạt các rule còn lại trong Managed Ruleset (theo tag hoặc Select all) → Set action → Block để chính thức chuyển từ chế độ quan sát (Log) sang chế độ ngăn chặn thật sự.
Mẹo 5 — Tinh chỉnh OWASP Core Ruleset theo mức độ rủi ro false positive
OWASP Core Ruleset có độ nhạy cao hơn Managed Ruleset thông thường, nên cũng dễ gây false positive hơn. Các rule OWASP được Cloudflare phân loại thành 4 nhóm theo tần suất gây báo động giả:
Hardly any false positive
Gần như không bao giờ chặn nhầm
Few false positives
Thỉnh thoảng mới chặn nhầm
Frequent false positives
Thường xuyên chặn nhầm
Very frequent false positives
Rất hay chặn nhầm — cân nhắc tắt
5.1–5.4: Quy trình tương tự Mẹo 4 — tạo traffic sạch, vào Security → Events nhưng lần này lọc theo Cloudflare OWASP Core Ruleset, rồi mở chi tiết từng event để xem rule nào (ví dụ 949110: Inbound Anomaly Score Exceeded) cùng điểm OWASP score, URI, hostname, User Agent liên quan.
5.5 — Đọc Additional logs để thấy toàn bộ rule con bị kích hoạt
Một request thường kích hoạt cùng lúc nhiều rule OWASP nhỏ (ví dụ phát hiện ký tự bất thường trong header, dấu hiệu SQL injection probing…), mỗi rule cộng dồn một điểm số (+3, +5…) vào tổng Anomaly Score. Mở rộng mục Additional logs để xem đầy đủ danh sách này trước khi quyết định bypass rule nào.
5.6 — Nguyên tắc khi quyết định bypass rule OWASP
- Tìm hiểu kỹ chức năng và mức độ quan trọng của từng rule trước khi đụng vào
- Ưu tiên xử lý các rule rơi vào nhóm hay gây false positive trước
- Hạn chế tắt hẳn rule có Paranoia Level thấp — thay vào đó tạo Exception giới hạn theo URI, User Agent hoặc hostname cụ thể
- Chỉ cân nhắc tắt hẳn những rule có Paranoia Level cao và thuộc nhóm rất hay gây false positive
5.7 — Chuyển cấu hình OWASP sang Block sau khi đã tối ưu
Lặp lại các bước trên cho đến khi traffic không còn false positive đáng kể, sau đó cập nhật 3 thông số cấu hình của Cloudflare OWASP Core Ruleset:
- OWASP Anomaly Score Threshold: ngưỡng điểm kích hoạt Firewall (ví dụ High – 25 trở lên)
- OWASP Paranoia Level: mức độ “khó tính” của bộ rule, PL càng cao càng kích hoạt nhiều rule nghiêm ngặt hơn
- OWASP Action: chuyển từ Log sang Block để chính thức chặn thay vì chỉ ghi nhận
5.8 — Kiểm chứng lại khả năng bảo vệ sau khi tối ưu
Sau khi hoàn tất tinh chỉnh, đừng quên kiểm tra lại xem hệ thống còn đủ chặt hay không bằng cách: chạy công cụ dò quét lỗ hổng Web Application, dùng các dịch vụ kiểm thử WAF dạng Security Control Validation, hoặc thử các kỹ thuật bypass WAF/fuzzing được chia sẻ trong cộng đồng security — đảm bảo việc nới lỏng rule không vô tình mở ra lỗ hổng mới.
💡 Tổng kết nhanh từ Next Step
- Đừng vội tắt hẳn rule khi gặp false positive — ưu tiên Exception/Skip cho đúng phạm vi cần thiết
- Sắp xếp thứ tự rule hợp lý: các rule “cho phép” (Allow/Skip) luôn đặt trước rule “chặn”
- Kết hợp Managed Rules với WAF Attack Score để vừa bắt được signature đã biết, vừa bắt được biến thể tấn công mới
- Tận dụng Managed IP Lists của Cloudflare thay vì tự xây danh sách IP xấu — vừa nhanh vừa luôn cập nhật
- Luôn trải qua giai đoạn quan sát (Log) bằng traffic thật trước khi chuyển Managed Ruleset/OWASP sang Block
- Kiểm chứng lại bằng công cụ quét hoặc dịch vụ test WAF sau mỗi đợt tinh chỉnh lớn
Cần hỗ trợ cấu hình Custom Rules?
Đội ngũ Next Step hỗ trợ thiết kế và tinh chỉnh Custom Rules, Managed Ruleset, OWASP Core Ruleset phù hợp với đặc thù từng ứng dụng — liên hệ (+84) 933 810 688 hoặc [email protected].