우리 회사의 제품은 본질적으로 우리 소프트웨어를 실행하는 다른 사람의 네트워크에 앉아있는 Linux 박스 (Ubuntu)입니다. 지금까지 우리는 25 개 미만의 상자를 가지고 있었고 TeamViewer를 사용하여 상자를 관리했습니다.
이제이 상자 중 1000 개를 배송 할 예정이며 TeamViewer는 더 이상 옵션이 아닙니다. 저의 임무는 이 박스 에 액세스하고 소프트웨어를 업데이트 하는 방법을 알아내는 것 입니다. 이 솔루션은 방화벽을 통과 할 수 있어야합니다.
나는 고려했다 :
1. 클라우드에서 서버에 대한 SSH 리버스 터널 을 설정 하고 클라우드에서 해당 서비스를 추적하고 연결할 수있는 다른 서비스 를 설정하는 자체 개발 솔루션 (예 : Linux 서비스) .
이것은 분명히 노동 집약적이며 솔직하게 말하면 많은 다른 회사가 이미이 문제를 극복해야했기 때문에 바퀴를 재발 명하는 것처럼 느껴집니다. 그럼에도 불구하고, 우리가 그 일을 훌륭하게 수행 할 것이라고 확신하지 않습니다.
2. 꼭두각시, 요리사 또는 OpenVPN과 같은 도구
나는 가능한 한 많이 읽으려고 노력했지만 마케팅 연설을 통해 충분한 선택을 할 수는 없었습니다.
우리 외에는 아무도이 상자에 연결하지 않아도됩니다. 나에게 몇 가지 조언을 줄 수있는 관련 경험이있는 사람이 있습니까?
답변
업데이트 풀, 밀 지마
당신이 확장, 할 실행할 수 없게 될 것 푸시 모든 제품에 대한 업데이트를.
- 각각 다른 방화벽 구성을 가진 모든 단일 고객 을 추적 해야합니다.
- 포트 포워딩 또는 다른 유사한 메커니즘이 필요한 고객의 방화벽을 통해 들어오는 연결 을 만들어야 합니다. 이것은 고객에게 보안 위험입니다
대신, 제품이 정기적으로 업데이트를 ‘풀 (pull)’한 다음, 서버 용량이 늘어남에 따라 추가 용량을 추가 할 수 있습니다.
어떻게?
제안한대로이 문제는 이미 해결되었습니다. 내가 생각할 수있는 몇 가지 접근법이 있습니다.
- apt 사용 : 사용자 정의 PPA 및 소스 목록과 함께 내장 된 apt 시스템을 사용하십시오. PPA는 어떻게 설정합니까?
- 단점 : 런치 패드와 같은 퍼블릭 호스팅 서비스를 사용하지 않는 한 자신 만의 적절한 PPA + 패키징 시스템을 설정하는 것은 소심하지 않습니다.
- ssh 사용 : 각 제품에 대한 SSH 공개 키를 생성 한 후 해당 장치의 키를 업데이트 서버에 추가하십시오. 그런 다음 소프트웨어
rsync
/scp
파일이 필요합니다.- 단점 : 발송하는 각 제품에 대한 모든 공개 키를 추적 (및 백업)해야합니다.
- Pro : 업데이트에 액세스 할 수있는 유일한 장치는 공개 키가 설치된 장치이기 때문에 원시 다운로드보다 안전합니다.
-
원시 다운로드 + 서명 확인 :
- 서명 된 업데이트 파일을 어딘가에 게시 (Amazon S3, FTP 서버 등)
- 제품은 주기적으로 업데이트 파일이 변경되었는지 확인한 다음 서명을 다운로드 / 확인합니다.
- 단점 : 배포 방법에 따라 파일에 공개적으로 액세스 할 수 있습니다 (제품을 리버스 엔지니어링 및 해킹하기가 더 쉬울 수 있음)
-
ansible : Ansible은 시스템 구성을 관리하기위한 훌륭한 도구입니다. 꼭두각시 / 요리사의 영역에 있지만 에이전트가 없으며 (파이썬 사용) dem 등성이되도록 설계되었습니다. 소프트웨어를 배포하는 데 복잡한 bash 스크립트가 필요한 경우 이와 같은 도구를 사용하여 업데이트를 덜 복잡하게 만듭니다.
물론 다른 방법도 있습니다.하지만 중요한 점이 있습니다.
업데이트에 서명 / 확인하십시오!
무엇을 하든지 업데이트가 변경되지 않도록하는 메커니즘이 반드시 필요 합니다. 악의적 인 사용자가 위의 구성 중 하나에서 업데이트 서버를 가장 할 수 있습니다. 업데이트의 유효성을 검사하지 않으면 상자 를 해킹하고 들어가기 가 훨씬 쉽습니다.
업데이트 파일에 서명하는 것이 좋습니다. 인증서를 유지 관리하거나 다른 사람에게 비용을 지불해야하지만 변조 된 업데이트를 거부 할 수 있도록 각 장치에 지문을 설치하여 배송 할 수 있습니다.
물리적 보안
물론 누군가 고객의 배포에 물리적으로 액세스 할 수 있으면 서버를 쉽게 인수 할 수 있습니다. 그러나 적어도 그들은 다른 배포를 공격 할 수 없습니다! 물리적 보안은 고객의 책임 일 수 있습니다.
잠시 동안 업데이트를 위해 대규모 OpenVPN 네트워크를 사용한 경우 어떻게 될지 상상해보십시오. 그러면 손상된 서버를 사용 하여 VPN의 모든 인스턴스 를 공격 할 수 있습니다
보안
무엇을 하든지 처음부터 보안을 구축 해야합니다 . 여기서 모서리를 자르지 마십시오. 그렇게하면 결국 후회하게됩니다.
이 업데이트 시스템을 완전히 보호하는 것은이 게시물의 범위를 벗어납니다. 본인이나 팀원이이 영역에 대해 잘 모르면 컨설턴트를 고용하는 것이 좋습니다. 모든 페니의 가치가 있습니다.
답변
실제로 액세스해야합니까?
아니면 그냥 업데이트? 자동 업데이트는 무인 업데이트 방식과 유사하게 자체 업데이트가 가능합니다.
로그인이 필요한 경우
포트 포워딩을 통해 OpenSSH 데몬이 수신 대기하지 않는 이유는 무엇입니까? 각 고객은 별도의 보안 키를 가질 수 있으며 필요할 때만 연결됩니다.
고객까지
고객이 무엇을 기꺼이 받아 들일 것인지 고려해야합니다. 네트워크에 대한 원격 액세스에 익숙하지 않거나 특정 기술 / 구성에 익숙하지 않을 수 있습니다.