Quản lý cụm máy tính linux phía sau tường lửa


19

Sản phẩm của công ty tôi về cơ bản là một hộp Linux (Ubuntu) ngồi trong mạng của người khác chạy phần mềm của chúng tôi. Cho đến nay, chúng tôi có ít hơn 25 hộp trong TeamViewer hoang dã và được sử dụng để quản lý chúng.

Bây giờ chúng tôi sắp gửi 1000 hộp này và TeamViewer không còn là một lựa chọn nữa. Công việc của tôi là tìm ra cách truy cập các hộp này và cập nhật phần mềm trên chúng . Giải pháp này sẽ có thể xuyên qua tường lửa và những gì có bạn.

Tôi đã xem xét:

1. Giải pháp phát triển tại nhà (ví dụ: dịch vụ Linux) thiết lập đường hầm đảo ngược SSH tới máy chủ trên đám mây và một dịch vụ khác trong đám mây theo dõi những dịch vụ đó & cho phép bạn kết nối với chúng.

Đây rõ ràng là rất nhiều lao động và nói thẳng thắn cảm giác như phát minh lại bánh xe vì rất nhiều công ty khác đã phải chạy qua vấn đề này. Mặc dù vậy, tôi không chắc chúng ta sẽ làm tốt công việc đó.

2. Các công cụ như con rối, đầu bếp hoặc OpenVPN

Tôi đã cố gắng đọc càng nhiều càng tốt nhưng dường như tôi không thể thâm nhập đủ thông qua tiếp thị để hiểu được sự lựa chọn rõ ràng đi cùng.

Không ai khác ngoại trừ chúng tôi cần kết nối với các hộp này. Có ai có kinh nghiệm liên quan có thể cho tôi một số gợi ý?


2
"Chúng tôi sẽ không giao hàng" => " Bây giờ chúng tôi sắp giao hàng"?
Bob

Câu trả lời:


23

Kéo cập nhật, không đẩy

Khi bạn mở rộng quy mô, sẽ không thể thực hiện cập nhật đẩy cho tất cả các sản phẩm của bạn.

  • Bạn sẽ phải theo dõi từng khách hàng, mỗi người có thể có cấu hình tường lửa khác nhau.
  • Bạn sẽ phải tạo các kết nối đến thông qua tường lửa của khách hàng, yêu cầu chuyển tiếp cổng hoặc một số cơ chế tương tự khác. Đây là một rủi ro bảo mật cho khách hàng của bạn

Thay vào đó, hãy để các sản phẩm của bạn 'kéo' các bản cập nhật của chúng theo định kỳ và sau đó bạn có thể thêm phía máy chủ dung lượng bổ sung khi bạn phát triển.

Làm sao?

Vấn đề này đã được giải quyết, như bạn đề xuất. Đây là một số cách tiếp cận tôi có thể nghĩ ra.

  • bằng cách sử dụng apt : Sử dụng hệ thống apt tích hợp với danh sách nguồn và PPA tùy chỉnh. Làm cách nào để thiết lập PPA?
    • Con: Trừ khi bạn sử dụng dịch vụ lưu trữ công cộng như launchpad, Thiết lập hệ thống đóng gói apt PPA + của riêng bạn không dành cho người yếu tim.
  • bằng ssh : Tạo khóa công khai SSH cho mỗi sản phẩm và sau đó thêm khóa của thiết bị đó vào máy chủ cập nhật của bạn. Sau đó, chỉ cần có phần mềm của bạn rsync/ scpcác tập tin cần thiết.
    • Con: Phải theo dõi (và sao lưu!) Tất cả các khóa công khai cho mỗi sản phẩm bạn gửi đi.
    • Pro : An toàn hơn so với tải xuống thô, vì các thiết bị duy nhất có thể truy cập các bản cập nhật sẽ là những thiết bị có khóa công khai được cài đặt.
  • tải về thô + kiểm tra chữ ký :

    • Đăng một tệp cập nhật đã ký ở đâu đó (Amazon S3, máy chủ FTP, v.v.)
    • Sản phẩm của bạn kiểm tra định kỳ tệp cập nhật sẽ được thay đổi, sau đó tải xuống / xác minh chữ ký.
    • Con : Tùy thuộc vào cách bạn triển khai điều này, các tệp có thể được truy cập công khai (điều này có thể giúp sản phẩm của bạn dễ dàng đảo ngược kỹ thuật và hack hơn)
  • ansible : Ansible là một công cụ tuyệt vời để quản lý các cấu hình hệ thống. Nó ở trong vương quốc của con rối / đầu bếp, nhưng không có tác nhân (sử dụng trăn) và được thiết kế để trở nên bình dị. Nếu việc triển khai phần mềm của bạn sẽ yêu cầu một tập lệnh bash phức tạp, tôi sẽ sử dụng một công cụ như thế này để làm cho nó ít phức tạp hơn để thực hiện các cập nhật của bạn.

Tất nhiên, có nhiều cách khác để làm điều này .. Nhưng nó đưa tôi đến một điểm quan trọng.

Ký / xác nhận cập nhật của bạn!

Bất kể bạn làm gì, bắt buộc bạn phải có một cơ chế để đảm bảo rằng bản cập nhật của bạn không bị giả mạo. Người dùng độc hại có thể mạo danh máy chủ cập nhật của bạn trong bất kỳ cấu hình nào ở trên. Nếu bạn không xác nhận bản cập nhật của bạn, hộp của bạn là nhiều dễ dàng hơn để hack và nhận được vào.

