방화벽 뒤의 Linux 컴퓨터 클러스터 관리


19

우리 회사의 제품은 본질적으로 우리 소프트웨어를 실행하는 다른 사람의 네트워크에 앉아있는 Linux 박스 (Ubuntu)입니다. 지금까지 우리는 25 개 미만의 상자를 가지고 있었고 TeamViewer를 사용하여 상자를 관리했습니다.

이제이 상자 중 1000 개를 배송 할 예정이며 TeamViewer는 더 이상 옵션이 아닙니다. 저의 임무는 이 박스액세스하고 소프트웨어를 업데이트 하는 방법을 알아내는 입니다. 이 솔루션은 방화벽을 통과 할 수 있어야합니다.

나는 고려했다 :

1. 클라우드에서 서버에 대한 SSH 리버스 터널 을 설정 하고 클라우드에서 해당 서비스를 추적하고 연결할 수있는 다른 서비스 를 설정하는 자체 개발 솔루션 (예 : Linux 서비스) .

이것은 분명히 노동 집약적이며 솔직하게 말하면 많은 다른 회사가 이미이 문제를 극복해야했기 때문에 바퀴를 재발 명하는 것처럼 느껴집니다. 그럼에도 불구하고, 우리가 그 일을 훌륭하게 수행 할 것이라고 확신하지 않습니다.

2. 꼭두각시, 요리사 또는 OpenVPN과 같은 도구

나는 가능한 한 많이 읽으려고 노력했지만 마케팅 연설을 통해 충분한 선택을 할 수는 없었습니다.

우리 외에는 아무도이 상자에 연결하지 않아도됩니다. 나에게 몇 가지 조언을 줄 수있는 관련 경험이있는 사람이 있습니까?


2
"우리는 선적하지 않을 것입니다"=> "우리는 이제 선적 할 것입니다"?

답변:


23

업데이트 풀, 밀 지마

당신이 확장, 할 실행할 수 없게 될 것 푸시 모든 제품에 대한 업데이트를.

  • 각각 다른 방화벽 구성을 가진 모든 단일 고객 을 추적 해야합니다.
  • 포트 포워딩 또는 다른 유사한 메커니즘이 필요한 고객의 방화벽을 통해 들어오는 연결 을 만들어야 합니다. 이것은 고객에게 보안 위험입니다

대신, 제품이 정기적으로 업데이트를 '풀 (pull)'한 다음, 서버 용량이 늘어남에 따라 추가 용량을 추가 할 수 있습니다.

어떻게?

제안한대로이 문제는 이미 해결되었습니다. 내가 생각할 수있는 몇 가지 접근법이 있습니다.

  • apt 사용 : 사용자 정의 PPA 및 소스 목록과 함께 내장 된 apt 시스템을 사용하십시오. PPA는 어떻게 설정합니까?
    • 단점 : 런치 패드와 같은 퍼블릭 호스팅 서비스를 사용하지 않는 한 자신 만의 적절한 PPA + 패키징 시스템을 설정하는 것은 소심하지 않습니다.
  • ssh 사용 : 각 제품에 대한 SSH 공개 키를 생성 한 후 해당 장치의 키를 업데이트 서버에 추가하십시오. 그런 다음 소프트웨어 rsync/ scp파일이 필요합니다.
    • 단점 : 발송하는 각 제품에 대한 모든 공개 키를 추적 (및 백업)해야합니다.
    • Pro : 업데이트에 액세스 할 수있는 유일한 장치는 공개 키가 설치된 장치이기 때문에 원시 다운로드보다 안전합니다.
  • 원시 다운로드 + 서명 확인 :

    • 서명 된 업데이트 파일을 어딘가에 게시 (Amazon S3, FTP 서버 등)
    • 제품은 주기적으로 업데이트 파일이 변경되었는지 확인한 다음 서명을 다운로드 / 확인합니다.
    • 단점 : 배포 방법에 따라 파일에 공개적으로 액세스 할 수 있습니다 (제품을 리버스 엔지니어링 및 해킹하기가 더 쉬울 수 있음)
  • ansible : Ansible은 시스템 구성을 관리하기위한 훌륭한 도구입니다. 꼭두각시 / 요리사의 영역에 있지만 에이전트가 없으며 (파이썬 사용) dem 등성이되도록 설계되었습니다. 소프트웨어를 배포하는 데 복잡한 bash 스크립트가 필요한 경우 이와 같은 도구를 사용하여 업데이트를 덜 복잡하게 만듭니다.

물론 다른 방법도 있습니다.하지만 중요한 점이 있습니다.

업데이트에 서명 / 확인하십시오!

무엇을 하든지 업데이트가 변경되지 않도록하는 메커니즘이 반드시 필요 합니다. 악의적 인 사용자가 위의 구성 중 하나에서 업데이트 서버를 가장 할 수 있습니다. 업데이트의 유효성을 검사하지 않으면 상자 를 해킹하고 들어가기 가 훨씬 쉽습니다.

