単一ノードのElasticsearchシステムを保護しようとしています。デフォルトでは、Elasticsearchをリバースプロキシ(nginx)の後ろに配置し、すべてのユーザーまたはプロセスがElasticsearchと通信できる唯一の方法がプロキシ経由であることを確認したいと思います。
ElaticsearchがUnixソケットでリスニングをサポートしている場合、これはマイナーな作業です。ソケットファイルに適切な権限を設定すると完了です。しかし、これによってしかし、実際にはそうではありません。、TCPポートでのみリッスンできます。
以下の内容を読んだことがあります。ネットワークネームスペースうまくいくようですが、経験はありません。
Elasticsearchと通信できるマシンの唯一のプロセス/ユーザーがnginxであることを確認する簡単で安全な方法はありますか?
答え1
ルートではなくローカルユーザーの攻撃を防ぐために、ネットワークネームスペースを使用してください。
通常、ネットワークコンテンツはユーザー/グループ管理とは別にあり、2つを混在させることができますが、iptables
オーバーヘッドが追加されるため、これはおそらく最も簡単なソリューションです。
ネットワークネームスペースは、ルートだけがプロセスをネームスペースの内外に移動できるという事実にのみ依存します。
したがって、(ns =名前空間)などの設定が必要です。
main ns ---- nginx ns ---- elasticsearch ns
接続は仮想イーサネット(veth)ペアと独自のLANセグメントを介して行われます。つまり、デフォルトのネームスペース内の各プロセスはnginxネームスペースにのみアクセスでき、elasticsearchネームスペースには直接アクセスできません(このネームスペースからプロセスを開始できない場合)。
ネットワークの基本(LANセグメント、ネットマスキング、ルーティング、および基本ルーティング)を知る必要があります。ip netns ...
ネットワークスペースを作成および管理し、ネームスペースからプロセスを開始するためのコマンドラインツール。ip link ...
veth-pairを生成するためのコマンドラインツールです。
xterm
ネットワーク設定を表示および変更できるように、各名前空間から始めることをお勧めします。すべてがうまくいったら、スクリプトを書くだけです。
少し実験が必要ですが、難しくありません。これより簡単な方法は思い出されません。
編集する
名前空間の使用を開始するには、次のスクリプトを試してください。この回答、または以下を見てくださいこの問題。
どこに閉じ込められているのか分かりません。ネットワークネームスペース。各名前空間を、物理マシンの残りの部分とファイルシステムやその他のものを共有する独自のネットワーク仮想マシンと考えてください。したがって、名前空間を処理することは、LAN上のコンピュータに接続するのと同じです。重要なツールは仮想イーサネットペア、2つのネットワーク名前空間を接続する仮想LANケーブルと考えることができます。