Thứ năm, 15/03/2018 | 00:00 GMT+7

Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 16.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 được cung cấp bởi Nginx bằng certificate Origin CA từ Cloudflare và 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 chuyển đến phần Crypto trên trang tổng quan Cloudflare của bạn. Từ đó, nhấp vào nút Tạo certificate trong phần Chứng chỉ xuất xứ :

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

Để tùy chọn mặc định của 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 đến server của bạn .

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

Ta sẽ sử dụng folder /etc/ssl/certs trên server để giữ certificate root . Thư mục /etc/ssl/private sẽ chứa file private key . Cả hai folder đều đã 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/certs/cert.pem để chỉnh sửa:

  • sudo nano /etc/ssl/certs/cert.pem

Dán 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/private/key.pem để chỉnh sửa:

  • sudo nano /etc/ssl/private/key.pem

Dán khóa vào file , lưu file và thoát khỏi editor .

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 certificate Origin CA trong Nginx

Trong phần trước, bạn đã tạo certificate root và private key bằng console của Cloudlfare 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.

Nginx tạo một khối server mặc định trong khi cài đặt. Hãy xóa nó nếu 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/example.com

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

example.com '> / etc / nginx / sites-available / example.com
server {         listen 80;         listen [::]:80;          root /var/www/example.com/html;         index index.html index.htm index.nginx-debian.html;          server_name example.com www.example.com;          location / {                 try_files $uri $uri/ =404;         } }  

Ta 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 root và private key mà bạn đã thêm trong phần trước.

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

