Cloudflare WAF cho WordPress tại Việt Nam: chặn POST tới wp-login.php & XML-RPC từ ngoài VN

Bài viết này giới thiệu một quy tắc Cloudflare WAF đơn giản mà “đánh trúng” hai bề mặt tấn công phổ biến nhất của WordPress: wp-login.phpxmlrpc.php. Chiến lược: chỉ cho phép yêu cầu POST từ Việt Nam, còn lại sẽ bị chặn/challenge. Cách này giảm mạnh brute force, credential stuffing, và botnet bắn XML-RPC từ nước ngoài, trong khi không ảnh hưởng người dùng thực tại VN.

Cloudflare WAF cho WordPress tại Việt Nam: chặn POST tới wp-login.php & XML-RPC từ ngoài VN

Biểu thức WAF đề xuất

(http.request.uri.path contains "wp-login.php" and http.request.method eq "POST" and not ip.src.country in {"VN"} and not cf.client.bot)
or
(http.request.uri.path contains "xmlrpc.php" and http.request.method eq "POST" and not cf.client.bot)

Ý nghĩa:

  • wp-login.php: mọi yêu cầu POST từ ngoài Việt Nam (không phải bot hợp lệ do Cloudflare nhận diện) sẽ bị chặn/challenge.
  • xmlrpc.php: mọi yêu cầu POST (dù ở đâu) sẽ bị chặn/challenge (trừ bot hợp lệ). Thực tế 99% POST vào XML-RPC là brute force/pingback spam, nên mặc định chặn.
  • not cf.client.bot: loại trừ bot “tốt” (Googlebot, Bingbot…) để tránh tai nạn khi chúng thu thập dữ liệu hợp lệ.

Khi nào nên dùng quy tắc này

  • Website phục vụ chính cho Việt Nam, admin/biên tập đăng nhập tại VN.
  • Không dùng WordPress mobile app/Jetpack/ứng dụng ngoài quốc gia (vì các app này hay dùng XML-RPC qua IP quốc tế).
  • Muốn giảm nhanh log brute force và tải CPU do spam login/XML-RPC.

Cách tạo rule trong Cloudflare

  1. Vào Security > WAF > Custom rules > Create rule.
  2. Đặt tên: WP Login & XML-RPC hardening (VN).
  3. Nhấn Edit expression và dán biểu thức ở trên.
  4. Action: gợi ý Managed Challenge (an toàn hơn “Block” vì dễ gỡ false-positive), hoặc “Block” nếu bạn chắc chắn.
  5. Deploy. Kéo rule này lên ưu tiên cao (priority nhỏ) hơn các rule chung chung khác.

Biến thể thường dùng

1) Cho phép thêm vài quốc gia ngoài VN (admin đi công tác):

(http.request.uri.path contains "wp-login.php" and http.request.method eq "POST" and not ip.src.country in {"VN","JP","SG"} and not cf.client.bot)
or
(http.request.uri.path contains "xmlrpc.php" and http.request.method eq "POST" and not cf.client.bot)

2) Chỉ “Challenge” wp-login từ ngoài VN, còn xmlrpc thì “Block” hẳn:
Tạo 2 rule tách biệt, đặt Action khác nhau cho từng rule.

3) Thay vì chặn XML-RPC toàn cầu, chỉ chặn brute force:
Nếu bạn bắt buộc dùng XML-RPC (Jetpack, app di động), hãy chuyển rule XML-RPC sang Rate Limit (5–10 POST/phút/IP) tại Security > WAF > Rate limiting rules.

Kiểm thử & giám sát

  • Dùng Firewall Events để xem log những yêu cầu bị chặn/challenge, lọc theo path /wp-login.php hoặc /xmlrpc.php.
  • Kiểm thử bằng curl từ máy chủ ngoài VN:
    curl -i -X POST https://example.com/wp-login.php -d "log=test&pwd=123"
  • Nếu dùng “Managed Challenge”, bạn sẽ thấy response 403/401/5xx kèm tiêu đề thử thách; với “Block” là 403.

Xử lý false-positive (ngoại lệ hợp lệ)

  • Admin/Editor dùng VPN hoặc đi nước ngoài: tạo IP Access Rule hoặc IP List chứa IP/VPN của team, rồi thêm điều kiện and not ip.src in $ALLOW_ADMIN trong biểu thức.
  • Jetpack/WordPress App: nếu bắt buộc dùng XML-RPC, chuyển rule XML-RPC sang “Managed Challenge” hoặc dùng Rate Limiting; hoặc whitelist dải IP của dịch vụ đó (theo tài liệu chính thức).
  • Uptime monitor: cho phép GET tới /wp-login.php nhưng chặn POST (rule hiện tại chỉ chặn POST, nên vẫn an toàn).

Tăng cường bảo vệ (khuyến nghị)

  • Đổi đường dẫn đăng nhập (ví dụ /my-admin) để giảm rác ngay từ đầu.
  • 2FA cho tài khoản admin và giới hạn role có quyền đăng nhập.
  • Rate limiting: tạo rule giới hạn POST vào /wp-login.php (ví dụ ≤ 5 lần/phút/IP).
  • Tắt XML-RPC ở server nếu không dùng:
    <Files xmlrpc.php>
      Require all denied
    </Files>
  • Super Bot Fight Mode (nếu gói bạn có): bật để hạ tầng Cloudflare tự lọc bot rác từ trước WAF.

Checklist triển khai production

  1. Backup & ghi chú cấu hình hiện tại.
  2. Tạo rule WAF như trên, Action = Managed Challenge, bật Log.
  3. Ưu tiên rule cao (đặt lên trên các rule khác).
  4. Giám sát Firewall Events 24–48h, điều chỉnh whitelist nếu cần.
  5. Nếu ổn định, cân nhắc đổi action sang “Block” cho XML-RPC.
  6. Thêm rate limiting cho /wp-login.php.

Kết luận

Đối với website phục vụ Việt Nam, việc chỉ cho phép POST đăng nhập từ VN và chủ động chặn POST XML-RPC là một bước “ít tốn công nhưng hiệu quả cao”. Quy tắc WAF trên Cloudflare giúp cắt giảm phần lớn brute force và botnet, ổn định CPU/PHP, và làm sạch log bảo mật. Kết hợp thêm 2FA, đổi URL đăng nhập, rate limiting và (nếu được) vô hiệu hóa XML-RPC, bạn sẽ có một mặt trận phòng thủ vững chắc cho WordPress trong môi trường production.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...