How To Secure Nginx with Let 16.06
Phiên bản trước của hướng dẫn này được viết bởi Hazel Virdó
Giới thiệu
Let's Encrypt là Tổ chức phát hành chứng chỉ (CA) cung cấp cách dễ dàng để lấy và cài đặt chứng chỉ TLS / SSL miễn phí, do đó cho phép HTTPS được mã hóa trên máy chủ web. Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng khách phần mềm, Certbot, cố gắng tự động hóa hầu hết (nếu không phải tất cả) các bước cần thiết. Hiện tại, toàn bộ quá trình lấy và cài đặt chứng chỉ hoàn toàn tự động trên cả Apache và Nginx.
Trong hướng dẫn này, bạn sẽ sử dụng Certbot để lấy chứng chỉ SSL miễn phí cho Nginx trên Ubuntu 18.04 và thiết lập tự động gia hạn chứng chỉ của bạn.
Hướng dẫn này sẽ sử dụng tệp khối máy chủ Nginx riêng biệt thay vì tệp mặc định. Chúng tôi khuyên bạn nên tạo các tệp khối máy chủ Nginx mới cho từng miền vì nó giúp tránh các lỗi thường gặp và duy trì các tệp mặc định dưới dạng cấu hình dự phòng.
Điều kiện tiên quyết
Để làm theo hướng dẫn này, bạn sẽ cần:
-
Một máy chủ Ubuntu 18.04 được thiết lập bằng cách làm theo thiết lập máy chủ ban đầu này cho hướng dẫn Ubuntu 18.04 , bao gồm người dùng không phải root sudo và tường lửa.
-
Tên miền đã đăng ký đầy đủ. Hướng dẫn này sẽ sử dụng example.com xuyên suốt. Bạn có thể mua một tên miền trên Namecheap , nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn.
-
Cả hai bản ghi DNS sau được thiết lập cho máy chủ của bạn. Bạn có thể theo dõi phần giới thiệu này về DigitalOcean DNS để biết chi tiết về cách thêm chúng.
- Bản ghi A với
example.com
trỏ đến địa chỉ IP công cộng của máy chủ của bạn. - Một bản ghi A với
www. example.com
trỏ đến địa chỉ IP công cộng của máy chủ của bạn.
- Bản ghi A với
-
Đã cài đặt Nginx bằng cách làm theo Cách cài đặt Nginx trên Ubuntu 18.04 . Đảm bảo rằng bạn có khối máy chủ cho miền của mình. Hướng dẫn này sẽ sử dụng
/etc/nginx/sites-available/ example.com
làm ví dụ.
Bước 1 - Cài đặt Certbot
Bước đầu tiên để sử dụng Let's Encrypt để lấy chứng chỉ SSL là cài đặt phần mềm Certbot trên máy chủ của bạn.
Certbot đang được phát triển rất tích cực, vì vậy các gói Certbot do Ubuntu cung cấp có xu hướng lỗi thời. Tuy nhiên, các nhà phát triển Certbot duy trì một kho phần mềm Ubuntu với các phiên bản cập nhật, vì vậy chúng tôi sẽ sử dụng kho đó thay thế.
Đầu tiên, thêm kho lưu trữ:
- sudo add-apt-repository ppa:certbot/certbot
Bạn sẽ cần nhấn ENTER
để chấp nhận.
Cài đặt gói Nginx của Certbot với apt
:
- sudo apt install python-certbot-nginx
Certbot hiện đã sẵn sàng để sử dụng, nhưng để nó định cấu hình SSL cho Nginx, chúng tôi cần xác minh một số cấu hình của Nginx.
Bước 2 - Xác nhận cấu hình của Nginx
Certbot cần có khả năng tìm đúng khối server
trong cấu hình Nginx của bạn để có thể tự động định cấu hình SSL. Cụ thể, nó thực hiện điều này bằng cách tìm kiếm lệnh server_name
khớp với miền mà bạn yêu cầu chứng chỉ.
Nếu bạn đã làm theo bước thiết lập khối máy chủ trong hướng dẫn cài đặt Nginx , bạn sẽ có một khối máy chủ cho miền của mình tại /etc/nginx/sites-available/ example.com
với chỉ thị server_name
đã được đặt phù hợp.
Để kiểm tra, hãy mở tệp khối máy chủ cho miền của bạn bằng nano
hoặc trình soạn thảo văn bản yêu thích của bạn:
- sudo nano /etc/nginx/sites-available/example.com
Tìm dòng server_name
hiện có. Nó sẽ giống như thế này:
...
server_name example.com www.example.com;
...
Nếu có, hãy thoát khỏi trình chỉnh sửa của bạn và chuyển sang bước tiếp theo.
Nếu không, hãy cập nhật nó để phù hợp. Sau đó, lưu tệp, thoát khỏi trình chỉnh sửa của bạn và xác minh cú pháp của các chỉnh sửa cấu hình của bạn:
- sudo nginx -t
Nếu bạn gặp lỗi, hãy mở lại tệp khối máy chủ và kiểm tra xem có lỗi chính tả hoặc ký tự bị thiếu nào không. Khi cú pháp của tệp cấu hình của bạn chính xác, hãy tải lại Nginx để tải cấu hình mới:
- sudo systemctl reload nginx
Certbot hiện có thể tìm thấy khối server
chính xác và cập nhật nó.
Tiếp theo, hãy cập nhật tường lửa để cho phép lưu lượng HTTPS.
Bước 3 - Cho phép HTTPS thông qua tường lửa
Nếu bạn đã bật tường lửa ufw
, theo khuyến nghị của các hướng dẫn điều kiện tiên quyết, bạn sẽ cần điều chỉnh cài đặt để cho phép lưu lượng HTTPS. May mắn thay, Nginx đăng ký một số cấu hình với ufw
khi cài đặt.
Bạn có thể xem cài đặt hiện tại bằng cách nhập:
- sudo ufw status
Nó có thể sẽ giống như thế này, có nghĩa là chỉ lưu lượng HTTP được phép đến máy chủ web:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Ngoài ra, để cho phép lưu lượng truy cập HTTPS, hãy cho phép cấu hình Nginx Full và xóa phụ cấp cấu hình HTTP Nginx dư thừa:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
Trạng thái của bạn bây giờ sẽ giống như sau:
- sudo ufw status
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, hãy chạy Certbot và tìm nạp chứng chỉ của chúng tôi.
Bước 4 - Lấy chứng chỉ SSL
Certbot cung cấp nhiều cách khác nhau để lấy chứng chỉ SSL thông qua các plugin. Plugin Nginx sẽ xử lý việc định cấu hình lại Nginx và tải lại cấu hình bất cứ khi nào cần thiết. Để sử dụng plugin này, hãy nhập như sau:
- sudo certbot --nginx -d example.com -d www.example.com
Điều này chạy certbot
với plugin --nginx
, sử dụng -d
để chỉ định tên mà chúng tôi muốn chứng chỉ hợp lệ.
Nếu đây là lần đầu tiên bạn chạy certbot
, bạn sẽ được nhắc nhập địa chỉ email và đồng ý với các điều khoản dịch vụ. Sau khi làm như vậy, certbot
sẽ giao tiếp với máy chủ Let's Encrypt, sau đó chạy thử thách để xác minh rằng bạn kiểm soát miền mà bạn đang yêu cầu chứng chỉ.
Nếu thành công, certbot
sẽ hỏi bạn muốn định cấu hình cài đặt HTTPS của mình như thế nào.
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Chọn lựa chọn của bạn rồi nhấn ENTER
. Cấu hình sẽ được cập nhật và Nginx sẽ tải lại để chọn cài đặt mới. certbot
sẽ kết thúc bằng một thông báo cho bạn biết quá trình đã thành công và nơi lưu trữ chứng chỉ của bạn:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-07-23. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Chứng chỉ của bạn đã được tải xuống, cài đặt và tải. Hãy thử tải lại trang web của bạn bằng https://
và để ý chỉ báo bảo mật của trình duyệt. Nó phải cho biết rằng trang web được bảo mật đúng cách, thường có biểu tượng ổ khóa màu xanh lục. Nếu bạn kiểm tra máy chủ của mình bằng Kiểm tra máy chủ SSL Labs, máy chủ sẽ đạt điểm A.
Hãy kết thúc bằng cách thử nghiệm quá trình gia hạn.
Bước 5 - Xác minh Tự động gia hạn Certbot
Chứng chỉ của Let's Encrypt chỉ có giá trị trong chín mươi ngày. Điều này nhằm khuyến khích người dùng tự động hóa quy trình gia hạn chứng chỉ của họ. Gói certbot
mà chúng tôi đã cài đặt sẽ giải quyết việc này cho chúng tôi bằng cách thêm tập lệnh gia hạn vào /etc/cron.d
. Tập lệnh này chạy hai lần một ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào trong vòng ba mươi ngày kể từ ngày hết hạn.
Để kiểm tra quá trình gia hạn, bạn có thể thực hiện chạy thử nghiệm với certbot
:
- sudo certbot renew --dry-run
Nếu bạn không thấy lỗi, bạn đã hoàn tất. Khi cần thiết, Certbot sẽ gia hạn chứng chỉ của bạn và tải lại Nginx để thực hiện các thay đổi. Nếu quá trình gia hạn tự động không thành công, Let's Encrypt sẽ gửi một thông báo đến email bạn đã chỉ định, cảnh báo cho bạn khi chứng chỉ của bạn sắp hết hạn.
Phần kết luận
Trong hướng dẫn này, bạn đã cài đặt certbot
máy khách Let's Encrypt, tải xuống chứng chỉ SSL cho miền của mình, định cấu hình Nginx để sử dụng các chứng chỉ này và thiết lập gia hạn chứng chỉ tự động. Nếu bạn có thêm câu hỏi về việc sử dụng Certbot, tài liệu của họ là một nơi tốt để bắt đầu.
Các tin trước
Cài đặt SSH Keys trên Ubuntu 16.04 2018-04-12 Cài đặt Node.js trên Ubuntu 16.04 2018-03-07 Cài đặt Anaconda Python trên Ubuntu 16 04 2017-12-27 Cài đặt MySQL trên CentOS 7 2016-12-01 Cài đặt MySQL trên Ubuntu 16.04 2016-11-23 Cài đặt Node.js Application for Production trên Ubuntu 16.04 2016-11-01 Cài đặt Nginx Server Blocks (Virtual Hosts) trên Ubuntu 16.04 2016-05-19 Cài đặt OpenVPN Server trên Ubuntu 16.04 2016-05-04 Cài đặt JAVA với Apt-Get trên Ubuntu 16.04 2016-04-23 Cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04 2016-04-21