Cloudflare là một dịch vụ nằm giữa khách truy cập và máy chủ của chủ sở hữu trang web, hoạt động như một proxy ngược cho các trang web. Cloudflare cung cấp Mạng phân phối nội dung (Content Delivery Network - CDN), cũng như các dịch vụ máy chủ tên miền phân tán và giảm thiểu DDoS.
Nginx là một máy chủ web phổ biến chịu trách nhiệm lưu trữ một số trang web lớn nhất và có lưu lượng truy cập cao nhất trên internet. Các tổ chức thường phục vụ các trang web bằng Nginx và sử dụng Cloudflare làm nhà cung cấp CDN và DNS.
Trong hướng dẫn này, bạn sẽ bảo mật trang web của mình do Nginx cung cấp bằng chứng chỉ CA gốc từ Cloudflare, sau đó định cấu hình Nginx để sử dụng các yêu cầu kéo được xác thực. Ưu điểm của việc sử dụng thiết lập này là bạn được hưởng lợi từ CDN của Cloudflare và độ phân giải DNS nhanh trong khi vẫn đảm bảo rằng tất cả các kết nối đều đi qua Cloudflare. Điều này ngăn chặn bất kỳ yêu cầu độc hại nào đến máy chủ của bạn.
Để hoàn thành hướng dẫn này, bạn sẽ cần những thứ sau:
sudo
non-root user và tường lửa.Cloudflare Origin CA cho phép bạn tạo chứng chỉ TLS miễn phí do Cloudflare ký để cài đặt trên máy chủ Nginx của bạn. Bằng cách sử dụng chứng chỉ TLS do Cloudflare tạo, bạn có thể bảo mật kết nối giữa máy chủ của Cloudflare và máy chủ Nginx của bạn.
Để tạo chứng chỉ với Origin CA, hãy đăng nhập vào tài khoản Cloudflare của bạn trong trình duyệt web. Chọn miền mà bạn muốn bảo mật và điều hướng đến phần SSL/TLS trên bảng điều khiển Cloudflare của bạn. Từ đó, điều hướng đến tab Origin Server và nhấp vào nút Create Certificate:
Để tùy chọn mặc định Generate private key and CSR with Cloudflare được chọn.
Nhấp vào Next và bạn sẽ thấy hộp thoại có Origin Certificate và Private key. Bạn cần chuyển cả origin certificate và private key từ Cloudflare sang máy chủ của mình. Vì lý do bảo mật, thông tin Private key sẽ không được hiển thị lại, vì vậy hãy sao chép khóa vào máy chủ của bạn trước khi nhấp vào Ok.
Bạn sẽ sử dụng thư mục /etc/ssl
trên máy chủ để giữ origin certificate và các tệp private key. Thư mục đã tồn tại trên máy chủ.
Đầu tiên, sao chép nội dung của Origin Certificate xuất xứ được hiển thị trong hộp thoại trên trình duyệt của bạn.
Sau đó, trên máy chủ của bạn, hãy mở /etc/ssl/cert.pem
trong trình soạn thảo văn bản ưa thích của bạn:
- sudo nano /etc/ssl/cert.pem
Dán nội dung chứng chỉ vào tệp. Sau đó lưu và thoát khỏi trình chỉnh sửa. Nếu bạn đang sử dụng nano
, hãy nhấn Ctrl + X
, sau đó khi được nhắc, hãy nhấn Y
rồi Enter
.
Sau đó quay lại trình duyệt của bạn và sao chép nội dung của Private key. Mở file /etc/ssl/key.pem
để chỉnh sửa:
- sudo nano /etc/ssl/key.pem
Dán private key vào tệp, lưu tệp và thoát khỏi trình chỉnh sửa.
Lưu ý: Đôi khi, khi bạn sao chép chứng chỉ và khóa từ bảng điều khiển Cloudflare và dán vào các tệp có liên quan trên máy chủ, các dòng trống sẽ được chèn vào. Nginx sẽ coi các chứng chỉ và khóa đó là không hợp lệ, vì vậy hãy đảm bảo rằng không có dòng trống nào trong tệp của bạn.
Cảnh báo: Chứng chỉ CA gốc của Cloudflare chỉ được Cloudflare tin cậy và do đó chỉ nên được sử dụng bởi các máy chủ gốc được kết nối tích cực với Cloudflare. Nếu tại bất kỳ thời điểm nào bạn tạm dừng hoặc tắt Cloudflare, chứng chỉ CA gốc của bạn sẽ đưa ra lỗi chứng chỉ không đáng tin cậy.
Bây giờ bạn đã sao chép các tệp khóa và chứng chỉ vào máy chủ của mình, bạn cần cập nhật cấu hình Nginx để sử dụng chúng.
Trong phần trước, bạn đã tạo origin certificate và private key bằng bảng điều khiển của Cloudflare và lưu các tệp vào máy chủ của bạn. Bây giờ, bạn sẽ cập nhật cấu hình Nginx cho trang web của mình để sử dụng chứng chỉ gốc và khóa riêng nhằm bảo mật kết nối giữa máy chủ của Cloudflare và máy chủ của bạn.
Trước tiên, hãy đảm bảo rằng UFW sẽ cho phép lưu lượng HTTPS. Bật Nginx Full
, thao tác này sẽ mở cả cổng 80
(HTTP) và cổng 443
(HTTPS):
- sudo ufw allow 'Nginx Full'
Bây giờ hãy tải lại UFW:
- sudo ufw reload
Cuối cùng, hãy kiểm tra xem các quy tắc mới của bạn có được cho phép không và UFW có đang hoạt động không:
- sudo ufw status
Bạn sẽ thấy một đầu ra như thế này:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Bây giờ bạn đã sẵn sàng để điều chỉnh khối máy chủ Nginx của mình. Nginx tạo khối máy chủ mặc định trong quá trình cài đặt. Xóa nó nếu nó vẫn tồn tại, vì bạn đã định cấu hình khối máy chủ tùy chỉnh cho miền của mình:
- sudo rm /etc/nginx/sites-enabled/default
Tiếp theo, mở tệp cấu hình Nginx cho miền của bạn:
- sudo nano /etc/nginx/sites-available/your_domain
Các tập tin sẽ trông như thế này:
server {
listen 80;
listen [::]:80;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
server_name your_domain www.your_domain;
location / {
try_files $uri $uri/ =404;
}
}
Bạn sẽ sửa đổi tệp cấu hình Nginx để thực hiện các thao tác sau:
80
và chuyển hướng tất cả các yêu cầu sử dụng https
.443
và sử dụng origin certificate và private key được thêm vào trong phần trước.Sửa đổi tệp để nó trông giống như sau:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 302 https://$server_name$request_uri;
}
server {
# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
server_name your_domain www.your_domain;
root /var/www/your_domain/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
Lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, hãy kiểm tra để đảm bảo rằng không có lỗi cú pháp trong bất kỳ tệp cấu hình Nginx nào của bạn:
- sudo nginx -t
Nếu bạn không tìm thấy vấn đề gì, hãy khởi động lại Nginx để kích hoạt các thay đổi của bạn:
- sudo systemctl restart nginx
Bây giờ, hãy chuyển đến phần SSL/TLS của bảng điều khiển Cloudflare, điều hướng đến tab Overview và thay đổi SSL/TLS encryption mode thành Full (strict). Điều này thông báo cho Cloudflare luôn mã hóa kết nối giữa Cloudflare và máy chủ Nginx gốc của bạn.
Bây giờ, hãy truy cập trang web của bạn tại https://your_domain
để xác minh rằng trang web được thiết lập đúng cách. Bạn sẽ thấy trang chủ của mình được hiển thị và trình duyệt sẽ báo cáo rằng trang web này an toàn.
Trong phần tiếp theo, bạn sẽ thiết lập Authenticated Origin Pulls để xác minh rằng máy chủ gốc của bạn thực sự đang nói chuyện với Cloudflare chứ không phải một số máy chủ khác. Bằng cách đó, Nginx sẽ được định cấu hình để chỉ chấp nhận các yêu cầu sử dụng chứng chỉ ứng dụng khách hợp lệ từ Cloudflare; tất cả các yêu cầu chưa được chuyển qua Cloudflare sẽ bị hủy.
Chứng chỉ CA gốc sẽ giúp Cloudflare xác minh rằng nó đang giao tiếp với đúng máy chủ gốc. Bước này sẽ sử dụng TLS Client Authentication (Xác thực ứng dụng khách TLS) để xác minh rằng máy chủ Nginx ban đầu của bạn đang kết nối với Cloudflare.
Trong quá trình bắt tay TLS do khách hàng xác thực, cả hai bên đều cung cấp chứng chỉ để được xác minh. Máy chủ gốc được định cấu hình để chỉ chấp nhận các yêu cầu sử dụng chứng chỉ ứng dụng khách hợp lệ từ Cloudflare. Các yêu cầu chưa được chuyển qua Cloudflare sẽ bị hủy vì chúng sẽ không có chứng chỉ của Cloudflare. Điều này có nghĩa là những kẻ tấn công không thể phá vỡ các biện pháp bảo mật của Cloudflare và kết nối trực tiếp với máy chủ Nginx của bạn.
Cloudflare xuất trình các chứng chỉ được CA ký với chứng chỉ sau:
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----
Bạn cũng có thể tải xuống chứng chỉ trực tiếp từ tài liệu của Cloudflare.
Sao chép chứng chỉ này.
Sau đó tạo tệp /etc/ssl/cloudflare.crt
để giữ chứng chỉ của Cloudflare:
- sudo nano /etc/ssl/cloudflare.crt
Thêm chứng chỉ vào tệp. Sau đó lưu tệp và thoát khỏi trình chỉnh sửa.
Bây giờ hãy cập nhật cấu hình Nginx của bạn để sử dụng TLS Authenticated Origin Pulls. Mở tệp cấu hình cho tên miền của bạn:
- sudo nano /etc/nginx/sites-available/your_domain
Thêm các chỉ thị ssl_client_certificate
và ssl_verify_client
như trong ví dụ sau:
. . .
server {
# SSL configuration
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/ssl/cert.pem;
ssl_certificate_key /etc/ssl/key.pem;
ssl_client_certificate /etc/ssl/cloudflare.crt;
ssl_verify_client on;
. . .
Lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, hãy kiểm tra Nginx để đảm bảo rằng không có lỗi cú pháp nào trong cấu hình Nginx của bạn:
- sudo nginx -t
Nếu không tìm thấy vấn đề gì, hãy khởi động lại Nginx để kích hoạt các thay đổi của bạn:
- sudo systemctl restart nginx
Cuối cùng, để bật Authenticated Pulls, hãy mở phần SSL/TLS trong bảng điều khiển Cloudflare, điều hướng đến tab Origin Server và bật tùy chọn Authenticated Origin Pulls.
Bây giờ, hãy truy cập trang web của bạn tại https://your_domain
để xác minh rằng trang web đã được thiết lập đúng cách. Như trước đây, bạn sẽ thấy trang chủ của mình được hiển thị.
Để xác minh rằng máy chủ của bạn sẽ chỉ chấp nhận các yêu cầu do CA của Cloudflare ký, hãy bật tùy chọn Authenticated Origin Pulls để tắt tùy chọn này rồi tải lại trang web của bạn. Bạn sẽ nhận được thông báo lỗi sau:
Máy chủ gốc của bạn phát sinh lỗi nếu CA của Cloudflare không ký yêu cầu.
Lưu ý: Hầu hết các trình duyệt sẽ lưu các yêu cầu vào bộ đệm ẩn, vì vậy, để xem sự thay đổi ở trên, bạn có thể sử dụng chế độ duyệt web Ẩn danh/Riêng tư trong trình duyệt của mình. Để ngăn Cloudflare lưu các yêu cầu vào bộ đệm trong khi bạn thiết lập trang web của mình, hãy điều hướng đến Overview trong bảng điều khiển Cloudflare và chuyển đổi Development Mode.
Bây giờ bạn đã biết nó hoạt động bình thường, hãy quay lại phần SSL/TLS trong bảng điều khiển Cloudflare, điều hướng đến tab Origin Server và chuyển đổi tùy chọn Authenticated Origin Pulls để bật lại.
Trong hướng dẫn này, bạn đã bảo mật trang web do Nginx cung cấp bằng cách mã hóa lưu lượng giữa Cloudflare và máy chủ Nginx bằng chứng chỉ CA gốc từ Cloudflare. Sau đó, bạn thiết lập Authenticated Origin Pulls trên máy chủ Nginx để đảm bảo rằng nó chỉ chấp nhận các yêu cầu của máy chủ Cloudflare, ngăn không cho bất kỳ ai khác kết nối trực tiếp với máy chủ Nginx.