ファイアウォールの背後にあるLinuxコンピューターのクラスターの管理


19

私の会社の製品は、基本的には、Linuxボックス(Ubuntu)であり、ソフトウェアを実行している他の誰かのネットワーク内にあります。これまでのところ、私たちは25個未満のボックスを野生で使用し、TeamViewerを使用してそれらを管理していました。

現在、これらのボックスのうち1000個を出荷しようとしていますが、TeamViewerはオプションではありません。私の仕事は、これらのボックスアクセスし、それらのソフトウェアを更新する方法を見つけることです。このソリューションは、ファイアウォールを通過し、何を持っている必要があります。

私が検討した:

1.クラウド内のサーバーへのSSHリバーストンネルを確立する自作ソリューション(Linuxサービスなど)、およびそれらを追跡して接続できるクラウド内の別のサービス。

これは明らかに労働集約的であり、率直に言って、他の多くの企業がすでにこの問題に直面しているに違いないので、車輪を再発明したように感じます。それでも、私たちがそれで素晴らしい仕事をするかどうかはわかりません。

2.パペット、シェフ、OpenVPNなどのツール

できる限り読み込もうとしましたが、マーケティングスピーチを十分に浸透して、当然の選択を理解することはできません。

私たち以外の誰もこれらのボックスに接続する必要はありません。関連する経験があり、私に指針を与えることができる人はいますか?


2
「われわれは=>「私たちは船についてないね」船に約」は?
ボブ

回答:


23

更新をプルし、プッシュしない

規模を拡大するにつれて、すべての製品にプッシュ更新を行うことは実行不可能になります。

  • あなたは、追跡する必要がありますすべてのそれぞれ異なるファイアウォールの設定を持っているかもしれない単一の顧客を、。
  • 顧客のファイアウォールを介して着信接続を作成する必要があります。これには、ポート転送または他の同様のメカニズムが必要になります。これは顧客にとってのセキュリティリスクです

代わりに、製品に定期的に更新を「プル」してもらい、成長に合わせてサーバー側に容量を追加できます。

どうやって?

あなたが提案したように、この問題はすでに解決されています。ここに私が考えることができるいくつかのアプローチがあります。

  • aptの使用:組み込みのaptシステムとカスタムPPAおよびソースリストを使用します。PPAをセットアップするにはどうすればよいですか?
    • 短所:ランチパッドなどのパブリックホスティングサービスを使用する場合を除き、独自のapt PPA +パッケージシステムをセットアップするのは気弱な人には向いていません。
  • sshの使用:各製品のSSH公開キーを生成してから、そのデバイスのキーを更新サーバーに追加します。次に、ソフトウェアrsync/ scp必要なファイルを用意します。
    • 欠点:送信する各製品のすべての公開鍵を追跡(およびバックアップ!)する必要があります。
    • Pro:更新にアクセスできるデバイスは公開キーがインストールされているデバイスのみであるため、生のダウンロードよりも安全です。
  • 生ダウンロード+署名チェック

    • 署名付き更新ファイルをどこかに投稿します(Amazon S3、FTPサーバーなど)
    • 製品は、更新される更新ファイルを定期的にチェックし、署名をダウンロード/検証します。
    • 短所:これを展開する方法によっては、ファイルが一般にアクセス可能になる場合があります(これにより、製品のリバースエンジニアリングとハッキングが容易になる場合があります)
  • ansible:Ansibleはシステム構成を管理するための優れたツールです。これはパペット/シェフの領域にありますが、エージェントレス(Pythonを使用)で、べき等になるように設計されています。ソフトウェアの展開に複雑なbashスクリプトが必要な場合は、このようなツールを使用して、更新の実行をより簡単にします。

もちろん、これを行うには他の方法もあります。しかし、それは私に重要なポイントをもたらします。

アップデートに署名/検証してください!

何をするにしても、更新が改ざんされていないことを保証するメカニズムがあることが不可欠です。上記の構成のいずれかで、悪意のあるユーザーが更新サーバーになりすます可能性があります。更新を検証しないと、ボックスのハッキングや侵入がはるかに簡単になります。

