CentOS8でMongoDBのリモートアクセスを構成する方法
このチュートリアルの以前のバージョンは、 MelissaAndersonによって作成されました。
序章
MongoDB は、 Mongo とも呼ばれ、多くの最新のWebアプリケーションで使用されているオープンソースのドキュメントデータベースです。 デフォルトでは、インストールされているのと同じサーバーから発信された接続のみが許可されます。 MongoDBをリモートで管理したり、別のアプリケーションサーバーに接続したりする場合は、デフォルトの構成にいくつかの変更を加える必要があります。
このチュートリアルでは、信頼できるリモートコンピューターからのアクセスを安全に許可するようにMongoDBインストールを構成します。 これを行うには、ファイアウォールルールを更新して、MongoDBが接続をリッスンしているポートへのリモートマシンアクセスを提供してから、Mongoの構成ファイルを更新してIPバインディング設定を変更します。 次に、最後のステップとして、リモートマシンがデータベースに正常に接続できることをテストします。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- CentOS8を実行しているサーバー。 このサーバーには、root以外の管理ユーザーと、で構成されたファイアウォールが必要です。
firewalld
. CentOS8の初期サーバーセットアップガイドに従ってこれをセットアップします。 - サーバーにインストールされているMongoDB。 このチュートリアルは、MongoDB 4.4以降がインストールされていることを前提としています。 このバージョンをインストールするには、 CentOS8にMongoDBをインストールする方法に関するチュートリアルに従ってください。
- MongoDBインスタンスにアクセスする2番目のコンピューター。 簡単にするために、このチュートリアルでは、このマシンが別のCentOS8サーバーであると想定しています。 MongoDBサーバーと同様に、このマシンには、root以外の管理ユーザーと、で構成されたファイアウォールが必要です。
firewalld
CentOS8の初期サーバーセットアップガイドで説明されているように。 ただし、データベースサーバーでリモート接続を有効にする実際の手順を説明する手順1と2は、リモートマシンが実行しているオペレーティングシステムに関係なく機能します。
最後に、このチュートリアルを完了する必要はありませんが、データベースの管理ユーザーアカウントを作成し、認証を有効にして、MongoDBのインストールを保護することを強くお勧めします。 これを行うには、 CentOS8でMongoDBを保護する方法に関するチュートリアルに従ってください。
ステップ1—ファイアウォールを調整する
前提条件の初期サーバーセットアップチュートリアルに従い、サーバーでfirewalldをセットアップすると仮定すると、MongoDBインストールはインターネットからアクセスできなくなります。 同じサーバー上で実行されているアプリケーションでローカルでのみMongoDBを使用する場合は、これが推奨される安全な設定です。 ただし、リモートの場所からMongoDBサーバーに接続できるようにする場合は、新しいファイアウォールルールを追加して、データベースがリッスンしているポートへの着信接続を許可する必要があります。
まず、MongoDBインストールがリッスンしているポートを確認します。 netstat
指図。 netstat
アクティブなTCPネットワーク接続に関する情報を表示するコマンドラインユーティリティです。
次のコマンドは、によって生成された出力をリダイレクトします sudo netstat -plunt
に grep
文字列を含む行を検索するコマンド mongo
:
- sudo netstat -plunt | grep mongo
この出力例は、MongoDBがへの接続をリッスンしていることを示しています 127.0.0.1
、デフォルトのポートでlocalhostを表す特別なループバックアドレス。 27017
:
Outputtcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 15918/mongod
ほとんどの場合、MongoDBには、アプリケーションをホストしている別のサーバーなど、特定の信頼できる場所からのみアクセスする必要があります。 これを構成する1つの方法 firewalld
以下を実行することです firewall-cmd
MongoDBサーバーでコマンドを実行します。これにより、MongoDBのデフォルトのポートへのアクセスが可能になりますが、別の信頼できるサーバーのIPアドレスのみが明示的に許可されます。
次のコマンドを実行し、必ず変更してください trusted_server_ip
MongoDBインスタンスへのアクセスに使用する信頼できるリモートマシンのIPアドレスへ:
注:前のコマンドの出力で、MongoDBのインストールがデフォルト以外のポートでリッスンしていることが示された場合は、代わりにそのポート番号を使用してください 27017
このコマンドで。
- sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="trusted_server_ip" port protocol="tcp" port="27017" accept'
このコマンドは、リッチルールをファイアウォールに永続的に追加します public
ゾーン。 豊富なルールはの機能です firewalld
これにより、いくつかのオプションを使用して、サーバーにアクセスできるユーザーをより細かく制御できます。 このコマンドで提供されるルールは、 trusted_server_ip
アドレスは壁を介して接続できるようにする必要があります。 また、TCPプロトコルを使用してポートに接続する場合にのみ接続できることも指定しています。 27017
.
ルールが正常に追加された場合、コマンドは success
出力:
Outputsuccess
ファイアウォールをリロードして、新しいルールを有効にします。
- sudo firewall-cmd --reload
将来、別のマシンからMongoDBにアクセスする場合は、代わりに新しいマシンのIPアドレスを使用してこのコマンドを再実行してください。 trusted_server_ip
.
を実行してファイアウォール設定の変更を確認できます firewall-cmd
とともに --list-all
オプション:
- sudo firewall-cmd --list-all
出力には、ポートへのトラフィックを許可する新しいリッチルールが含まれます 27017
リモートサーバーから:
Outputpublic (active)
. . .
rich rules:
rule family="ipv4" source address="157.230.58.94" port port="27017" protocol="tcp" accept
あなたはについてもっと学ぶことができます firewalld
CentOS8でfirewalldを使用してファイアウォールを設定する方法。
次に、MongoDBをサーバーのパブリックIPアドレスにバインドして、リモートマシンからアクセスできるようにします。
ステップ2—パブリックbindIPを構成する
この時点で、ポートが開いていても、MongoDBは現在にバインドされています 127.0.0.1
、ローカルループバックネットワークインターフェイス。 これは、MongoDBがインストールされているサーバーで発生した接続のみを受け入れることができることを意味します。
リモート接続を許可するには、MongoDB構成ファイルを編集する必要があります— /etc/mongod.conf
—さらにMongoDBをサーバーのパブリックにルーティング可能なIPアドレスにバインドします。 このようにして、MongoDBインストールは、リモートマシンからMongoDBサーバーに対して行われた接続をリッスンできるようになります。
お好みのテキストエディタでMongoDB構成ファイルを開きます。 次の例では、 nano
:
- sudo nano /etc/mongod.conf
を見つける network interfaces
セクション、次に bindIp
価値:
. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
. . .
この行にコンマを追加し、その後にMongoDBサーバーのパブリックIPアドレスを追加します。
. . .
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb_server_ip
. . .
ファイルを保存して閉じます。 使用した場合 nano
、を押してそうします CTRL + X
, Y
、 それから ENTER
.
次に、MongoDBを再起動して、この変更を有効にします。
- sudo systemctl restart mongod
その後、MongoDBインストールは、ポートへのアクセスを許可した任意のマシンからのリモート接続を受け入れることができるようになります 27017
. 最後のステップとして、ステップ1でファイアウォールの通過を許可した信頼できるリモートサーバーが、サーバーで実行されているMongoDBインスタンスに到達できるかどうかをテストできます。
ステップ3—リモート接続のテスト
パブリックにルーティング可能なIPアドレスで発生する接続をリッスンするようにMongoDBインストールを構成し、サーバーのファイアウォールを介してMongoのデフォルトポートへのリモートマシンアクセスを許可したので、リモートマシンが接続できることをテストできます。
注:前提条件のセクションで説明したように、このチュートリアルでは、リモートマシンがCentOS8を実行している別のサーバーであると想定しています。 手順1と2で概説したリモート接続を有効にする手順は、リモートマシンが実行しているオペレーティングシステムに関係なく機能するはずですが、この手順で説明するテスト方法は、オペレーティングシステム間で普遍的に機能するわけではありません。
まず、SSHを使用して信頼できるサーバーにログインします。
- ssh sammy@trusted_server_ip
信頼できるリモートサーバーがMongoDBインスタンスに接続できることをテストする1つの方法は、 nc
指図。 nc
、 netcat の略で、TCPまたはUDPとのネットワーク接続を確立するために使用されるユーティリティです。 IPアドレスとポート番号の両方を指定できるため、このような場合のテストに役立ちます。
まだインストールしていない場合は、インストールする必要があります nc
. 公式のCentOSリポジトリからのバージョンは、実際には ncat と呼ばれる実装であり、netcatのアップデートとしてNmapプロジェクトによって作成されました。
次のように入力してncatをインストールします。
- sudo dnf install nc
プレス y
その後 ENTER
パッケージをインストールすることを確認するように求められたら。
次に、以下を実行します nc
コマンド、これには -z
オプション。 この制限 nc
データを送信せずに、ターゲットサーバー上のリスニングデーモンのみをスキャンします。 前提条件のインストールチュートリアルから、MongoDBがサービスデーモンとして実行されていることを思い出してください。このオプションは、接続のテストに役立ちます。 また、 v
コマンドの冗長性を高め、ncatが他の方法では返さない出力を返すようにするオプション。
次を実行します nc
信頼できるリモートサーバーからコマンドを実行し、必ず置き換えてください mongodb_server_ip
MongoDBをインストールしたサーバーのIPアドレスを使用して:
- nc -zv mongodb_server_ip 27017
信頼できるサーバーがMongoDBデーモンにアクセスできる場合、その出力は接続を確立したことを示します。
OutputNcat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to mongodb_server_ip:27017.
Ncat: 0 bytes sent, 0 bytes received in 0.02 seconds.
互換性のあるバージョンがあると仮定して mongo
リモートサーバーにシェルがインストールされている場合、この時点で、ホストサーバーにインストールされているMongoDBインスタンスに直接接続できます。
接続する1つの方法は、次のように接続文字列URIを使用することです。
- mongo "mongodb://mongo_server_ip:27017"
注:推奨される CentOS 8でMongoDBを保護する方法チュートリアルに従った場合、認証されていないユーザーに対するデータベースへのアクセスが遮断されます。 この場合、次のように、有効なユーザー名を指定するURIを使用する必要があります。
- mongo "mongodb://username@mongo_server_ip:27017"
シェルは、ユーザーのパスワードを入力するように自動的に促します。
これで、MongoDBサーバーが信頼できるサーバーからの接続を受け入れることができることを確認しました。
結論
これで、リモートサーバーからMongoDBインストールにアクセスできます。 この時点で、信頼できるサーバーからリモートでMongoデータベースを管理できます。 または、信頼できるサーバーで実行し、データベースをリモートで使用するようにアプリケーションを構成することもできます。
管理ユーザーを構成して認証を有効にしていない場合は、リモートサーバーにアクセスできるすべてのユーザーがMongoDBインストールにアクセスできます。 まだ行っていない場合は、強く、 CentOS 8でMongoDBを保護する方法のガイドに従って、管理ユーザーを追加し、さらにロックすることをお勧めします。