Bảo mật website với WAF và Cloudflare: checklist thực tế
Cách bảo vệ website hiệu quả nhất là xếp nhiều lớp: tường lửa ứng dụng (WAF) đứng trước app để chặn SQL injection, XSS và dò quét; chặn theo quốc gia và IP khi cần; và (tuỳ chọn) Cloudflare ở mạng biên với luật bảo vệ, cache và khoá máy chủ gốc. Trên ZoCloud, mọi lớp này bật được trong portal, không cần sửa code.
Bài này giải thích từng lớp và kết thúc bằng một checklist bạn có thể làm theo trong 30 phút.
Lớp 1: Tường lửa OWASP Core Rule Set
Mỗi web service trên ZoCloud có tường lửa dựa trên OWASP Core Rule Set (bộ luật mã nguồn mở phổ biến, thường chạy cùng ModSecurity), đứng trước app. Mở tab Cấu hình → Bảo mật của service.
Ba chế độ
| Chế độ | Tác dụng | Khi nào dùng |
|---|---|---|
| Tắt | Request tới app không qua kiểm tra | Hiếm khi; chỉ khi đang gỡ lỗi |
| Chỉ ghi nhận (mặc định) | Tấn công được ghi vào log, không chặn | Vài ngày đầu, để tìm báo nhầm |
| Chặn | Tấn công bị từ chối với mã 403 trước khi tới app | Khi đã chắc không chặn nhầm khách thật |
Giảm báo nhầm
- Ứng dụng: chọn WordPress, Drupal hoặc Nextcloud để dùng các ngoại lệ có sẵn; nếu không, trang quản trị và trình soạn thảo dễ bị báo nhầm. App tự viết chọn Khác.
- Luật đã tắt: nhập số hiệu luật (lấy từ dòng log tường lửa) đang chặn nhầm, cách nhau bằng dấu phẩy, ví dụ
942100, 920350.
Xem sự kiện ở tab Log với bộ lọc Tường lửa. Bộ lọc Request HTTP (status, method, path, thời gian xử lý, IP) giúp bạn đối chiếu request bị chặn với hành vi thật của người dùng. ZoCloud cũng gợi ý khi service đã sẵn sàng chuyển sang Chặn.
Lớp 2: Chặn quốc gia và địa chỉ IP
Cùng phần Bảo mật:
- Quốc gia bị chặn: mã hai chữ cái, ví dụ
CN, RU. Khách từ đó nhận trang 403. - Địa chỉ bị chặn: mỗi dòng một IP hoặc dải mạng, ví dụ
203.0.113.7hay198.51.100.0/24.
Chặn quốc gia hợp với site chỉ phục vụ khách trong nước đang bị quét từ nơi khác. Cẩn thận: khách thật đi du lịch hoặc dùng VPN cũng bị chặn, và một số dịch vụ bên ngoài (cổng thanh toán gọi webhook, công cụ giám sát) có thể gửi request từ nước khác. Thiết lập áp cho mọi tên miền của service; bấm Lưu để áp dụng.
Lớp 3: Kết nối Cloudflare
Nếu tên miền của bạn đang dùng Cloudflare, kết nối nó với ZoCloud ở cuối trang Tên miền. ZoCloud tự tạo bản ghi cho service, bật proxy khi đã có SSL, và áp các luật bên dưới.
Tạo API token đúng quyền
Tại Cloudflare → My Profile → API Tokens → Create Custom Token, cấp quyền Zone · Zone: Read, và Edit cho DNS, Zone Settings, SSL and Certificates, Zone WAF, Cache Rules. Chỉ chọn các zone cần dùng. Không bao giờ dùng Global API Key.
Các bước
- Dán token vào ô API token, bấm Kết nối (token được mã hoá).
- Ở Zone của …, bấm Dùng với ZoCloud cho zone cần dùng. Tuỳ chọn SSL Full (strict) và Always HTTPS áp cho cả zone, kể cả site khác của bạn, nên chỉ bật khi các site đó đều có chứng chỉ hợp lệ.
- Gắn tên miền thuộc zone vào service: bản ghi lúc đầu chỉ DNS (chờ SSL), rồi chuyển sang proxy khi chứng chỉ hợp lệ. Bản ghi bạn đã có cùng tên không bị ghi đè.
Khi đã proxy, tên miền chỉ nhận truy cập qua Cloudflare, app vẫn nhận IP thật của khách, và địa chỉ .zocloud.app của service chuyển khách sang tên miền chính.
Mức bảo vệ
| Mức | Tác dụng | Hợp với |
|---|---|---|
| Tắt | ZoCloud không thêm luật nào | Bạn tự quản luật Cloudflare |
| Chuẩn | Chặn dò file bí mật, công cụ quản trị, WordPress XML-RPC; giới hạn số lần đăng nhập từ một địa chỉ | Đa số website |
| Nghiêm ngặt | Như Chuẩn, thêm chặn request không có user agent và thử thách trước trang đăng nhập | Khi site đang bị tấn công |
| API | Chặn dò quét, giới hạn đăng nhập, không bao giờ đưa thử thách mà chương trình không trả lời được | API, app di động, webhook |
Các mức này chỉ áp cho các tên miền ZoCloud phục vụ trong zone.
Cache an toàn
Tuỳ chọn Cache file tĩnh, không bao giờ cache trang của người đã đăng nhập hay /api giảm tải cho app mà không làm lộ trang cá nhân hay dữ liệu API cho người khác.
Authenticated Origin Pulls
Tuỳ chọn Chỉ nhận truy cập qua Cloudflare của zone này khoá máy chủ gốc: chỉ request đi qua Cloudflare của chính zone đó mới được phục vụ. Kẻ tấn công biết IP gốc cũng không vòng qua Cloudflare được. Khi bật, portal hiện đã khoá.
Nếu portal báo Cloudflare từ chối luật hay khoá origin, token cũ thiếu quyền Zone WAF, Cache Rules hoặc SSL and Certificates: tạo token mới đủ quyền.
Các lớp bảo vệ khác đừng quên
- Tài khoản: bật xác thực hai lớp (2FA), phân vai trò đúng việc cho thành viên (xem Thành viên và vai trò).
- Database: chỉ app cùng environment truy cập được. Nếu bật Truy cập từ Internet để chạy migration từ máy, tắt khi không dùng.
- Bí mật: để trong Biến môi trường (được mã hoá khi lưu), không ghi vào code.
zo deploykhông bao giờ gửi file.env*(trừ.env.example). - Sao lưu: database backup mỗi đêm; volume có thêm bản dày mỗi vài phút. Bảo mật tốt vẫn cần đường lui.
Checklist 30 phút
- Tab Bảo mật: chọn Ứng dụng đúng loại site.
- Để Chỉ ghi nhận, đặt lịch xem log Tường lửa sau 3–7 ngày.
- Ghi các luật báo nhầm vào Luật đã tắt, rồi chuyển sang Chặn.
- Chặn quốc gia hoặc dải IP đang quét site (nếu có), kiểm tra không chặn nhầm webhook.
- (Tuỳ chọn) Kết nối Cloudflare bằng token tối thiểu quyền, chọn mức Chuẩn (hoặc API cho API).
- Bật cache file tĩnh.
- Bật Authenticated Origin Pulls khi mọi tên miền của zone đã qua Cloudflare.
- Bật 2FA cho mọi thành viên, tắt truy cập database từ Internet khi không dùng.
Câu hỏi thường gặp
WAF là gì và có cần cho website nhỏ không? WAF (tường lửa ứng dụng web) kiểm tra từng request và chặn các mẫu tấn công như SQL injection, XSS hay dò quét. Website nhỏ cũng bị bot quét tự động mỗi ngày, nên bật WAF là bước bảo vệ rẻ và hiệu quả.
Nên bật WAF ở chế độ Chặn ngay không? Không nên. Hãy để Chỉ ghi nhận vài ngày, xem log Tường lửa có báo nhầm không, tắt các luật chặn nhầm, rồi mới chuyển sang Chặn.
Đã có WAF của ZoCloud thì còn cần Cloudflare không? Hai lớp bổ trợ nhau: WAF của ZoCloud đứng ngay trước app, còn Cloudflare lọc và cache ở mạng biên. Cloudflare là tuỳ chọn; nhiều site chỉ cần WAF của ZoCloud là đủ.
Authenticated Origin Pulls dùng để làm gì? Tuỳ chọn này buộc site chỉ nhận truy cập đi qua Cloudflare của zone, nên kẻ tấn công không thể vòng qua Cloudflare để gọi thẳng máy chủ gốc.
Bắt đầu
Đăng ký ZoCloud để có tường lửa, HTTPS tự động và sao lưu ngay từ ngày đầu. Đọc thêm App và bảo mật, Tên miền và Cloudflare, và các bài hosting WordPress tại Việt Nam, tự host n8n.