序章

MongoDB は、最新のWebアプリケーションで一般的に使用されている無料のオープンソースNoSQLドキュメントデータベースです。 このチュートリアルは、本番アプリケーション環境で使用するためにサーバー上にMongoDBをセットアップするのに役立ちます。 MongoDBをインストールし、ファイアウォールルールを構成してMongoDBへのアクセスを制限します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • sudo非rootユーザーを持つ1台のDebian8サーバー。 これらの権限を持つユーザーは、Debian8ガイドの初期サーバーセットアップでセットアップできます。

ステップ1—MongoDBをインストールする

MongoDBはすでにDebianのパッケージリポジトリに含まれていますが、公式のMongoDBリポジトリは最新バージョンを提供し、ソフトウェアをインストールするための推奨される方法です。 このステップでは、この公式リポジトリをサーバーに追加します。

Debianは、ソフトウェアパッケージがGPGキーで署名されていることを確認することでソフトウェアパッケージの信頼性を保証するため、最初に公式のMongoDBリポジトリのキーをインポートする必要があります。

  1. sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

キーが正常にインポートされると、次のように表示されます。

出力
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

次に、MongoDBリポジトリの詳細を追加する必要があります。 apt パッケージをどこからダウンロードするかがわかります。

次のコマンドを発行して、MongoDBのリストファイルを作成します。

  1. echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

リポジトリの詳細を追加した後、パッケージリストを更新します。

  1. sudo apt-get update

次に、次のコマンドを使用してMongoDBパッケージ自体をインストールします。

  1. sudo apt-get install -y mongodb-org

これにより、MongoDBの最新の安定バージョンと、MongoDBサーバー用の便利な管理ツールがインストールされます。

MongoDBがインストールされたら、サービスを開始し、サーバーが再起動したときにサービスが開始されることを確認します。

  1. sudo systemctl enable mongod.service
  2. sudo systemctl start mongod

次に、 systemctl サービスが正しく開始されたことを確認するには:

  1. sudo systemctl status mongod

サービスが実行中であることを示す次の出力が表示されます。

出力
mongod.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled)
   Active: active (running) since Tue 2017-02-28 19:51:51 UTC; 7s ago
     Docs: https://docs.mongodb.org/manual
 Main PID: 8958 (mongod)
   CGroup: /system.slice/mongod.service
           └─8958 /usr/bin/mongod --quiet --config /etc/mongod.conf

Feb 28 19:51:51 cart-61037 systemd[1]: Started High-performance, schema-free document-oriented database.

MongoDBが正常にインストールされたので、ソフトウェアファイアウォールで保護しましょう。

ステップ2—ファイアウォールでMongoDBを保護する

ほとんどの場合、MongoDBには、アプリケーションをホストしている別のサーバーなど、特定の信頼できる場所からのみアクセスする必要があります。 このタスクを実行するために、明示的に接続を許可される別のサーバーのIPアドレスを指定しながら、MongoDBのデフォルトポートへのアクセスを許可できます。 iptablesファイアウォールを使用してこのルールを設定し、システムを保護するための他のいくつかのルールを使用します。

ルールを作成する前に、 iptables-persistent 作成したルールを保存できるようにパッケージ化します。 このようにして、サーバーを再起動するたびにルールが適用されます。 次のコマンドを実行します。

  1. sudo apt-get install iptables-persistent

:インストール中に、既存のルールを保持するかどうかを尋ねられる場合があります。 既存のルールを破棄できます。

次に、万が一の場合に備えて、実施されている可能性のある既存のルールをすべて削除します。

  1. sudo iptables -F

次に、確立された接続が会話を継続できるようにするルールを追加します。 このようにして、既存のSSH接続が中断されることはありません。

  1. sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

次に、SSHアクセスが許可されていることを確認します。

  1. sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

リモートサーバーからMongoDBに接続する場合は、アプリケーションサーバーからMongoDBのデフォルトポートへのアクセスを許可する次のルールを追加します。

  1. sudo iptables -A INPUT -s your_other_server_ip -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. sudo iptables -A OUTPUT -d your_other_server_ip -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

次に、ローカルループバックデバイスでのトラフィックを許可する次のルールを追加します。

  1. sudo iptables -A INPUT -i lo -j ACCEPT
  2. sudo iptables -A OUTPUT -o lo -j ACCEPT

最後に、ファイアウォールポリシーを変更して、他のすべてのトラフィックをドロップします。

  1. sudo iptables -P INPUT DROP

警告:ルールで明示的に定義されていないトラフィックをドロップするようにデフォルトのポリシーを変更すると、すべてがロックダウンされます。 将来、追加のトラフィックを許可する場合は、新しいルールを追加する必要があります。

さらに、誤ってルールをフラッシュすると、サーバーからロックアウトされます。 使用することをお勧めします sudo iptables -P INPUT ACCEPT 将来ルールを調整する必要がある場合にトラフィックを許可します。 その後、使用することができます sudo iptables -P INPUT DROP 物事が再び適切に構成されていることを確認したら、物事をロックダウンします。

ルールが正しく見えることを確認します。

  1. sudo iptables -S

次のような出力が表示されます。

Output
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -s your_other_server_ip/32 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A OUTPUT -d your_other_server_ip/32 -p tcp -m tcp --sport 27017 -m state --state ESTABLISHED -j ACCEPT -A OUTPUT -o lo -j ACCEPT

最後に、ルールを保存します。

  1. netfilter-persistent save

これらのファイアウォールルールの詳細については、 Ubuntu14.04でIptablesを使用してファイアウォールを設定する方法をご覧ください。

手順3—外部サーバーへのアクセスを有効にする(オプション)

MongoDBの現在のバージョンは、デフォルトで外部接続を受け入れません。 ファイアウォールで特定のIPアドレスへのアクセスを制限している場合は、リモート接続を受け入れるようにMongoDBの構成を変更できます。

MongoDB構成ファイルを編集します。

  1. sudo nano /etc/mongod.conf

このセクションを見つけます:

mongod.conf
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

Mongoはローカルループバックアドレスをリッスンしているため、ローカル接続のみを受け入れます。 変更 bindIp 値なので、MongoDBサーバーのIPアドレスが含まれます。

mongod.conf
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1, your_server_ip

ファイルを保存して、エディターを終了します。

次に、MongoDBを再起動して、変更を適用します。

  1. sudo systemctl restart mongod

これで、リモートマシンが接続できるようになります。 ただし、データベースをさらに保護するために、認証を有効にすることもできます。

結論

MongoDBのインストールと構成に関するより詳細な手順は、これらのDigitalOceanコミュニティの記事にあります。 必ずデータをバックアップし、転送中のデータを暗号化する方法を調べてください。