Thứ hai, 02/07/2018 | 00:00 GMT+7

Cách bảo mật Nginx bằng Let's Encrypt trên FreeBSD

Let's Encrypt là Tổ chức phát hành certificate (CA) cung cấp cách dễ dàng để lấy và cài đặt certificate TLS / SSL miễn phí, do đó cho phép HTTPS được mã hóa trên web server . Nó đơn giản hóa quy trình bằng cách cung cấp một ứng dụng client , Certbot, tự động hóa hầu hết các bước.

Trong hướng dẫn này, ta sẽ chỉ cho bạn cách sử dụng Certbot để lấy certificate SSL miễn phí và sử dụng nó trên server FreeBSD chạy Nginx. Ta cũng sẽ hướng dẫn bạn cách tự động gia hạn certificate SSL của bạn.

Ta sẽ sử dụng file cấu hình Nginx mặc định trong hướng dẫn này thay vì file khối server riêng biệt. Thông thường, ta khuyên bạn nên tạo các file khối server Nginx mới cho mỗi domain vì nó giúp tránh một số lỗi phổ biến và duy trì các file mặc định dưới dạng cấu hình dự phòng như dự định.

Yêu cầu

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

  • Một server FreeBSD. Nếu bạn mới làm việc với FreeBSD 11, bạn có thể làm theo hướng dẫn này để giúp bạn bắt đầu.
  • Nginx đã được cài đặt và cấu hình trên server của bạn. Để biết hướng dẫn về cách cài đặt điều này, hãy xem hướng dẫn của ta về Cách cài đặt Nginx trên FreeBSD 11.2 .
  • Tên domain đã đăng ký mà bạn sở hữu và kiểm soát. Nếu bạn chưa có domain đã đăng ký, bạn có thể đăng ký một domain với một trong nhiều công ty đăng ký domain hiện có (ví dụ: Namecheap, GoDaddy, v.v.).
  • Bản ghi DNS A trỏ domain của bạn đến địa chỉ IP công cộng của server của bạn. Bạn có thể làm theo hướng dẫn tên server này để biết chi tiết về cách thêm chúng. Điều này là bắt buộc vì cách Let's Encrypt xác thực rằng bạn sở hữu domain mà nó cấp certificate . Ví dụ: nếu bạn muốn lấy certificate cho example.com , thì domain đó phải phân giải tới server của bạn để quá trình xác thực hoạt động. Cài đặt của ta sẽ sử dụng example.comwww.example.com làm domain , vì vậy cả hai bản ghi DNS đều được yêu cầu .

Khi bạn đã hoàn thành các yêu cầu này, hãy chuyển sang cài đặt Certbot, phần mềm client Let's Encrypt.

Bước 1 - Cài đặt Certbot

Bước đầu tiên để sử dụng Let's Encrypt để lấy certificate SSL là cài đặt phần mềm ứng dụng client certbot trên server của bạn. Phiên bản mới nhất của Certbot có thể được cài đặt từ nguồn bằng hệ thống cổng của FreeBSD.

Để bắt đầu, tìm nạp một ảnh chụp nhanh đã nén của cây cổng:

  • sudo portsnap fetch

Có thể mất vài phút để lệnh này hoàn thành. Khi quá trình kết thúc, hãy extract ảnh chụp nhanh:

  • sudo portsnap extract

Cũng có thể mất một lúc để lệnh này kết thúc. Sau khi hoàn tất, hãy chuyển đến folder py-certbot trong cây cổng:

  • cd /usr/ports/security/py-certbot

Sau đó, sử dụng lệnh make với quyền sudo để download và biên dịch mã nguồn Certbot:

  • sudo make install clean

Tiếp theo, chuyển đến folder py-certbot-nginx trong cây cổng:

  • cd /usr/ports/security/py-certbot-nginx

