18/09/2018, 16:43

Làm thế nào để bảo mật GitLab với Hãy mã hóa trên Ubuntu 16.04

Trạng thái: Không được chấp nhận Bài viết này trình bày một phương pháp cấu hình GitLab cũ hơn với Let's Encrypt bằng tay. Kể từ Phiên bản GitLab 10.5, Hãy mã hóa hỗ trợ có sẵn tự nhiên trong Gitlab. Hướng dẫn của chúng tôi về Làm thế nào để cài đặt và cấu hình GitLab trên Ubuntu 16.04 đã ...

Trạng thái: Không được chấp nhận

Bài viết này trình bày một phương pháp cấu hình GitLab cũ hơn với Let's Encrypt bằng tay. Kể từ Phiên bản GitLab 10.5, Hãy mã hóa hỗ trợ có sẵn tự nhiên trong Gitlab.

Hướng dẫn của chúng tôi về Làm thế nào để cài đặt và cấu hình GitLab trên Ubuntu 16.04 đã được cập nhật để bao gồm các cài đặt cấu hình có liên quan trong GitLab. Chúng tôi khuyên bạn nên tham khảo hướng dẫn đó trong tương lai.

Giới thiệu

GitLab, cụ thể là GitLab CE (Community Edition), là một ứng dụng mã nguồn mở chủ yếu được sử dụng để lưu trữ các kho Git, với các tính năng liên quan đến phát triển bổ sung như theo dõi vấn đề. Dự án GitLab làm cho nó tương đối thẳng về phía trước để thiết lập một cá thể GitLab trên phần cứng của riêng bạn với một cơ chế cài đặt dễ dàng.

Theo mặc định, GitLab cung cấp các trang trên HTTP thuần túy, không được mã hóa. Giống như bất kỳ ứng dụng web nào xử lý thông tin nhạy cảm như thông tin xác thực đăng nhập, GitLab phải được định cấu hình để phân phối các trang trên TLS / SSL để mã hóa dữ liệu khi chuyển tiếp. Điều này cực kỳ quan trọng với GitLab vì cơ sở mã của dự án của bạn có thể bị thay đổi bởi một người nào đó có thể chặn thông tin xác thực đăng nhập của bạn.

Dự án Let's Encrypt có thể được sử dụng để dễ dàng có được chứng chỉ SSL đáng tin cậy cho bất kỳ trang web hoặc ứng dụng web nào. Hãy mã hóa các chứng chỉ phiếu mua hàng được ký bởi tổ chức phát hành chứng chỉ của họ, được tất cả các trình duyệt web hiện đại tin cậy, nếu bạn có thể chứng minh rằng bạn sở hữu miền bạn đang yêu cầu chứng chỉ.

Trong hướng dẫn này, chúng tôi sẽ trình bày cách cấu hình một cá thể GitLab được cài đặt trên Ubuntu 16.04 để sử dụng chứng chỉ SSL đáng tin cậy thu được từ Let's Encrypt. Điều này sẽ bảo đảm tất cả các giao tiếp gửi đi cho người dùng và đảm bảo rằng mật khẩu, mã và mọi thông tin liên lạc khác được bảo vệ khỏi bị các bên bên ngoài đọc hoặc giả mạo.

Điều kiện tiên quyết

Để hoàn thành hướng dẫn này, bạn sẽ cần phải có một cá thể GitLab được cài đặt trên một máy chủ Ubuntu 16.04. Chúng tôi sẽ giả định rằng bạn đã theo dõi cách cài đặt và cấu hình GitLab trên Ubuntu 16.04 hướng dẫn để thiết lập này.

Để có được một chứng chỉ từ Let's Encrypt, máy chủ của bạn phải được cấu hình với một tên miền đầy đủ (FQDN). Nếu bạn chưa có tên miền đã đăng ký, bạn có thể đăng ký tên miền với một trong nhiều công ty đăng ký tên miền (ví dụ: Namecheap, GoDaddy, v.v.).

