ANNOUNCEMENT: Voyage AI joins MongoDB to power more accurate and trustworthy AI applications on Atlas.
Learn more
Docs Menu

自己管理型配置用の Linux iptablesファイアウォールを構成する

現在の Linux システムでは、 iptablesプログラムは Linux カーネルのnetfilterまたはネットワーク パケット フィルタリング機能を管理するためのメソッドを提供します。 これらのファイアウォール ルールにより、管理者はシステムに接続できるホストを制御し、システムに接続できるホストを制限することでリスク露出を制限できます。

このドキュメントでは、Linux 上のiptablesファイアウォールの基本的なファイアウォール構成について説明します。 これらのアプローチを、大規模なネットワーク組織の開始点として使用してください。 MongoDB のセキュリティプラクティスとリスクマネジメントの詳細については、「セキュリティ 」を参照してください。

iptables構成のルールは、特定のトラフィック ストリームをフィルタリングして処理するプロセスを記述する連鎖になります。 チェーンには順序があり、後のルールに到達するには、パケットがチェーン内の前のルールを通過する必要があります。 このドキュメントでは、次の 2 つのチェーンのみについて説明します。

INPUT
すべての受信トラフィックを制御します。
OUTPUT
すべての送信トラフィックを制御します。

すべての MongoDB プロセスの デフォルト ポート を考慮すると、アプリケーションと適切な およびmongod インスタンスとの間の必要な通信mongos のみ を許可するネットワーク ルールを構成する必要があります。

デフォルトでは、 iptablesのデフォルト ポリシーは、明示的に無効にされていない限り、すべての接続とトラフィックを許可することになっていることに注意してください。 このドキュメントで説明されている設定の変更により、明示的に許可されていないすべてのトラフィックをドロップするデフォルトのポリシーを使用して、特定のアドレスと特定のポートからのトラフィックを明示的に許可するルールが作成されます。 許可するトラフィックのみを許可するようにiptablesルールを適切に構成したら、デフォルト ポリシーをDROPに変更できます。

このセクションでは、MongoDB の配置で使用するためにiptablesを構成するための多くのパターンと例を紹介します。 port構成設定を使用して別のポートを構成した場合は、それに応じてルールを変更する必要があります。

このパターンは、スタンドアロンmongod インスタンスとして、または レプリカセット の一部として実行されているすべての インスタンスに適用されます。

このパターンの目的は、アプリケーション サーバーからmongodインスタンスへのトラフィックを明示的に許可することです。 次の例では、 <ip-address>をアプリケーション サーバーの IP アドレスに置き換えます。

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

The first rule allows all incoming traffic from <ip-address> on port 27017, which allows the application server to connect to the mongod instance. 2 つ目のルールは、 mongodからの送信トラフィックがアプリケーション サーバーに到達することを許可します。

注意

任意

