Thứ hai, 17/08/2020 | 00:00 GMT+7

Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 20.04

Cloudflare là một dịch vụ nằm giữa khách truy cập và server của chủ sở hữu trang web, hoạt động như một Reverse Proxy cho các trang web. Cloudflare cung cấp Mạng phân phối nội dung (CDN), cũng như giảm thiểu DDoS và dịch vụ server domain phân tán.

Nginx là một web server 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 cung cấp 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 bạn do Nginx cung cấp bằng certificate Origin CA từ Cloudflare và sau đó cấu hình Nginx để sử dụng các yêu cầu kéo đã xác thực. Ưu điểm của việc sử dụng cài đặt này là bạn được hưởng lợi từ CDN của Cloudflare và độ phân giải DNS nhanh trong khi đảm bảo 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 server của bạn.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần những thứ sau:

Bước 1 - Tạo certificate TLS CA root

Cloudflare Origin CA cho phép bạn tạo certificate TLS miễn phí do Cloudflare ký để cài đặt trên server Nginx của bạn. Bằng cách sử dụng certificate TLS do Cloudflare tạo, bạn có thể bảo mật kết nối giữa các server của Cloudflare và server Nginx của bạn .

Để tạo certificate với Origin CA, hãy đăng nhập vào account Cloudflare của bạn trong trình duyệt web. Chọn domain mà bạn muốn bảo mật và chuyển đến phần SSL / TLS trên trang tổng quan Cloudflare của bạn. Từ đó, chuyển đến tab Server root và nhấp vào nút Tạo certificate :

Tạo tùy chọn certificate  trong console  Cloudflare

Để tùy chọn mặc định là Cho phép Cloudflare tạo private key và chọn CSR .

Tùy chọn GUI root  CA

Nhấp vào Tiếp theo và bạn sẽ thấy một hộp thoại với Chứng chỉ root khóa Riêng tư . Bạn cần chuyển cả certificate root và private key từ Cloudflare sang server của bạn . Vì lý do bảo mật, thông tin Khóa cá nhân sẽ không được hiển thị lại, vì vậy hãy sao chép khóa vào server của bạn trước khi nhấp vào Ok .

Hộp thoại hiển thị certificate  xuất xứ và private key

Bạn sẽ sử dụng folder /etc/ssl trên server để giữ certificate root và các file private key . Thư mục đã tồn tại trên server .

Đầu tiên, sao chép nội dung của Giấy chứng nhận xuất xứ được hiển thị trong hộp thoại trong trình duyệt của bạn.

Sau đó, trên server của bạn, hãy mở /etc/ssl/cert.pem trong editor bạn muốn :

  • sudo nano /etc/ssl/cert.pem

Thêm nội dung certificate vào file . Sau đó lưu và thoát khỏi editor .

Sau đó, quay lại trình duyệt của bạn và sao chép nội dung của Khóa cá nhân . 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 editor .

Lưu ý: Đôi khi, khi bạn sao chép certificate và khóa từ trang tổng quan Cloudflare và paste vào các file liên quan trên server , các dòng trống sẽ được chèn. Nginx sẽ coi các certificate và khóa đó là không hợp lệ, vì vậy hãy đảm bảo không có dòng trống nào trong file của bạn.

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 server root đượ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, certificate Origin CA của bạn sẽ gây ra lỗi certificate không tin cậy .

Đến đây bạn đã sao chép khóa và file certificate vào server của bạn , bạn cần cập nhật cấu hình Nginx để sử dụng chúng.

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

Trong phần trước, bạn đã tạo certificate root và private key bằng console của Cloudflare và lưu các file vào server của bạn . Bây giờ, bạn sẽ cập nhật cấu hình Nginx cho trang web của bạn để sử dụng certificate root và private key để bảo mật kết nối giữa server của Cloudflare và server của bạn.

Trước tiên, hãy đảm bảo UFW sẽ cho phép truy cập HTTP S. Bật Nginx Full , sẽ mở cả cổng 80 (HTTP) và cổng 443 (HTTPS):

  • sudo ufw allow 'Nginx Full'

Bây giờ reload UFW:

  • sudo ufw reload

Cuối cùng, hãy kiểm tra xem các luật mới của bạn có được cho phép và UFW đang hoạt động hay không:

  • sudo ufw status

Bạn sẽ thấy một kết quả 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)

Đến đây bạn đã sẵn sàng để điều chỉnh khối server Nginx của bạn . Nginx tạo một khối server mặc định trong khi cài đặt. Xóa nó nếu nó vẫn tồn tại, vì bạn đã cấu hình khối server tùy chỉnh cho domain của bạn :

  • sudo rm /etc/nginx/sites-enabled/default

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

  • sudo nano /etc/nginx/sites-available/your_domain

Tệp sẽ trông như thế này:

/ etc / nginx / sites-available / your_domain
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 file cấu hình Nginx để thực hiện những việ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 certificate xuất xứ và private key được thêm vào trong phần trước.

Sửa đổi file để file trông giống như sau:

/ etc / nginx / sites-available / your_domain
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 file và thoát khỏi editor .

Tiếp theo, hãy kiểm tra đảm bảo rằng không có lỗi cú pháp nào trong các file cấu hình Nginx nào của bạn:

  • sudo nginx -t

