Tăng cường bảo mật WordPress (cài bằng wpsila) với Cloudflare

Gói miễn phí của Cloudflare có tính năng bảo mật mạnh mẽ cho WordPress, tôi rất khuyên dùng nếu bạn sử dụng dịch vụ proxy của nó (bạn cần bật đám mây vàng trong DNS của Cloudflare lên thì các tính năng dưới đây mới có tác dụng).

Lưu ý: Bạn không bắt buộc phải dùng Cloudflare thì mới dùng được wpsila, hai cái này độc lập với nhau. Tuy nhiên việc bổ sung thêm các tính năng của Cloudflare sẽ giúp trang WordPress của bạn an toàn hơn.

Quan trọng: Khi sử dụng Cloudflare proxy (bật đám mây vàng) kết hợp với Caddy Server thì bạn cần phải để cài đặt SSL/TLS mode là Full (Strict) để tránh vòng lặp vô tận (chuyển hướng quá nhiều). Cách làm như sau:

Bạn truy cập vào tên miền trên Cloudflare, rồi vào SSL/TLS > Overview

  • Click nút Configure
  • Chọn Full (Strict) rồi nhấn Save để lưu tùy chọn này.
Cấu hình bắt buộc khi triển khai Cloudflare + Caddy Server
Cấu hình bắt buộc khi triển khai Cloudflare + Caddy Server

Tiếp theo: Truy cập vào tên miền của bạn trên Cloudflare, nhìn sang cột trái, chọn Security > Security rules > Create rule.

Đây chính là nơi ta tạo ra các quy tắc để chống lại các cuộc tấn công mạng (vốn rất phổ biến hiện nay, ngay cả khi website của bạn không nổi tiếng).


Quy tắc 1: Bảo vệ trang đăng nhập & trang admin

Trang đăng nhập của WordPress nằm ở địa chỉ:

ten-mien-cua-ban.com/wp-login.php

còn trang admin của bạn nằm ở địa chỉ:

ten-mien-cua-ban.com/wp-admin

Kẻ tấn công rất thường xuyên tấn công trang đăng nhập và trang quản trị này.

Chúng ta sẽ thiết lập rule để chống lại các bot tự động truy cập vào hai địa chỉ trên.

Create rule > Custom rules

Chỗ Rule name (required) đặt tên tùy ý, nhưng nên là gợi ý để bạn biết ý nghĩa của nó, ví dụ: Hạn chế bot vào trang login và admin.

Bên dưới bạn click vào Edit expression để thêm mã:

Một ô nhập liệu mở ra, bạn paste mã dưới đây vào:

(http.request.uri.path contains "/wp-login.php") or (http.request.uri.path contains "/wp-admin" and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and not http.request.uri.path contains "/wp-admin/css/" and not http.request.uri.path contains "/wp-admin/js/" and not http.request.uri.path contains "/wp-admin/images/")

Kéo xuống dưới, ở phần Choose action bạn chọn Managed Challenge

Cuối cùng nhấn nút Deploy để triển khai chính thức:

Triển khai quy tắc hạn chế vào login & admin
Triển khai quy tắc hạn chế vào login & admin

Ý nghĩa là nếu có truy cập trang đăng nhập hoặc admin, Cloudflare sẽ thử thách xem nó có phải là bot không, nếu là bot thì chặn luôn.

Nếu bạn làm đúng, lúc bạn vào trang đăng nhập WordPress thì Cloudflare sẽ kiểm tra trước khi cho vào (khoảng 2 – 3 giây):

Cloudflare kiểm tra trước khi cho truy cập trang login

Quy tắc 2: Chặn truy cập các file nhạy cảm

Các file này thường chứa dữ liệu nhạy cảm của website và cũng nên chặn truy cập chúng luôn. Danh sách này khá dài.

  • /xmlrpc.php
  • /wp-config.php
  • .htaccess
  • /.env
  • /.git/
  • /wp-includes/wlwmanifest.xml
  • .log
  • .sql
  • .bak
  • .old
  • readme.html
  • license.txt
  • .git

Để triển khai rule này bạn làm như sau:

  1. Tạo một rule mới bằng cách chọn Create rule > Custom rules
  2. Rule name (required) nhập tùy ý, ví dụ Chặn truy cập các file nhạy cảm

Kéo xuống dưới một chút, bạn cũng click vào Edit expression rồi paste mã dưới đây vào:

(http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.path contains "/wp-config.php") or (http.request.uri.path contains ".htaccess") or (http.request.uri.path contains "/.env") or (http.request.uri.path contains "/.git/") or (http.request.uri.path contains "/wp-includes/wlwmanifest.xml") or (ends_with(http.request.uri.path, ".log")) or (ends_with(http.request.uri.path, ".sql")) or (ends_with(http.request.uri.path, ".bak")) or (ends_with(http.request.uri.path, ".old")) or (ends_with(http.request.uri.path, "readme.html")) or (ends_with(http.request.uri.path, "license.txt")) or (ends_with(http.request.uri.path, ".git"))

Kéo tiếp xuống dưới, ở phần Choose action bạn chọn Block

Cuối cùng bạn nhấn Deploy để triển khai.

Block các file nhạy cảm
Block các file nhạy cảm

Nói riêng về trường hợp chặn /xmlrpc.php: Nó là file cần dùng nếu bạn sử dụng plugin Jetpack hoặc phải đăng nhập WordPress qua app trên di động. Cả hai cái này đều không có quá nhiều người cần, và vì rủi ro cao của xmlrpc.php nên giải pháp chặn thường được ưu tiên hơn. Tuy nhiên nếu bạn bắt buộc cần nó, ví dụ bạn phải dùng plugin Jetpack chẳng hạn, thì bạn cần bỏ chặn file này đi, khi đó bạn dùng mã này:

(http.request.uri.path contains "/wp-config.php") or (http.request.uri.path contains ".htaccess") or (http.request.uri.path contains "/.env") or (http.request.uri.path contains "/.git/") or (http.request.uri.path contains "/wp-includes/wlwmanifest.xml") or (ends_with(http.request.uri.path, ".log")) or (ends_with(http.request.uri.path, ".sql")) or (ends_with(http.request.uri.path, ".bak")) or (ends_with(http.request.uri.path, ".old")) or (ends_with(http.request.uri.path, "readme.html")) or (ends_with(http.request.uri.path, "license.txt")) or (ends_with(http.request.uri.path, ".git"))

Vậy là xong, mặc dù phần này hơi kỹ thuật, nhưng bạn chỉ cần bỏ ra 10 phút là website của bạn an toàn hơn rất nhiều, và bạn cũng hiếm khi phải quay lại điều chỉnh phần này. Rất đáng để làm.

Viết một bình luận