example.com '> / etc / nginx / sites-available / example.com
server {     listen 80;     listen [::]:80;     server_name example.com www.example.com;     return 302 https://$server_name$request_uri; }  server {      # SSL configuration      listen 443 ssl http2;     listen [::]:443 ssl http2;     ssl        on;     ssl_certificate         /etc/ssl/certs/cert.pem;     ssl_certificate_key     /etc/ssl/private/key.pem;      server_name example.com www.example.com;      root /var/www/example.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 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 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

Bây giờ, hãy chuyển đến phần Crypto của console Cloudflare và thay đổi chế độ SSL thành Đầy đủ . Đ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 đủ trong  Control panel  Cloudflare

Bây giờ, hãy truy cập trang web tại https:// example.com để 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 và các yêu cầu không đượ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. Nhưng làm cách nào server Nginx root của bạn có thể xác minh nó thực sự đang nói chuyện với Cloudflare? Nhập xác thực ứng dụng client TLS.

Trong quá trình bắt tay TLS được xác thực của khách hàng, 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----- MIIGBjCCA/CgAwIBAgIIV5G6lVbCLmEwCwYJKoZIhvcNAQENMIGQMQswCQYDVQQG EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjEUMBIGA1UECxMLT3JpZ2lu IFB1bGwxFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3Ju aWExIzAhBgNVBAMTGm9yaWdpbi1wdWxsLmNsb3VkZmxhcmUubmV0MB4XDTE1MDEx MzAyNDc1M1oXDTIwMDExMjAyNTI1M1owgZAxCzAJBgNVBAYTAlVTMRkwFwYDVQQK ExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmlnaW4gUHVsbDEWMBQGA1UE BxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEAxMa b3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDdsts6I2H5dGyn4adACQRXlfo0KmwsN7B5rxD8C5qgy6spyONr WV0ecvdeGQfWa8Gy/yuTuOnsXfy7oyZ1dm93c3Mea7YkM7KNMc5Y6m520E9tHooc f1qxeDpGSsnWc7HWibFgD7qZQx+T+yfNqt63vPI0HYBOYao6hWd3JQhu5caAcIS2 ms5tzSSZVH83ZPe6Lkb5xRgLl3eXEFcfI2DjnlOtLFqpjHuEB3Tr6agfdWyaGEEi lRY1IB3k6TfLTaSiX2/SyJ96bp92wvTSjR7USjDV9ypf7AD6u6vwJZ3bwNisNw5L ptph0FBnc1R6nDoHmvQRoyytoe0rl/d801i9Nru/fXa+l5K2nf1koR3IX440Z2i9 +Z4iVA69NmCbT4MVjm7K3zlOtwfI7i1KYVv+ATo4ycgBuZfY9f/2lBhIv7BHuZal b9D+/EK8aMUfjDF4icEGm+RQfExv2nOpkR4BfQppF/dLmkYfjgtO1403X0ihkT6T PYQdmYS6Jf53/KpqC3aA+R7zg2birtvprinlR14MNvwOsDOzsK4p8WYsgZOR4Qr2 gAx+z2aVOs/87+TVOR0r14irQsxbg7uP2X4t+EXx13glHxwG+CnzUVycDLMVGvuG aUgF9hukZxlOZnrl6VOf1fg0Caf3uvV8smOkVw6DMsGhBZSJVwao0UQNqQIDAQAB o2YwZDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4E FgQUQ1lLK2mLgOERM2pXzVc42p59xeswHwYDVR0jBBgwFoAUQ1lLK2mLgOERM2pX zVc42p59xeswCwYJKoZIhvcNAQENA4ICAQDKDQM1qPRVP/4Gltz0D6OU6xezFBKr LWtDoA1qW2F7pkiYawCP9MrDPDJsHy7dx+xw3bBZxOsK5PA/T7p1dqpEl6i8F692 g//EuYOifLYw3ySPe3LRNhvPl/1f6Sn862VhPvLa8aQAAwR9e/CZvlY3fj+6G5ik 3it7fikmKUsVnugNOkjmwI3hZqXfJNc7AtHDFw0mEOV0dSeAPTo95N9cxBbm9PKv qAEmTEXp2trQ/RjJ/AomJyfA1BQjsD0j++DI3a9/BbDwWmr1lJciKxiNKaa0BRLB dKMrYQD+PkPNCgEuojT+paLKRrMyFUzHSG1doYm46NE9/WARTh3sFUp1B7HZSBqA kHleoB/vQ/mDuW9C3/8Jk2uRUdZxR+LoNZItuOjU8oTy6zpN1+GgSj7bHjiy9rfA F+ehdrz+IOh80WIiqs763PGoaYUyzxLvVowLWNoxVVoc9G+PqFKqD988XlipHVB6 Bz+1CD4D/bWrs3cC9+kk/jFmrrAymZlkFX8tDb5aXASSLJjUjcptci9SKqtI2h0J wUGkD7+bQAr+7vr8/R+CBmNMe7csE8NeEX6lVMF7Dh0a1YKQa6hUN18bBuYgTMuT QzMmZpRpIBB321ZBlcnlxiTJvWxvbCPHKHj20VwwAz7LONF59s84ZsOqfoBv8gKM s0s5dsq5zpLeaw== -----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/certs/cloudflare.crt file để giữ certificate của Cloudflare:

  • sudo nano /etc/ssl/certs/cloudflare.crt

Dán 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/example.com

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

example.com '> / etc / nginx / sites-available / example.com
. . .  server {      # SSL configuration      listen 443 ssl http2;     listen [::]:443 ssl http2;     ssl        on;     ssl_certificate         /etc/ssl/certs/cert.pem;     ssl_certificate_key     /etc/ssl/private/key.pem;     ssl_client_certificate /etc/ssl/certs/cloudflare.crt;     ssl_verify_client on;      . . . 

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ấ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, để kích hoạt tính năng xác thực Kéo, hãy mở phần Crypto trong console CloudFlare và bật tắt tùy chọn xác thực xứ Kéo.

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

Bây giờ, hãy truy cập trang web tại https:// example.com để 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 yêu cầu không được CA của Cloudflare ký.

Giờ bạn đã biết nó hoạt động bình thường, hãy quay lại phần Crypto trong console Cloudflare và bật lại tùy chọn Authenticated Origin Pulls để bật nó.

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 từ server của 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

Nginx Essentials: Khắc phục sự cố cài đặt và cấu hình
2017-12-12
Cách thiết lập Let's Encrypt với Nginx Server Blocks trên Ubuntu 16.04
2017-10-27
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04
2017-10-27
Cách tăng điểm tốc độ trang bằng cách thay đổi cấu hình Nginx của bạn trên Ubuntu 16.04
2017-08-15
Cách thêm module log vào Nginx trên Debian 8
2017-06-21
Cách triển khai ứng dụng Laravel với Nginx trên Ubuntu 16.04
2017-06-14
Cách bảo mật CI bằng SSL bằng Nginx trên Ubuntu 16.04
2017-05-26
Cách cấu hình Buildbot với SSL bằng Nginx Reverse Proxy
2017-05-17
Cách cấu hình Jenkins với SSL bằng cách sử dụng Nginx Reverse Proxy
2017-05-02
Cách tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 7
2017-01-09