Chạy lại lệnh make từ folder này. Thao tác này sẽ cài đặt plugin nginx cho Certbot mà ta sẽ sử dụng để lấy certificate SSL:

  • sudo make install clean

Trong quá trình cài đặt plugin này, bạn sẽ thấy một vài cửa sổ hộp thoại màu xanh lam bật lên trông giống như sau:

Ví dụ về cửa sổ hộp thoại py-certbot-nginx

Những điều này cung cấp cho bạn tùy chọn để cài đặt tài liệu cho plugin và các phụ thuộc của nó. Theo mục đích của hướng dẫn này, bạn chỉ cần nhấn ENTER để chấp nhận các tùy chọn mặc định trong các cửa sổ sẽ cài đặt tài liệu này.

Ứng dụng certbot Let's Encrypt hiện đã sẵn sàng để sử dụng. Tuy nhiên, trước khi nhận được certificate của bạn, điều quan trọng là phải cài đặt firewall và cho phép lưu lượng truy cập HTTPS qua đó, nếu bạn chưa làm như vậy.

Bước 2 - Cài đặt firewall và cho phép truy cập HTTPS

Nếu bạn đã cài đặt firewall trên server của bạn , bạn nên đảm bảo nó cho phép truy cập HTTPS (thông qua cổng 443 ). Nếu bạn chưa cài đặt firewall , bạn có thể làm như vậy theo các hướng dẫn được nêu trong bước này.

Mở file rc.conf của bạn, nằm trong folder /etc/ , bằng trình soạn thảo bạn muốn . Ở đây ta sẽ sử dụng ee :

  • sudo ee /etc/rc.conf

Tệp này được sử dụng để thông báo cho FreeBSD biết dịch vụ nào sẽ được khởi động khi nào máy khởi động. Gần đầu file , thêm các dòng được đánh dấu sau:

/etc/rc.conf
. . . nginx_enable="YES" firewall_enable="YES" firewall_type="workstation" firewall_myservices="22/tcp 80/tcp 443/tcp" firewall_allowservices="any" 

Đây là những gì mỗi lệnh này và cài đặt của chúng thực hiện:

  • firewall_enable="YES" - Điều này cho phép firewall khởi động khi nào server khởi động.
  • firewall_type="workstation" - FreeBSD cung cấp một số loại firewall mặc định, mỗi loại có cấu hình hơi khác nhau. Bằng cách khai báo kiểu workstation , firewall sẽ chỉ bảo vệ server này bằng các luật trạng thái.
  • firewall_myservices="22/tcp 80/tcp 443/tcp" - Chỉ thị firewall_myservices là nơi bạn có thể liệt kê các cổng TCP bạn muốn cho phép thông qua firewall . Trong ví dụ này, ta chỉ định các cổng 22 , 80443 để cho phép truy cập SSH, HTTP và HTTPS tương ứng vào server .
  • firewall_allowservices="any" - Điều này cho phép một máy từ bất kỳ địa chỉ IP nào giao tiếp qua các cổng được chỉ định trong chỉ thị firewall_myservices .

Sau khi thêm những dòng này, hãy lưu file và đóng editor bằng cách nhấn CTRL + C , nhập exit , rồi nhấn ENTER .

Sau đó, khởi động dịch vụ firewall ipfw . Vì đây là lần đầu tiên bạn khởi động firewall trên server này nên có khả năng làm như vậy sẽ khiến server của bạn bị đình trệ, khiến nó không thể truy cập được qua SSH. Lệnh nohup sau - viết tắt của "no Hangups" - sẽ khởi động firewall trong khi ngăn chặn sự cố và cũng chuyển hướng kết quả chuẩn và lỗi đến file log tạm thời:

  • sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

Tuy nhiên, nếu bạn đang sử dụng csh hoặc tcsh , chuyển hướng này sẽ gây Ambiguous output redirect. để xuất hiện trong kết quả của bạn. Trong trường hợp này, hãy chạy phần sau để bắt đầu ipfw :

  • sudo nohup service ipfw start >&/tmp/ipfw.log