Nếu bạn chưa có, hãy đảm bảo tạo Bản ghi trỏ tên miền của bạn đến địa chỉ IP công cộng của máy chủ của bạn. Điều này là bắt buộc vì cách mã hóa của chúng tôi xác nhận rằng bạn sở hữu miền mà nó đang cấp chứng chỉ cho. Ví dụ: nếu bạn muốn lấy chứng chỉ cho gitlab.example.com, tên miền đó phải giải quyết cho máy chủ của bạn để quá trình xác thực hoạt động. Bạn sẽ cần một miền thực với các bản ghi DNS hợp lệ trỏ đến máy chủ của bạn để hoàn tất thành công hướng dẫn này.

Cài đặt Certbot, chương trình Let's Encrypt Client

Trước khi chúng tôi có thể có được một chứng chỉ SSL cho cài đặt GitLab của chúng tôi, chúng tôi sẽ cần tải xuống và cài đặt Certbot, ứng dụng Let's Encrypt chính thức.

Các nhà phát triển Certbot duy trì kho phần mềm Ubuntu của riêng họ với các phiên bản cập nhật của phần mềm. Bởi vì Certbot trong sự phát triển tích cực như vậy, nên sử dụng kho lưu trữ này để cài đặt một Certbot mới hơn được cung cấp bởi Ubuntu.

Đầu tiên, thêm kho lưu trữ:

sudo add-apt-repository ppa:certbot/certbot

Bạn cần nhấn ENTER chấp nhận. Sau đó, cập nhật danh sách gói để nhận thông tin gói của kho lưu trữ mới:

sudo apt-get update

Và cuối cùng, cài đặt Certbot với apt-get:

sudo apt-get install certbot

Bây giờ Certbot đã được cài đặt, chúng ta có thể chuẩn bị máy chủ của mình để nó có thể đáp ứng thành công các kiểm tra xác nhận quyền sở hữu tên miền mà Let's Encrypt yêu cầu trước khi phát hành chứng chỉ.

Chuẩn bị cho Xác minh miền mã hóa web root

Để nhận được chứng chỉ SSL từ cơ quan cấp chứng chỉ Hãy mã hóa, chúng tôi phải chứng minh rằng chúng tôi sở hữu miền mà chứng chỉ sẽ được cung cấp. Có nhiều phương pháp chứng minh quyền sở hữu tên miền, mỗi phương thức đều yêu cầu quyền truy cập root hoặc quản trị viên vào máy chủ.

GitLab có một máy chủ web Nginx được quản lý nội bộ để phục vụ ứng dụng. Điều này làm cho việc cài đặt khá độc lập, nhưng nó thêm một lớp phức tạp bổ sung khi cố sửa đổi máy chủ web.

Do Nginx được nhúng hiện đang được sử dụng để phục vụ GitLab, phương pháp xác thực tên miền tốt nhất là phương pháp gốc của web. Certbot sẽ sử dụng máy chủ web hiện có để phục vụ một tệp đã biết từ máy chủ trên cổng 80. Điều này chứng minh cho tổ chức phát hành chứng chỉ rằng người yêu cầu chứng chỉ có quyền kiểm soát quản trị trên máy chủ web, có hiệu quả chứng minh quyền sở hữu máy chủ và miền.

Để thiết lập xác thực miền gốc của web cho GitLab, bước đầu tiên của chúng tôi là tạo một tài liệu giả gốc:

sudo mkdir -p /var/www/letsencrypt

Điều này sẽ không được sử dụng bởi các hoạt động Nginx bình thường, nhưng sẽ được Certbot sử dụng để xác minh miền.

Tiếp theo, chúng ta cần điều chỉnh cấu hình Nginx của GitLab để sử dụng thư mục này. Mở tệp cấu hình GitLab chính bằng cách gõ:

sudo nano /etc/gitlab/gitlab.rb

Bên trong, chúng ta cần thêm một dòng để chèn một chỉ thị tùy chỉnh vào tệp cấu hình Nginx của GitLab. Tốt nhất là nên cuộn xuống GitLab Nginx phần của tệp, nhưng dòng có thể được đặt ở bất kỳ đâu.