これを行う良い方法は、更新ファイルに署名することです。証明書を保持する必要があります(または誰かに支払いを行う必要があります)が、出荷前に各デバイスに指紋をインストールして、改ざんされた更新を拒否できるようにすることができます。

物理的セキュリティ

もちろん、誰かが顧客の展開に物理的にアクセスできる場合、簡単にサーバーを引き継ぐことができます。しかし、少なくとも彼らは他の展開を攻撃することはできません!物理的なセキュリティは、おそらく顧客の責任です。

あなたはしばらくの間、あなたはアップデートのための大規模なOpenVPNのネットワークを使用する場合に何が起こるか想像した場合...そして、彼らは攻撃する危険にさらさサーバーを使用することができますVPN上のすべてのインスタンスを

セキュリティ

何をするにしても、最初からセキュリティを組み込む必要があります。ここで角を切るな

この更新システムを完全に保護することはこの投稿の範囲外であり、あなたまたはチームの誰かがこの分野に精通していない場合はコンサルタントを雇うことを強くお勧めします。それはあらゆるペニーの価値があります。


2
次に、Ansibleを使用します。これは、シェルスクリプトと本格的なPuppet / Chefスタイルの構成管理の複雑さの中間であり、ソフトウェアを更新するだけでなく、より複雑なことを行う高度な機能を備えています(管理」)。
-RichVel

Ansibleを使用するルートに進むと、「localhost」で実行するように記述でき、管理対象のマシンへのSSHアクセスが不要になります。cronjobになるように設定すれば、あなたは最高です。
ボブタッカーマン

1
ところで:もしあなたがあなた自身のパッケージサーバーを走らせたいなら、fpmそしてあなた自身のパッケージaptlyを構築しホストするのをずっと簡単にする2つの素晴らしいツールです。最近このプロセスを経たばかりで、とても良かったです。
ボブタッカーマン

10

実際にアクセスする必要がありますか?

または、単にそれらを更新しますか?自分で無人で適切な更新を行う方法と同様に、自分で更新することができるためです。

ログインする必要がある場合

OpenSSHデーモンがポート転送をリッスンしないのはなぜですか?各顧客はセキュリティのために別々のキーを持つことができ、必要な場合にのみ接続されます。

顧客次第

顧客が何を受け入れたいかについても考慮する必要があります。ネットワークへのリモートアクセスに不慣れであるか、特定のテクノロジー/構成にのみ不慣れである可能性があります。


4
この。1000件の異なる顧客要件があるため、少なくとも一部は、オフィスへの永続的なopenvpn接続を必要としません。。。理想的には、彼らが新しいバージョンを検出したときに/として/はAWS S3バケット内のファイルから(利用可能な場合、と言うことは、私たちは何をすべきかだ彼らは自分自身を更新するために試してみた
Sirex

@Sirex-S3バケットを使用する場合の欠点の1つは、顧客がそのサーバーをロックダウンするために使用できる単純なIPホワイトリストがないため、更新を保持するバケットのみに到達できることです。顧客がIPフィルターを使用してそのサーバーと通信できるものを制御できるように、静的なパブリックIPアドレスを使用して更新サーバーをセットアップする必要がありました。(AWSはすべてのIPブロックを公開するため、AWSリソースのみにアクセスできるフィルターを設定することは理論上可能ですが、このユースケースでは広範です)
ジョニー

S3のアップデートはありませんが、最新バージョンが何であるかを詳細に説明するテキストファイルがあります-アプリが「アップデート可能」バナーメッセージを提供するために使用します。その後、顧客はfetchappと呼ばれるサービスから最新バージョンのダウンロードをトリガーできます(この場合は手動で)。
Sirex

9

PuppetSaltなどのオーケストレーションツールをお勧めします。

ソルトはメッセージキューであり、アプライアンスからマスターサーバーへの永続的なアウトバウンド接続を確立できます。これを使用して、アプライアンスで任意のコマンドを実行できます...などapt-get

もう1つのオプションはPuppetです。マスターサーバーがまだあり、クライアントはそれぞれの場所から発信接続を行います。

私は、ファイアウォールの管理制御がない可能性がある同様の目的で、これらのツールの両方を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.