Một cách tốt để làm điều này là ký các tệp cập nhật của bạn. Bạn sẽ phải duy trì chứng chỉ (hoặc trả tiền cho ai đó để làm như vậy), nhưng bạn sẽ có thể cài đặt dấu vân tay của mình trên mỗi thiết bị trước khi bạn gửi chúng để họ có thể từ chối các bản cập nhật đã bị giả mạo.

Bảo mật vật lý

Tất nhiên, nếu ai đó có quyền truy cập vật lý vào việc triển khai của khách hàng, họ có thể dễ dàng chiếm lấy máy chủ. Nhưng ít nhất họ không thể tấn công các triển khai khác! Bảo mật vật lý có khả năng là trách nhiệm của khách hàng của bạn.

Nếu bạn có thể chờ đợi, hãy tưởng tượng điều gì sẽ xảy ra nếu bạn sử dụng mạng OpenVPN lớn để cập nhật ... Sau đó, họ có thể sử dụng máy chủ bị xâm nhập để tấn công mọi trường hợp trên VPN

Bảo vệ

Dù bạn làm gì, bảo mật cần được xây dựng ngay từ đầu. Đừng cắt góc ở đây - Cuối cùng bạn sẽ hối tiếc nếu bạn làm thế.

Bảo mật hoàn toàn hệ thống cập nhật này nằm ngoài phạm vi của bài đăng này và tôi thực sự khuyên bạn nên thuê một nhà tư vấn nếu bạn hoặc ai đó trong nhóm của bạn không am hiểu về lĩnh vực này. Nó đáng giá từng xu.


2
Tôi sẽ sử dụng Ansible lần thứ hai - đó là sự phức tạp giữa các tập lệnh shell và quản lý cấu hình kiểu Puppet / Chef đầy đủ và có sự tinh vi để làm những việc phức tạp hơn là chỉ cập nhật phần mềm (như được gợi ý bởi câu hỏi " quản lý ").
RichVel

Nếu bạn đi theo con đường sử dụng Ansible, bạn có thể viết nó để chạy trên 'localhost' và nó sẽ không yêu cầu quyền truy cập SSH vào bất kỳ máy nào đang được quản lý. Định cấu hình nó để trở thành một cronjob và bạn là vàng.
BobTuckerman

1
BTW: Nếu bạn muốn chạy máy chủ gói của riêng mình fpmaptlylà hai công cụ tuyệt vời giúp việc xây dựng và lưu trữ các gói của riêng bạn dễ dàng hơn nhiều. Mới trải qua quá trình này gần đây, và nó khá đẹp.
BobTuckerman

10

Bạn có thực sự cần phải truy cập chúng?

Hay chỉ cần cập nhật chúng? Bởi vì bạn có thể yêu cầu họ tự cập nhật, tương tự như cách cập nhật apt trên chính nó không được giám sát.

Nếu bạn cần đăng nhập

Tại sao không phải là một daemon OpenSSH lắng nghe thông qua chuyển tiếp cổng? Mỗi khách hàng có thể có một khóa riêng để bảo mật và sẽ chỉ được kết nối khi cần.

Tùy thuộc vào khách hàng của bạn

Bạn cần phải xem xét những gì khách hàng sẵn sàng chấp nhận là tốt. Họ có thể không thoải mái với bất kỳ quyền truy cập từ xa nào vào mạng của họ hoặc chỉ thoải mái với các công nghệ / cấu hình cụ thể.


4
điều này. với 1000 yêu cầu khác nhau của khách hàng, ít nhất một số người sẽ không muốn kết nối openvpn vĩnh viễn trở lại văn phòng của bạn. Lý tưởng nhất là bạn cố gắng làm cho chúng tự cập nhật nếu / như / khi chúng phát hiện phiên bản mới có sẵn (từ một tệp trong nhóm AWS S3, nói. Đó là những gì chúng tôi làm.
Sirex

@Sirex - Một nhược điểm của việc sử dụng nhóm S3 là không có danh sách trắng IP đơn giản nào mà khách hàng có thể sử dụng để khóa máy chủ đó để nó chỉ có thể tiếp cận nhóm chứa bản cập nhật. Cuối cùng chúng tôi phải thiết lập một máy chủ cập nhật với một địa chỉ IP công cộng tĩnh để khách hàng có thể sử dụng các bộ lọc IP để kiểm soát những gì máy chủ đó có thể nói chuyện. (AWS không xuất bản tất cả các khối IP của họ, vì vậy về mặt lý thuyết có thể thiết lập bộ lọc chỉ cho phép truy cập vào các tài nguyên AWS, nhưng quá rộng cho trường hợp sử dụng này)
Johnny

Chúng tôi không có các bản cập nhật trên S3, nhưng chúng tôi có một tệp văn bản chi tiết phiên bản mới nhất là gì - được ứng dụng sử dụng để cung cấp các thông điệp biểu ngữ 'cập nhật có sẵn'. Sau đó, khách hàng có thể kích hoạt (trong trường hợp của chúng tôi theo cách thủ công) việc tải xuống phiên bản mới nhất, trong trường hợp của chúng tôi từ một dịch vụ có tên là fetchapp.
Sirex

9

Tôi đề nghị một công cụ phối hợp như Puppet hoặc Salt .

Salt là một hàng đợi tin nhắn và có thể tạo kết nối ra bên ngoài liên tục từ thiết bị của bạn đến máy chủ chính. Bạn có thể sử dụng điều này để chạy các lệnh tùy ý trên các thiết bị ... như một apt-get.

Tùy chọn khác là Puppet, nơi bạn vẫn có một máy chủ chính và các máy khách thực hiện các kết nối ra khỏi vị trí của chúng.

Tôi sử dụng cả hai công cụ này cho một mục đích tương tự trong đó tôi có thể không có quyền kiểm soát hành chính đối với tường lửa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.