web-dev-qa-db-ja.com

安全なMongoDBサーバーを作るには?

WebサイトでデータストアとしてMongoDBを使用したいのですが。私は開発環境で心配なくMongoDBを使用しましたが、パブリックサーバーのセキュリティが心配です。

私のサーバーはArch Linuxを実行しているVPSです。 Webアプリケーションもその上で実行されるため、localhostからの接続のみを受け入れる必要があります。また、他のユーザー(sshまたはその他)が私のサーバーに直接アクセスすることはありません。

MongoDBのインスタンスを保護するにはどうすればよいですか?

7
Earlz

Mongoは非常に基本的なセキュリティのみをサポートしています。

  • 認証の構成。強力なパスワードでユーザーを作成する(データベースコンテキストで1つのユーザー名とパスワード)
  • mongoDBを127.0.0.0にバインドします(ループバックインターフェイス)
  • デフォルトのポートを変更する
5
ooshro

ここに良いチェックリストがあります

  1. 認証を有効にする– Mongodbサーバーを信頼できるネットワークに展開している場合でも、認証を有効にすることをお勧めします。ネットワークが危険にさらされた場合に、「多層防御」を提供します。 mongod設定ファイルを編集して認証を有効にします

  2. 本番データベースをインターネットに公開しないでください。データベースへの物理アクセスを制限することは、セキュリティの重要な側面です。必要がない場合は、本番データベースをインターネットに公開しないでください。攻撃者がMongoDBサーバーに物理的に接続できない場合の妥協案では、データの安全性ははるかに高くなります。 AWSを使用している場合は、データベースをVPCプライベートサブネットに配置できます。詳細については、ブログ記事「VPCでのMongoDBのデプロイ」をご覧ください。

  3. ファイアウォールを使用する–ファイアウォールを使用して、mongodbサーバーへの接続を許可する他のエンティティを制限します。ベストプラクティスは、アプリケーションサーバーのみがデータベースにアクセスできるようにすることです。 AWSでホストされている場合は、「セキュリティグループ」を使用してアクセスを制限します。ファイアウォール構成をサポートしないプロバイダーでホストされている場合は、「iptables」を使用して簡単に自分で構成できます。シナリオに合わせてiptablesを構成するには、mongodbのドキュメントを参照してください。

  4. キーファイルを使用してレプリカセットをセットアップする–レプリカセット内のmongodbインスタンス間の通信を可能にする共有キーファイルを指定します。これを有効にするには、以下のように設定ファイルにkeyfileパラメータを追加します。ファイルの内容は、すべてのマシンで同じである必要があります。

  5. HTTPステータスインターフェースを無効にするMongodbはデフォルトで、「ホーム」ステータスページを提供するポート28017でデフォルトで実行されるhttpインターフェースを提供します。このインターフェースは本番環境での使用は推奨されておらず、無効にすることをお勧めします。 「nohttpinterface」構成設定を使用して、httpインターフェースを無効にします。

  6. RESTインターフェースを無効にします。monogdbRESTインターフェースは、本番環境ではお勧めしません。認証はサポートされていません。デフォルトではオフになっています。 「rest」構成オプションを使用する場合は、本番システムではオフにする必要があります。

  7. Bind_ipの構成システムに複数のネットワークインターフェイスがある場合は、「bind_ip」オプションを使用して、mongodbサーバーが関連するインターフェイスのみをリッスンするように制限できます。デフォルトでは、mongodbはすべてのインターフェースにバインドします

  8. SSLを有効にする– SSLを使用しない場合、データは暗号化されずにMongoクライアントとMongoサーバーの間を移動し、盗聴、改ざん、および「中間者攻撃」の影響を受けやすくなります。これは、インターネットなどの安全でないネットワークを介してMongodbサーバーに接続している場合に特に重要です。

  9. ロールベースの承認– MongoDBはロールベースの認証をサポートしており、各ユーザーが実行できるアクションをきめ細かく制御できます。すべてのユーザーを管理者にする代わりに、役割ベースの構成を使用してアクセスを制限します。詳細については、役割のドキュメントを参照してください。

  10. エンタープライズmongodbとKerberosエンタープライズmongodbは、認証のためにKerberosと統合します。詳細については、mongodbのドキュメントを参照してください。ユーザー名/パスワードシステムは本質的に安全ではありません。可能であれば、縁石ベースの認証を使用してください。

https://scalegrid.io/blog/10-tips-to-improve-your-mongodb-security/

免責事項:私はscalegrid.ioの創設者です

13
Dharshan

セキュリティと認証 MongoDBドキュメント

11
makeji

同じクエリがここでよく議論されています〜 https://security.stackexchange.com/questions/7610/how-to-secure-a-mongodb-instance/7655#7655

最初に覚えておくべきことは次のとおりです。

Remove IP Binding from all to just the IP (private or localhost), you expect to get Connection Request
Change the default Port Bindings
Give only required permissions (like no update/delete permissions to select query users)
Setup ssh keys for required master-slave connection, removing involvement of passwords
You can even setup an encrypted tunnel for connection between your application and mongodb

実際には、すべてのDataStorageサービスに適用できます

PS:非常に限定されたmongodbの経験

2
AbhishekKr

セキュリティ上の理由から、MongoDBノードへの外部アクセスを防止することをお勧めします。別のノードでアプリとMongoDBを実行することもできます。アプリノードには外部からアクセスできますが、MongoDBノードはアプリノードへのMongoDBポートのみを開きます。

MongoDB公式セキュリティチェックリスト にも従って、MongoDBを保護します。

FireCamp AWSなどのクラウドで自動化します。 FireCampはセキュリティを強化します。 1)AppAccessSecurityGroupは、MongoDBへのアクセスが許可されている唯一のグループです。 AppAccessSecurityGroupにアプリケーションノードを作成し、MongoDBノードが実行されるVPCを作成してください。 2)Bastionノードが作成され、MongoDBノードにSSH接続できる唯一のノードです。 3)MongoDBユーザー認証と、ReplicaSetのメンバー間のアクセス制御が有効になります。

0
CloudStax