Hướng dẫn lưu trữ website bằng Cloudflare và Nginx trên Ubuntu 20.04

nexsoft.vn 12/01/2024

Bảo mật website là nhiệm vụ vô cùng thiết yếu đảm bảo tính an toàn cho website trong quá trình vận hành và sử dụng. Vậy nên, hướng dẫn này sẽ giúp bảo mật trang web sử dụng Nginx làm Reverse Proxy, thực hiện cấu hình chứng chỉ CA từ Cloudflare. Thiết lập này sẽ giúp ngăn mọi yêu cầu độc hại đến máy chủ của bạn.

Điều kiện để lưu trữ web bằng Cloudflare và Nginx trên Ubuntu 20.04

Để hoàn thành hướng dẫn này, bạn sẽ cần có:

  • Một máy chủ Ubuntu 20.04 đã cấu hình tường lửa, user non-root với quyền sudo và được cài đặt sẵn Nginx.
  • Một tài khoản Cloudflare.
  • Một tên miền đã đăng ký và được thêm vào tài khoản Cloudflare, tên miền đó trỏ đến máy chủ Nginx của bạn.
  • Máy chủ Nginx cần được cấu hình với tên miền bạn đã đăng ký.
Cloudflare

Bước 1: Tạo chứng chỉ TLS CA

TLS (Transport Layer Security) là giao thức đảm bảo mọi thao tác với dữ liệu của người trên trang web sẽ luôn được mã hóa và an toàn trong quá trình truyền tin. Giao thức này có thể được các tổ chức uy tín, đã được cấp phép và công nhận rộng rãi trên thế giới xác thực và cung cấp cho những người dùng dưới dạng chứng chỉ – certificate. Lúc này, các tổ chức đó sẽ được gọi là CA (Certificate Authority).

Tương tự như các CA khác, Cloudflare 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. Khi 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, đầu tiên bạn thực hiện đăng nhập vào tài khoản Cloudflare 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. Từ đó, điều hướng đến mục Origin Server và nhấp vào nút Create Certificate:

Create Certificate

Bạn lựa chọn mặc định Generate private key and CSR with Cloudflare.

Bạn lựa chọn mặc định Generate private key and CSR with Cloudflare

Nhấp vào Next và bạn sẽ thấy hộp thoại bao gồm 2 mục Origin CertificatePrivate Key. Bạn cần tải xuống cả Origin CertificatePrivate Key từ Cloudflare sang máy chủ của mình. Nhớ sao chép sang máy chủ của bạn trước khi nhấp vào OK và không được chia sẻ chúng với bất kỳ ai.

Tải xuống cả Origin CertificatePrivate Key từ Cloudflare sang máy chủ của mình

Bạn sẽ sử dụng thư mục /etc/ssl trên máy chủ để lưu trữ Origin CertificatePrivate Key vừa rồi. Thư mục này đã tồn tại sẵn trên máy chủ nên bạn chỉ việc sử dụng mà không cần phải tạo mới.

Thực hiện sao chép nội dung của Origin Certificate được hiển thị trong hộp thoại trên trình duyệt của bạn. Tiếp theo, hãy mở file /etc/ssl/cert.pem bằng trình soạn thảo văn bản ưa thích của bạn. Hướng dẫn này sẽ sử dụng nano với câu lệnh như sau:

Dán nội dung chứng chỉ vào file. Sau đó lưu và thoát khỏi trình chỉnh sửa bằng cách tổ hợp nhấn Ctrl+X, khi được nhắc xác nhận thao tác, bạn nhấn phím Y rồi Enter.

Trở lại trình duyệt web, sao chép nội dung của Private key. Sau đó mở file /etc/ssl/key.pem để chỉnh sửa:

Dán private key vào file, lưu file và thoát khỏi trình chỉnh sửa.

Cảnh báo: Chứng chỉ Origin CA 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ủ được kết nối dịch vụ 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, web sẽ không nhận chứng chỉ và có thể gây ra lỗi chứng chỉ không đáng tin cậy.

Ngoài chứng chỉ Origin CA Cloudflare, bạn có thể cài đặt chứng chỉ SSL certificate thay thế. Giao thức SSL cũng có phương thức hoạt động tương tự như TLS khi giúp mã hóa dữ liệu truyền từ máy chủ đến người dùng và ngược lại. Từ đó đảm bảo thông tin luôn được bảo mật và tránh khỏi các cuộc nghe lén hay đánh cắp thông tin từ hacker. Bạn có thể tham khảo ngay các gói SSL hiện có tại Vietnix với mức giá chỉ từ 160.000 VND/Năm.

Bước tiếp theo, bạn cần cập nhật cấu hình Nginx để có thể sử dụng chứng chỉ.

Bước 2: Cài đặt Chứng chỉ Origin CA trong Nginx

Lúc này, bạn đã tạo origin certificate và private key của Cloudflare và lưu các file vào máy chủ của mình. Bây giờ, bạn sẽ cập nhật cấu hình Nginx cho trang web để sử dụng chúng nhằm bảo mật kết nối giữa các 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 tường lửa UFW cho phép lưu lượng HTTPS được thông qua bằng cách bật thiết lập Nginx Full để mở cả cổng 80 (HTTP) và cổng 443 (HTTPS):

Thực hiện khởi tạo lại dịch vụ UFW để áp dụng các cấu hình mới:

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:

Bạn sẽ thấy output như thế này:

Tiếp theo, bạn cần điều chỉnh lại server block Nginx. Ban đầu khi cài đặt, Nginx tạo một server block mặc định. Thực hiện xóa block đó đi vì bạn sẽ cấu hình một server block mới với tùy chỉnh theo tên miền sẵn có bằng câu lệnh:

Tiếp theo, mở file cấu hình Nginx cho miền của bạn:

Các file sẽ trông giống như sau:

Bạn sẽ phải sửa đổi file cấu hình Nginx để thực hiện các thao tác sau:

  • Nghe trên cổng 80 và chuyển hướng tất cả các yêu cầu sử dụng https.
  • Nghe trên cổng 443 và sử dụng origin certificate và private key đã được thêm vào trong phần trước.

File cấu hình cuối cùng sẽ trông giống như sau:

Lưu file 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ỳ file cấu hình Nginx nào bằng câu lệnh:

Nếu không có vấn đề gì, Nginx sẽ thông báo mọi thứ chính xác, sau đó hãy khởi động lại Nginx để kích hoạt các thay đổi cấu hình mới:

Bây giờ, hãy chuyển đến phần SSL/TLS của bảng điều khiển Cloudflare, chọn Overview và thay đổi chế độ mã hóa từ SSL/TLS encryption mode thành Full (strict). Lựa chọn 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 của bạn.

Encryption Mode

Bây giờ, truy cập trang web của bạn tại địa chỉ https://vietnix.com để xác minh rằng trang web được thiết lập đúng cách. Bạn sẽ thấy trang chủ được hiển thị và trình duyệt sẽ báo cáo rằng trang web này an toàn.

Hướng dẫn lưu trữ website bằng Cloudflare và Nginx trên Ubuntu 20.04 18

Phần tiếp theo 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 giao tiếp với Cloudflare chứ không phải một số máy chủ giả mạo, nặc danh nào khác. Bằng cách đó, Nginx sẽ được cấu hình để chỉ chấp thuậ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.

Bước 3: Thiết lập nguồn gốc được xác thực

Chứng chỉ Origin CA sẽ giúp Cloudflare xác minh rằng kết nối với đúng máy chủ gốc. Bước này sẽ sử dụng Xác thực ứng dụng khách TLS (TLS Client Authentication) để xác minh rằng máy chủ Nginx gốc của bạn đang kết nối với Cloudflare.

Trong quá trình bắt tay TLS do ứng dụng khách xác thực, cả hai bên đều phải được cung cấp chứng chỉ để xác minh. Máy chủ Nginx gốc đã được cấu hình để chỉ chấp thuậ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ị loại bỏ. Đ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. Qua đó, đảm bảo cho máy chủ luôn an toàn khỏi các cuộc tấn công không rõ nguồn gốc.

Cloudflare xuất trình các chứng chỉ được CA ký với chứng chỉ sau:

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.

Sau đó tạo file /etc/ssl/cloudflare.crt để lưu trữ chứng chỉ của Cloudflare:

Thêm chứng chỉ vào file. Sau đó, lưu file 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 và thực hiện mở file cấu hình cho miền của bạn:

Thêm các chỉ thị ssl_client_certificate và ssl_verify_client như sau:

Lưu file 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 một lần nữa:

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ấu hình:

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 phần Origin Server và bật tùy chọn Authenticated Origin Pulls.

Bật tùy chọn Authenticated Origin Pulls

Bây giờ, truy cập trang web https://vietnix.com để xác minh rằng trang web đã được thiết lập đúng cách. Bạn sẽ thấy trang chủ hiển thị một cách bình thường.

Để xác minh rằng máy chủ của bạn sẽ chỉ chấp nhận các yêu cầu được ký bởi CA của Cloudflare, hãy tắt tùy chọn Authenticated Origin Pulls và sau đó tải lại trang web của bạn. Bạn sẽ nhận được thông báo lỗi sau:

Lỗi 400 Bad Request

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.

Nếu bạn cảm thấy những bước thiết lập cấu hình trên quá phức tạp, không thể thực hiện hoặc thao tác không thành công thì có thể lựa chọn lưu trữ website trên hosting, VPS tốc độ cao của Vietnix. Giải pháp này sẽ giúp bạn có thể dễ dàng lưu trữ và quản lý website của mình một cách thuận tiện, hiệu quả.

Hosting và VPS của Vietnix được thiết kế để đáp ứng các yêu cầu của các website hiện đại. Với tốc độ truy cập nhanh và độ tin cậy cao, bạn có thể yên tâm rằng website của mình sẽ luôn hoạt động một cách ổn định và mượt mà. Vietnix cũng cung cấp các công cụ quản lý website tiện lợi để bạn có thể dễ dàng cập nhật và tùy chỉnh website của mình.

Hơn 10 năm hoạt động, 100.000 dịch vụ được kích hoạt và đồng hành cùng thành công của hơn 50.000 khách hàng cá nhân, doanh nghiệp trên toàn quốc là những minh chứng cho chất lượng dịch vụ tại Vietnix. Liên hệ với Vietnix ngay hôm nay để biết thêm thông tin chi tiết về dịch vụ lưu trữ web và nhận được tư vấn miễn phí về giải pháp phù hợp nhất cho website của bạn.

Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:

  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
  • Hotline: 1800 1093 – 07 088 44444
  • Email: sales@vietnix.com.vn

Lời kết

Thông qua hướng dẫn về điều kiện để lưu trữ web bằng Cloudflare và Nginx trên Ubuntu 20.04 này, bạn sẽ thực hiện được việc 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 một cách dễ dàng. Bạn cũng có thể sử dụng Authenticated Origin Pulls để đảm bảo rằng chỉ chấp nhận các yêu cầu của máy chủ Cloudflare, ngăn chặn bất kỳ ai khác kết nối trực tiếp với máy chủ Nginx.