現在の Linux システムでは、 iptablesプログラムは Linux カーネルのnetfilterまたはネットワーク パケット フィルタリング機能を管理するためのメソッドを提供します。 これらのファイアウォール ルールにより、管理者はシステムに接続できるホストを制御し、システムに接続できるホストを制限することでリスク露出を制限できます。
このドキュメントでは、Linux 上のiptablesファイアウォールの基本的なファイアウォール構成について説明します。 これらのアプローチを、大規模なネットワーク組織の開始点として使用してください。 MongoDB のセキュリティプラクティスとリスクマネジメントの詳細については、「 セキュリティ 」を参照してください。
Overview
iptables構成のルールは、特定のトラフィック ストリームをフィルタリングして処理するプロセスを記述する連鎖になります。 チェーンには順序があり、後のルールに到達するには、パケットがチェーン内の前のルールを通過する必要があります。 このドキュメントでは、次の 2 つのチェーンのみについて説明します。
INPUT- すべての受信トラフィックを制御します。
OUTPUT- すべての送信トラフィックを制御します。
すべての MongoDB プロセスの デフォルト ポート を考慮すると、アプリケーションと適切な およびmongod インスタンスとの間の必要な通信mongos のみ を許可するネットワーク ルールを構成する必要があります。
デフォルトでは 、iptables のデフォルトポリシーは、明示的に無効にされていない限り、すべての接続とトラフィックを許可することになっていることに注意してください。 このドキュメントで説明されている設定の変更により、明示的に許可されていないすべてのトラフィックをドロップデフォルトのポリシーを使用して、特定のアドレスと特定のポートからのトラフィックを明示的に許可するルールが作成されます。 iptables許可するトラフィックのみを許可するように ルールを適切に構成したら、デフォルト ポリシーをDROP に変更できます。
パターン
このセクションでは、MongoDB の配置で使用するためにiptablesを構成するための多くのパターンと例を紹介します。 port構成設定を使用して別のポートを構成した場合は、それに応じてルールを変更する必要があります。
mongodインスタンスとの間のトラフィック
このパターンは、スタンドアロン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インスタンスは、 シャーディングされたクラスターのクエリ ルーティングを提供します。 クライアントはmongosインスタンスに接続します。これはクライアントの観点から見るとmongodインスタンスとして動作します。 次に、 mongosは、シャーディングされたクラスターのコンポーネントであるすべてのmongodインスタンスに接続します。
これらのインスタンスとの間で、レプリカセットのノードであるmongodインスタンスとの間でトラフィックを許可するには、同じiptablesコマンドを使用します。 「 mongodインスタンスとの間のトラフィック」セクションで説明されている構成を例として取得します。
MongoDB Config Server との間のトラフィック
コンフィギュレーションサーバーは、シャーディングされたクラスターのメタデータを保存するコンフィギュレーションデータベースをホストします。 コンフィギュレーションサーバーはポート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
MongoDB シャード サーバーとの間のトラフィック
シャード サーバーのデフォルトのポート番号は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インスタンス。
次のようなルールを作成し、 <ip-address>をコンフィギュレーションサーバーとmongosインスタンスのアドレスに置き換えます。
iptables -A OUTPUT -d <ip-address> -p tcp --source-port 27018 -m state --state ESTABLISHED -j ACCEPT
| [1] | チャンク操作とバランシング操作を容易に行うために、クラスター内のすべてのシャードが他のすべてのシャードと通信できる必要があります。 |
監視システムへのアクセスの提供
で実行中のmongostat --discover診断ツールは、コンフィギュレーションサーバー、シャード サーバー、mongos インスタンスなど、クラスターのすべてのコンポーネントにアクセスできる必要があります。
デフォルト ポリシーを に変更 DROP
iptablesチェーンのデフォルト ポリシーはすべてのトラフィックを許可することです。 すべてのiptables構成の変更が完了したら、デフォルト ポリシーをDROPに変更して、上記のように明示的に許可されていないすべてのトラフィックが MongoDB 配置のコンポーネントに到達できないようにする必要があります。 このポリシーを変更するには、次のコマンドを発行します。
iptables -P INPUT DROP iptables -P OUTPUT DROP
構成の管理と維持iptables
このセクションでは、 iptablesを管理および使用するための基本的な操作の数が含まれています。 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 ルールを一覧表示する
現在適用されているすべてのiptablesルールを一覧表示するには、システム shell で次の操作を使用します。
iptables -L
すべての ルールをフラッシュしますiptables
iptablesルールを入力するときに構成を誤った場合、またはデフォルトのルールセットに戻す必要がある場合は、システム shell で次の操作を実行してすべてのルールをフラッシュできます。
iptables -F
すでにiptablesルールを永続化している場合は、 「 すべてのiptablesルールを永続化する 」セクションで適切な手順を繰り返す必要があります。