Dán vào dòng sau:

/etc/gitlab/gitlab.rb

. . .
nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
. . .

Phương thức xác minh gốc của mã hóa Hãy đặt một tệp trong một .well-known trong thư mục gốc của tài liệu để cơ quan cấp chứng chỉ có thể xác thực nó. Dòng này cho Nginx phục vụ các yêu cầu /.well-known từ gốc web mà chúng ta đã tạo ra một lúc trước.

Khi bạn hoàn tất, lưu và đóng tệp.

Tiếp theo, áp dụng các thay đổi cho cấu hình Nginx của GitLab bằng cách cấu hình lại ứng dụng lần nữa:

sudo gitlab-ctl reconfigure

Máy chủ sẽ được thiết lập để xác thực thành công miền của bạn.

Yêu cầu chứng chỉ với Certbot

Bây giờ trường hợp Nginx của GitLab được cấu hình với khối vị trí cần thiết, chúng ta có thể sử dụng Certbot để xác thực tên miền của chúng ta và yêu cầu một chứng chỉ.

Vì chúng tôi chỉ muốn có chứng chỉ và không muốn tự động định cấu hình lại máy chủ web, chúng tôi sẽ sử dụng certonly tiểu ban. Chúng tôi sẽ chỉ định ba tùy chọn. Chúng ta cần chọn trình xác thực gốc web (--webroot), vượt qua trong tài liệu gốc (--webroot-path=/var/www/letsencrypt) và sử dụng -d lệnh để chuyển tên miền của chúng tôi:

sudo certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d your_domain

Bạn sẽ được yêu cầu cung cấp địa chỉ email. Điều quan trọng là phải bao gồm địa chỉ email hợp lệ vì đây là cách duy nhất để nhận email đáng tin cậy về thời hạn chứng chỉ và các thông tin quan trọng khác. Bạn cũng sẽ được nhắc chấp nhận các điều khoản dịch vụ Hãy mã hóa.

Khi bạn đã hoàn tất, Let's Encrypt sẽ cấp cho bạn chứng chỉ cho miền nếu nó có thể xác thực quyền sở hữu một cách chính xác. Bạn sẽ thấy đầu ra trông giống như sau:

OutputIMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/gitlab.example.com/fullchain.pem. Your cert
   will expire on 2017-07-26. 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"
 - If you lose your account credentials, you can recover through
   e-mails sent to sammy@example.com.
 - 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

Bạn có thể tìm thấy tất cả các chứng chỉ và khóa được tạo bằng cách xem /etc/letsencrypt/live/your_domain thư mục với sudo đặc quyền:

sudo ls /etc/letsencrypt/live/your_domain

Outputcert.pem  chain.pem  fullchain.pem  privkey.pem

Đối với cấu hình của chúng tôi, chúng tôi sẽ chỉ cần biết đường dẫn đầy đủ đến fullchain.pem và privkey.pem các tập tin.

Cấu hình GitLab để sử dụng các chứng chỉ mã hóa

Bây giờ chúng ta đã có được chứng chỉ tin cậy từ Let's Encrypt, chúng ta có thể cấu hình GitLab để sử dụng TLS / SSL cho tất cả lưu lượng của nó.

Chỉnh sửa cấu hình GitLab

Bắt đầu bằng cách mở lại tệp cấu hình GitLab:

sudo nano /etc/gitlab/gitlab.rb

Ở trên cùng, thay đổi external_url. Hiện tại, nó có khả năng trỏ đến http://your_domain. Chúng ta chỉ cần thay đổi http đến https:

/etc/gitlab/gitlab.rb

. . .
external_url 'https://your_domain'
. . .

Tiếp theo, cuộn xuống dưới GitLab Nginx phần. Bỏ ghi chú và sửa đổi, hoặc chỉ cần thêm, các dòng sau đây.

Dòng chuyển hướng cho Nginx tự động chuyển hướng các yêu cầu được thực hiện tới cổng HTTP 80 tới cổng HTTPS 443. ssl_certificate dòng nên trỏ đến đường dẫn đầy đủ của fullchain.pem tệp, trong khi ssl_certificate_key dòng nên trỏ đến đường dẫn đầy đủ của privkey.pem tập tin:

/etc/gitlab/gitlab.rb

. . .
nginx['redirect_http_to_https'] = true
. . .
nginx['ssl_certificate'] = "/etc/letsencrypt/live/your_domain/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/your_domain/privkey.pem"
. . .

Lưu và đóng tệp khi bạn hoàn tất.

Cho phép lưu lượng HTTPS qua tường lửa

Tiếp theo, trước khi tải lại cấu hình Nginx của GitLab, hãy đảm bảo rằng lưu lượng HTTPS được cho phép thông qua tường lửa của máy chủ của bạn. Bạn có thể mở cổng 443 cho mục đích này bằng cách gõ:

sudo ufw allow https

OutputRule added
Rule added (v6)

Kiểm tra xem cổng 443 có đang mở hay không bằng cách gõ:

sudo ufw status

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)

Như bạn có thể thấy, cổng 443 hiện đã bị lộ.

Cấu hình lại GitLab để kích hoạt SSL

Bây giờ, hãy cấu hình lại GitLab một lần nữa để thực hiện các thay đổi của bạn:

sudo gitlab-ctl reconfigure

Ví dụ GitLab của bạn giờ đây có thể truy cập được qua HTTPS bằng cách sử dụng chứng chỉ Let's Encrypt đáng tin cậy của bạn. Bạn có thể kiểm tra điều này bằng cách truy cập vào tên miền của máy chủ GitLab của bạn. Vì chúng tôi chuyển hướng HTTP sang HTTPS, điều này sẽ hoạt động mà không chỉ định rõ ràng giao thức:

http://your_domain

Trình duyệt của bạn sẽ tự động chuyển hướng bạn sử dụng HTTPS. Bạn sẽ thấy một số dấu hiệu cho thấy trang web được bảo mật trong thanh địa chỉ:

GitLab SSL verification

Cài đặt GitLab của bạn hiện được bảo vệ bằng chứng chỉ TLS / SSL.

Xác minh tự động gia hạn Certbot

Hãy chứng nhận của Encrypt chỉ hợp lệ trong chín mươi ngày. Điều này là để khuyến khích người dùng tự động quá trình gia hạn chứng chỉ của họ. Các certbot gói chúng tôi đã cài đặt sẽ đảm nhiệm điều này cho chúng tôi bằng cách chạy â € ˜certbot renewâ € ™ hai lần một ngày thông qua bộ hẹn giờ systemd. Trên các bản phân phối không phải hệ thống, chức năng này được cung cấp bởi một tập lệnh được đặt trong /etc/cron.d. Tác vụ này chạy hai lần một ngày và sẽ 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 quy trình gia hạn, bạn có thể chạy khô 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 để nhận các thay đổi. Nếu quá trình gia hạn tự động không thành công, Mã hóa của chúng tôi sẽ gửi thư đến email bạn chỉ định, cảnh báo bạn khi chứng chỉ của bạn sắp hết hạn.

Phần kết luận

Ví dụ GitLab của bạn bây giờ sẽ được bảo vệ bằng chứng chỉ TLS / SSL an toàn được tất cả các trình duyệt hiện đại tin cậy. Trong khi cấu hình thể hiện Nginx được nhúng phức tạp hơn một chút so với việc thiết lập một máy chủ web độc lập Nginx, vì GitLab cho thấy chức năng tùy chỉnh các khối địa điểm trong tệp cấu hình của nó, rất dễ dàng để làm việc xung quanh.

Bây giờ trường hợp GitLab của bạn được bảo mật, nó có thể được sử dụng một cách an toàn để quản lý các dự án, các kho lưu trữ mã máy chủ và cấu hình tích hợp liên tục. Bạn có thể tìm hiểu về việc sử dụng GitLab để tự động kiểm tra từng cam kết vào kho lưu trữ của bạn trong bài viết của chúng tôi về thiết lập đường ống tích hợp liên tục với GitLab CI.

0