アプリケーション サーバーが 1 つしかない場合は、 <ip-address>を IP アドレス自体に置き換えることができます(例: 198.51.100.55 。 これは、198.51.100.55/32 として CIDR 表記を使用してExpressすることもできます。 可能な IP アドレスのより大きなブロックを許可する場合は、次のように、 <ip-address>に次のいずれかの仕様を使用して/24からのトラフィックを許可できます。

10.10.10.10/24
10.10.10.10/255.255.255.0

mongosインスタンスは、 シャーディングされたクラスターのクエリ ルーティングを提供します。 クライアントはmongosインスタンスに接続します。これはクライアントの観点から見るとmongodインスタンスとして動作します。 次に、 mongosは、シャーディングされたクラスターのコンポーネントであるすべてのmongodインスタンスに接続します。

これらのインスタンスとの間で、レプリカセットのノードであるmongodインスタンスとの間でトラフィックを許可するには、同じiptablesコマンドを使用します。 「 mongodインスタンスとの間のトラフィック」セクションで説明されている構成を例として取得します。

コンフィギュレーションサーバーは、シャーディングされたクラスターのメタデータを保存するコンフィギュレーションデータベースをホストします。 コンフィギュレーションサーバーはポート27019の接続をリッスンします。 その結果、次のiptablesルールをコンフィギュレーションサーバーに追加して、他のコンフィギュレーションサーバーへの接続用にポート27019での受信接続と送信接続を許可します。

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27019 -m state --state ESTABLISHED -j ACCEPT

<ip-address>を、コンフィギュレーションサーバーを提供するすべてmongodのアドレスまたはアドレス空間に置き換えます。

さらに、コンフィギュレーションサーバーは、クラスター内のすべてのmongosインスタンスとクラスター内すべてのmongodインスタンスからの着信接続を許可する必要があります。 次のようなルールを追加します。

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27019 -m state --state NEW,ESTABLISHED -j ACCEPT

<ip-address>を、 mongosインスタンスとシャードmongodインスタンスのアドレスに置き換えます。

シャード サーバーのデフォルトのポート番号は27018です。 各シャード間のトラフィックを許可するには、次のiptablesルールを設定する必要があります。

iptables -A INPUT -s <ip-address> -p tcp --destination-port 27018 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT

<ip-address>仕様をすべてのmongodの IP アドレスに置き換えます。 これにより、構成レプリカセット ノードを含むすべてのシャード間での受信および送信トラフィックを許可し、次のようにします。

  • シャードのレプリカセット内のすべてのmongodインスタンス。

  • 他のシャード内のすべてのmongodインスタンス。 [1]

さらに、シャードは次の送信接続を行える必要があります。

  • : コンフィギュレーションサーバー内のすべてのmongodインスタンス。

次のようなルールを作成し、 <ip-address>をコンフィギュレーションサーバーとmongosインスタンスのアドレスに置き換えます。

iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
[1] チャンク操作とバランシング操作を容易に行うために、クラスター内のすべてのシャードが他のすべてのシャードと通信できる必要があります。

で実行中のmongostat --discover診断ツールは、コンフィギュレーションサーバー、シャード サーバー、mongos インスタンスなど、クラスターのすべてのコンポーネントにアクセスできる必要があります。

iptablesチェーンのデフォルト ポリシーはすべてのトラフィックを許可することです。 すべてのiptables構成の変更完了したら、デフォルト ポリシーをDROPに変更して、上記のように明示的に許可されていないすべてのトラフィックが MongoDB 配置のコンポーネントに到達できないようにする必要があります。 このポリシーを変更するには、次のコマンドを発行します。

iptables -P INPUT DROP
iptables -P OUTPUT DROP

このセクションでは、 iptablesを管理および使用するための基本的な操作の数が含まれています。 iptables構成の一部を自動化するさまざまなフロントエンド ツールがありますが、本質的にはすべてのiptablesフロントエンドが同じ基本機能を提供します。

デフォルトでは、すべてのiptablesルールはメモリにのみ保存されます。 システムを再起動すると、ファイアウォール ルールはデフォルトに戻ります。 ルールセットをテストして、効果的にトラフィックを制御できることが保証されたら、次の操作を に使用して、ルールセットを永続的にする必要があります。

Red Hat Enterprise Linux、Fedora Linux、および関連するディストリビューションでは、次のコマンドを発行できます。

service iptables save

Debian、Ubuntu、および関連ディストリビューションでは、次のコマンドを使用してiptablesルールを/etc/iptables.confファイルにダンプできます。

iptables-save > /etc/iptables.conf

ネットワーク ルールを復元するには、次の操作を実行します。

iptables-restore < /etc/iptables.conf

このコマンドをrc.localファイルに、または他の同様の操作を使用して/etc/network/if-up.d/iptablesファイルに配置します。

現在適用されているすべてのiptablesルールを一覧表示するには、システム shell で次の操作を使用します。

iptables -L

iptablesルールを入力するときに構成を誤った場合、またはデフォルトのルールセットに戻す必要がある場合は、システム shell で次の操作を実行してすべてのルールをフラッシュできます。

iptables -F

すでにiptablesルールを永続化している場合は、 「 すべてのiptablesルールを永続化する 」セクションで適切な手順を繰り返す必要があります。