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ý.
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:
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 Certificate và Private Key. Bạn cần tải xuống cả Origin Certificate và Private 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.
Bạn sẽ sử dụng thư mục /etc/ssl
trên máy chủ để lưu trữ Origin Certificate và Private 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:
sudo nano /etc/ssl/cert.pem
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:
sudo nano /etc/ssl/key.pem
Dán private key vào file, lưu file và thoát khỏi trình chỉnh sửa.
Lưu ý: Khi bạn sao chép chứng chỉ và khóa từ bảng điều khiển Cloudflare để dán vào các file có liên quan trên máy chủ, các dòng trống sẽ được chèn vào một cách không xác định. Nginx sẽ coi các chứng chỉ và khóa đó là không hợp lệ. Vì vậy bạn hãy dò lại và chắc chắn rằng không có dòng trống nào trong file.
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ỉ.
Xem thêm: Cách cài đặt SSH Keys trên Ubuntu 20.04
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):
sudo ufw allow 'Nginx Full'
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:
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 output như thế này:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
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:
sudo rm /etc/nginx/sites-enabled/default
Tiếp theo, mở file cấu hình Nginx cho miền của bạn:
sudo nano /etc/nginx/sites-available/your_domain
Các file sẽ trông giống như sau:
server { listen 80; listen [::]:80; root /var/www/vietnix.com/html; index index.html index.htm index.nginx-debian.html; server_name vietnix.com www.vietnix.com; location / { try_files $uri $uri/ =404; } }
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ụnghttps
. - 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:
server { listen 80; listen [::]:80; server_name vietnix.com www.vietnix.com; 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 vietnix.com www.vietnix.com; root /var/www/vietnix.com/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } }
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:
sudo nginx -t
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:
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, 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.
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.
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:
-----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.
Sau đó tạo file /etc/ssl/cloudflare.crt
để lưu trữ chứng chỉ của Cloudflare:
sudo nano /etc/ssl/cloudflare.crt
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:
sudo nano /etc/nginx/sites-available/your_domain
Thêm các chỉ thị ssl_client_certificate
và ssl_verify_client
như 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 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:
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ấu hình:
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 phần Origin Server và 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:
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, vì vậy để xem thay đổi ở trên, bạn có thể sử dụng chế độ Duyệt web ẩn danh. Bây giờ trang web đã hoạt động bình thường. Bạn quay lại phần SSL/TLS
trong bảng điều khiển Cloudflare, chọn phần Origin Server và bật lại tùy chọn Authenticated Origin Pulls để trở lại cài đặt ban đầ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.