Nếu bạn không tìm thấy sự cố nào, hãy khởi động lại Nginx để bật các thay đổi :

  • sudo systemctl restart nginx

Bây giờ, hãy chuyển đến phần SSL / TLS của console Cloudflare, chuyển đến tab Tổng quan và thay đổi chế độ mã hóa SSL / TLS thành Đầy đủ (nghiêm ngặt) . Điều này thông báo cho Cloudflare luôn mã hóa kết nối giữa Cloudflare và server Nginx root của bạn.

Bật chế độ SSL đầy đủ (nghiêm ngặt) trong  Control panel  Cloudflare

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

Trong phần tiếp theo, bạn sẽ cài đặt Authenticated Origin Pulls để xác minh server root của bạn thực sự đang nói chuyện với Cloudflare chứ không phải một số server khác. Bằng cách đó, Nginx sẽ được cấu hình để chỉ chấp nhận các yêu cầu sử dụng certificate ứng dụng client hợp lệ từ Cloudflare; tất cả các yêu cầu chưa được chuyển qua Cloudflare sẽ bị loại bỏ.

Bước 3 - Cài đặt Kéo root được xác thực

Chứng chỉ Origin CA sẽ giúp Cloudflare xác minh nó đang kết nối với server root chính xác. Bước này sẽ sử dụng Xác thực client TLS để xác minh server Nginx root của bạn đang nói chuyện với Cloudflare.

Trong quá trình bắt tay TLS được xác thực bởi client , cả hai bên đều cung cấp certificate để được xác minh. Server root được cấu hình để chỉ chấp nhận các yêu cầu sử dụng certificate ứng dụng client hợp lệ từ Cloudflare. Các yêu cầu không thông qua Cloudflare sẽ bị loại bỏ vì chúng sẽ không có certificate của Cloudflare. Điều này 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 server Nginx của bạn.

Cloudflare trình bày các certificate do CA ký với certificate 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ể download certificate trực tiếp từ Cloudflare tại đây .

Sao chép certificate này.

Sau đó, tạo file /etc/ssl/cloudflare.crt file để giữ certificate của Cloudflare:

  • sudo nano /etc/ssl/cloudflare.crt

Thêm certificate vào file . Sau đó, lưu file và thoát khỏi editor .

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ở file cấu hình cho domain của bạn:

  • sudo nano /etc/nginx/sites-available/your_domain

Thêm ssl_client_certificatessl_verify_client chỉ thị như trong ví dụ sau:

/ etc / nginx / sites-available / your_domain
. . .  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 editor .

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 sự cố nào, hãy khởi động lại Nginx để kích hoạt các thay đổi :

  • sudo systemctl restart nginx

Cuối cùng, để bật Mã kéo được xác thực, hãy mở phần SSL / TLS trong console Cloudflare, chuyển đến tab Server root và chuyển đổi tùy chọn Kéo root được xác thực .

Bật Kéo root  được xác thực

Bây giờ hãy truy cập trang web tại https:// your_domain để xác minh nó đã được cài đặt đúng cách. Như trước đây, bạn sẽ thấy trang chủ của bạn được hiển thị.

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

Thông báo lỗi

Server root 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 vào bộ nhớ cache các yêu cầu, do đó, để thấy sự thay đổi ở trên, bạn có thể sử dụng chế độ duyệt Ẩn danh / Riêng tư trong trình duyệt của bạn . Để ngăn Cloudflare lưu vào bộ nhớ đệm các yêu cầu trong khi bạn cài đặt trang web của bạn , hãy chuyển đến Tổng quan trong trang tổng quan Cloudflare và chuyển đổi Chế độ phát triển .

Đến đây bạn biết nó hoạt động bình thường, hãy quay lại phần SSL / TLS trong console Cloudflare, chuyển đến tab Server root và bật lại tùy chọn Nguồn root được xác thực để bật.

Kết luận

Trong hướng dẫn này, bạn đã bảo mật trang web được cung cấp bởi Nginx của bạn bằng cách mã hóa lưu lượng truy cập giữa Cloudflare và server Nginx bằng certificate Origin CA từ Cloudflare. Sau đó, bạn cài đặt Authenticated Origin Pulls trên server Nginx đảm bảo rằng nó chỉ chấp nhận các yêu cầu của server Cloudflare, ngăn không cho bất kỳ ai khác kết nối trực tiếp với server Nginx.


Tags:

Các tin liên quan

Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 18.04
2020-08-16
Cách cấu hình Jenkins với SSL bằng Nginx Reverse Proxy trên Ubuntu 20.04
2020-07-01
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 20.04
2020-06-29
Cách thiết lập Nginx với Hỗ trợ HTTP / 2 trên Ubuntu 18.04
2020-06-09
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 20.04
2020-05-26
Cách cung cấp các ứng dụng Flask với uWSGI và Nginx trên Ubuntu 18.04
2020-05-21
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 20.04
2020-05-20
Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu 20.04
2020-05-20
Cách cài đặt và cấu hình Laravel với Nginx trên Ubuntu 20.04
2020-05-19
Cách cài đặt Nginx trên Ubuntu 18.04
2020-05-06