업데이트 파일에 서명하는 것이 좋습니다. 인증서를 유지 관리하거나 다른 사람에게 비용을 지불해야하지만 변조 된 업데이트를 거부 할 수 있도록 각 장치에 지문을 설치하여 배송 할 수 있습니다.

물리적 보안

물론 누군가 고객의 배포에 물리적으로 액세스 할 수 있으면 서버를 쉽게 인수 할 수 있습니다. 그러나 적어도 그들은 다른 배포를 공격 할 수 없습니다! 물리적 보안은 고객의 책임 일 수 있습니다.

잠시 동안 업데이트를 위해 대규모 OpenVPN 네트워크를 사용한 경우 어떻게 될지 상상해보십시오. 그러면 손상된 서버를 사용 하여 VPN의 모든 인스턴스 를 공격 할 수 있습니다

보안

무엇을 하든지 처음부터 보안을 구축 해야합니다 . 여기서 모서리를 자르지 마십시오. 그렇게하면 결국 후회하게됩니다.

이 업데이트 시스템을 완전히 보호하는 것은이 게시물의 범위를 벗어납니다. 본인이나 팀원이이 영역에 대해 잘 모르면 컨설턴트를 고용하는 것이 좋습니다. 모든 페니의 가치가 있습니다.


2
저는 Ansible을 두 번째로 사용합니다. 쉘 스크립트와 본격적인 Puppet / Chef 스타일 구성 관리 사이의 복잡성에 중점을두고 있으며 소프트웨어를 업데이트하는 것보다 더 복잡한 작업을 수행하는 정교함이 있습니다 ( " 꾸리다").
RichVel

Ansible을 사용하는 경로로 이동하면 'localhost'에서 실행되도록 작성할 수 있으며 관리되는 컴퓨터에 대한 SSH 액세스가 필요하지 않습니다. cronjob으로 구성하면 황금색입니다.
BobTuckerman

1
BTW : 당신이 당신의 자신의 패키지 서버를 실행하려면, 경우 fpmaptly그것을 빌드 및 호스트 자신의 패키지에 훨씬 쉽게 두 위대한 도구이다. 최근에이 과정을 거쳤는데 꽤 좋았습니다.
BobTuckerman

10

실제로 액세스해야합니까?

아니면 그냥 업데이트? 자동 업데이트는 무인 업데이트 방식과 유사하게 자체 업데이트가 가능합니다.

로그인이 필요한 경우

포트 포워딩을 통해 OpenSSH 데몬이 수신 대기하지 않는 이유는 무엇입니까? 각 고객은 별도의 보안 키를 가질 수 있으며 필요할 때만 연결됩니다.

고객까지

고객이 무엇을 기꺼이 받아 들일 것인지 고려해야합니다. 네트워크에 대한 원격 액세스에 익숙하지 않거나 특정 기술 / 구성에 익숙하지 않을 수 있습니다.


4
이. 1000 개의 서로 다른 고객 요구 사항으로 인해 최소한 일부는 사무실에 영구적 인 openvpn 연결을 원하지 않을 것입니다. 이상적으로는 AWS S3 버킷의 파일에서 새 버전을 사용할 수있을 때 /있는 경우 / 자신을 업데이트하려고합니다.
Sirex

@Sirex-S3 버킷 사용의 한 가지 단점은 고객이 해당 서버를 잠그는 데 사용할 수있는 간단한 IP 화이트리스트가 없으므로 업데이트를 보유한 버킷에만 도달 할 수 있다는 것입니다. 우리는 고정 공용 IP 주소로 업데이트 서버를 설정해야했기 때문에 고객은 IP 필터를 사용하여 해당 서버와 통신 할 수있는 것을 제어 할 수있었습니다. (AWS는 모든 IP 블록을 게시하므로 이론적으로 AWS 리소스에만 액세스 할 수있는 필터를 설정할 수 있지만이 사용 사례에서는 지나치게 광범위합니다.)
Johnny

S3에는 업데이트가 없지만 최신 버전이 무엇인지 자세히 설명하는 텍스트 파일이 있습니다. 앱에서 '사용 가능한 업데이트'배너 메시지를 제공하는 데 사용됩니다. 그런 다음 고객은 fetchapp라는 서비스에서 최신 버전의 다운로드를 트리거 할 수 있습니다 (이 경우 수동으로).
Sirex

9

Puppet 또는 Salt 와 같은 오케스트레이션 도구를 제안합니다 .

Salt는 메시지 큐이며 어플라이언스에서 마스터 서버로 지속적인 아웃 바운드 연결을 만들 수 있습니다. 이것을 사용하여 어플라이언스에서 임의의 명령을 실행할 수 있습니다 apt-get.

다른 옵션은 꼭두각시 (Puppet)인데, 여기서 여전히 마스터 서버가 있으며 클라이언트는 해당 위치에서 아웃 바운드 연결을 만듭니다.

방화벽을 관리 제어 할 수없는 유사한 목적으로이 두 도구를 모두 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.