Trong tương lai, bạn có thể quản lý firewall ipfw như với bất kỳ dịch vụ nào khác. Ví dụ: để dừng, bắt đầu và sau đó khởi động lại dịch vụ, bạn sẽ chạy các lệnh sau:

  • sudo service ipfw stop
  • sudo service ipfw start
  • sudo service ipfw restart

Với firewall được cấu hình , bây giờ bạn đã sẵn sàng chạy Certbot và tìm nạp certificate của bạn .

Bước 3 - Lấy certificate SSL

Certbot cung cấp nhiều cách khác nhau để lấy certificate SSL thông qua các plugin khác nhau. Plugin nginx sẽ xử lý việc cấu hình lại Nginx và reload file cấu hình:

  • sudo certbot --nginx -d example.com -d www.example.com

Nếu đây là lần đầu tiên bạn chạy certbot trên server này, ứng dụng client sẽ nhắc bạn nhập địa chỉ email và đồng ý với các điều khoản dịch vụ của Let's Encrypt. Sau khi làm như vậy, certbot sẽ giao tiếp với server Let's Encrypt, sau đó chạy thử thách để xác minh bạn kiểm soát domain mà bạn đang certificate request .

Nếu thử thách thành công, Certbot sẽ hỏi bạn muốn cấu hình cài đặt HTTPS của bạn như thế nào:

Output
. . . 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): 2

Chọn lựa chọn của bạn rồi nhấn ENTER . Thao tác này sẽ cập nhật cấu hình và reload Nginx để nhậ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ữ certificate của bạn:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /usr/local/etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /usr/local/etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-09-24. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /usr/local/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

Các certificate của bạn hiện đã được download , cài đặt và cấu hình . Hãy thử reload trang web bằng https:// và để ý chỉ báo bảo mật của trình duyệt. Nó phải thể hiện 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 server của bạn bằng Kiểm tra server SSL Labs, server sẽ đạt điểm A.

Sau khi xác nhận bạn có thể truy cập trang web của bạn qua HTTPS, bạn có thể chuyển sang bước cuối cùng của hướng dẫn này, trong đó bạn sẽ xác nhận bạn có thể gia hạn certificate của bạn và sau đó cấu hình quy trình để tự động gia hạn chúng.

Bước 4 - 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 user tự động hóa quy trình gia hạn certificate của họ. Bước này mô tả cách tự động gia hạn certificate bằng cách cài đặt tác vụ cron . Tuy nhiên, trước khi cài đặt gia hạn tự động này, điều quan trọng là phải kiểm tra xem bạn có thể gia hạn certificate một cách chính xác hay không.

Để 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 đã sẵn sàng tạo một crontab mới:

  • sudo crontab -e

Thao tác này sẽ mở một file crontab mới. Thêm nội dung sau vào file mới, file này sẽ yêu cầu cron chạy lệnh certbot renew hai lần mỗi ngày vào buổi trưa và nửa đêm. certbot renew kiểm tra xem có bất kỳ certificate nào trên hệ thống sắp hết hạn hay không và sẽ cố gắng gia hạn chúng khi cần thiết:

0 0,12 * * * /usr/local/bin/certbot renew 

Lưu ý vì bạn đã đặt trước lệnh crontab -e bằng sudo nên thao tác này sẽ được chạy dưới dạng root , điều này là cần thiết vì certbot yêu cầu các quyền của superuser để chạy.

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 certificate của bạn sắp hết hạn.

Kết luận

Trong hướng dẫn này, ta đã cài đặt certbot client Let's Encrypt, download certificate SSL cho domain của ta , cấu hình Nginx để sử dụng các certificate này và cài đặt gia hạn certificate 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 để tham khảo .


Tags:

Các tin liên quan

Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04
2018-04-27
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên Ubuntu 16.04
2018-04-12
Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 16.04
2018-03-15
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