Triển khai nhanh trong 5 phút
Đang dùng Cloudflare và Nginx? Đây là cách nhanh nhất để “khóa hòm” server, chặn đứng mọi request không đi qua proxy của Cloudflare.
- Lấy chứng chỉ gốc từ Cloudflare: Bạn cần file CA để Nginx có thể đối soát. Chạy lệnh sau:
sudo mkdir -p /etc/nginx/certs
sudo curl -s https://developers.cloudflare.com/ssl/static/authenticated_origin_pull_ca.pem -o /etc/nginx/certs/cloudflare.crt
- Cấu hình Nginx: Mở file cấu hình domain (thường ở
/etc/nginx/sites-available/). Thêm hai dòng xác thực vào blockserver(port 443):
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
# Kích hoạt xác thực phía client
ssl_client_certificate /etc/nginx/certs/cloudflare.crt;
ssl_verify_client on;
location / {
try_files $uri $uri/ =404;
}
}
- Áp dụng cấu hình: Kiểm tra cú pháp và reload service.
sudo nginx -t && sudo systemctl restart nginx
- Kích hoạt trên Dashboard: Truy cập Cloudflare -> SSL/TLS -> Origin Server. Gạt công tắc Authenticated Origin Pulls sang On.
Kể từ giây phút này, mọi request trực tiếp vào IP server sẽ bị Nginx từ chối thẳng thừng với mã lỗi 400 Bad Request.
Tại sao chỉ chặn IP (Whitelisting) là chưa đủ?
Nhiều sysadmin tin rằng chỉ cần dùng Firewall (UFW/iptables) để giới hạn 15 dải IP của Cloudflare là an toàn. Thực tế không đơn giản vậy.
Hãy tưởng tượng một kẻ tấn công cũng sử dụng Cloudflare. Họ có thể trỏ domain của họ (ví dụ: attack-site.com) về chính địa chỉ IP server của bạn. Nếu Nginx của bạn cấu hình default_server không kỹ, server sẽ xử lý request đó như traffic hợp lệ từ Cloudflare. Kết quả? Toàn bộ nội dung web của bạn có thể bị “mượn” bởi một domain rác, gây ảnh hưởng nghiêm trọng đến SEO và uy tín thương hiệu.
Authenticated Origin Pulls giải quyết triệt để vấn đề này bằng cơ chế Mutual TLS (mTLS). Không chỉ trình duyệt kiểm tra server, mà giờ đây server cũng yêu cầu Cloudflare phải “trình thẻ căn cước” (chứng chỉ client) thì mới cho phép vào cửa.
Lựa chọn chế độ chứng chỉ phù hợp
Tùy vào mức độ bảo mật mong muốn, bạn có thể chọn một trong hai cách:
Sử dụng Global Certificate
Đây là phương án mặc định. Cloudflare dùng chung một chứng chỉ cho tất cả người dùng. Nó cực kỳ dễ triển khai và đủ an toàn cho 90% website phổ thông. Nginx sẽ kiểm tra server_name kết hợp với chứng chỉ này để loại bỏ các request giả mạo.
Sử dụng Custom Certificate
Nếu bạn đang vận hành hệ thống tài chính hoặc dữ liệu nhạy cảm, hãy tự tạo chứng chỉ riêng. Tại Dashboard Cloudflare, chọn Upload Custom Certificate trong phần Origin Server. Lúc này, chỉ duy nhất traffic đi qua tài khoản Cloudflare của chính bạn mới có chìa khóa để mở cổng vào server.
Cách kiểm tra “pháo đài” của bạn
Đừng tin vào cảm giác, hãy dùng số liệu thực tế. Thử giả lập một đợt tấn công bằng cách curl thẳng vào IP server (thay 1.2.3.4 bằng IP thật):
curl -k https://1.2.3.4
Nếu server trả về lỗi 400 No required SSL certificate was sent, hệ thống của bạn đã an toàn. Bạn đã thiết lập thành công một lớp lọc traffic cực kỳ vững chắc ở tầng giao thức.
Tối ưu tài nguyên: Đừng quên Firewall tầng Network
Dù mTLS rất an toàn, nhưng việc để Nginx xử lý quá nhiều TLS Handshake lỗi vẫn gây lãng phí tài nguyên. Mỗi lần bắt tay (handshake) thất bại vẫn tiêu tốn CPU và một phần nhỏ RAM của server.
Lời khuyên của mình: Hãy chặn ngay từ vòng gửi xe.
Sử dụng script tự động để đồng bộ dải IP Cloudflare vào ufw. Khi đó, kẻ tấn công thậm chí không thấy port 443 mở (trạng thái Filtered). Sự kết hợp giữa Firewall IP và mTLS sẽ tạo ra lớp bảo mật kép hoàn hảo.
Những lưu ý “xương máu”
- Lỗ hổng Port 80: mTLS chỉ chạy trên HTTPS. Nếu bạn quên đóng port 80 hoặc không redirect 301 triệt để, hacker vẫn có thể lẻn vào qua cổng này. Hãy cấu hình Always Use HTTPS trên Cloudflare ngay lập tức.
- Xung đột với Certbot: Let’s Encrypt thường dùng
http-01challenge. Nếu bạn khóa chặt server, Certbot sẽ không thể gia hạn chứng chỉ SSL. Bạn nên chuyển sang dùngdns-01challenge thông qua Cloudflare API để việc gia hạn diễn ra âm thầm và an toàn. - Giám sát Log: Nếu website đột ngột báo lỗi 502, hãy kiểm tra
/var/log/nginx/error.log. Nếu thấy lỗiclient sent no required SSL certificatetừ IP hợp lệ, có thể chứng chỉ CA của Cloudflare đã hết hạn (thường có thời hạn rất dài, nhưng vẫn nên lưu ý).
Triển khai Authenticated Origin Pulls là khoản đầu tư “0 đồng” nhưng mang lại giá trị bảo mật cực lớn. Bạn sẽ ngủ ngon hơn khi biết rằng server của mình đã thực sự ẩn mình trước những đợt quét IP đại trà trên internet.

