過去 XNUMX 年間、データベースからの漏洩が多数発生しました
私たちの実務では、152-FZ、Cloud-152 の要件に準拠した IaaS プラットフォーム内の情報セキュリティ ツール、OS、ソフトウェアのログの保存と分析に Elasticsearch を使用していることをすぐに予約しましょう。
データベースがインターネットに「はみ出している」かどうかを確認します
既知の漏れのほとんどのケース (
まず、インターネット上での公開について考えてみましょう。 なぜこのようなことが起こるのでしょうか? 実際のところ、Elasticsearch をより柔軟に運用するには、
中に入ることができたら、走って閉めてください。
データベースへの接続を保護する
次に、認証なしではデータベースに接続できないようにします。
Elasticsearch にはデータベースへのアクセスを制限する認証モジュールがありますが、これは有料の X-Pack プラグイン セット (1 か月間無料で使用) でのみ利用できます。
良いニュースは、2019 年の秋に Amazon が X-Pack と重複する開発を開始したことです。 データベース接続時の認証機能は、Elasticsearch 7.3.2 バージョンでは無償ライセンスで利用可能となり、Elasticsearch 7.4.0 の新リリースもすでに開発中です。
このプラグインは簡単にインストールできます。 サーバー コンソールに移動し、リポジトリに接続します。
RPM ベース:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB ベース:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
SSL を介したサーバー間の対話の設定
プラグインをインストールすると、データベースに接続するポートの構成が変更されます。 SSL暗号化を有効にします。 クラスタ サーバーが相互に連携し続けるためには、SSL を使用してクラスタ サーバー間の対話を構成する必要があります。
ホスト間の信頼は、独自の認証局の有無にかかわらず確立できます。 最初の方法では、すべてが明確です。CA スペシャリストに連絡するだけで済みます。 すぐに XNUMX 番目に進みましょう。
- 完全なドメイン名を含む変数を作成します。
export DOMAIN_CN="example.com"
- 秘密キーを作成します。
openssl genrsa -out root-ca-key.pem 4096
- ルート証明書に署名します。 安全に保管してください。紛失または侵害された場合、すべてのホスト間の信頼を再構成する必要があります。
openssl req -new -x509 -sha256 -subj "/C=RU/ST=Moscow/O=Moscow, Inc./CN=${DOMAIN_CN}" -key root-ca-key.pem -out root-ca.pem
- 管理者キーを作成します。
openssl genrsa -out admin-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
- 証明書に署名するリクエストを作成します。
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- 管理者証明書を作成します。
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Elasticsearch ノードの証明書を作成します。
export NODENAME="node-01" openssl genrsa -out ${NODENAME}-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in ${NODENAME}-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out ${NODENAME}-key.pem
- 署名リクエストを作成します。
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${NODENAME}.${DOMAIN_CN}" -addext"subjectAltName=DNS:${NODENAME}.${DOMAIN_CN},DNS:www.${NODENAME}.${DOMAIN_CN}" -key ${NODENAME}-key.pem -out ${NODENAME}.csr
- 証明書への署名:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Elasticsearch ノード間の証明書を次のフォルダーに配置します。
/etc/elasticsearch/
ファイルが必要です:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- カスタマイズする /etc/elasticsearch/elasticsearch.yml – 証明書を含むファイルの名前を、弊社が生成した名前に変更します。
opendistro_security.ssl.transport.pemcert_filepath: node-01.pem opendistro_security.ssl.transport.pemkey_filepath: node-01-key.pem opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem opendistro_security.ssl.transport.enforce_hostname_verification: false opendistro_security.ssl.http.enabled: true opendistro_security.ssl.http.pemcert_filepath: node-01.pem opendistro_security.ssl.http.pemkey_filepath: node-01-key.pem opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem opendistro_security.allow_unsafe_democertificates: false opendistro_security.allow_default_init_securityindex: true opendistro_security.authcz.admin_dn: − CN=admin,CN=example.com,O=Moscow Inc.,ST=Moscow,C=RU opendistro_security.nodes_dn: − CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU
内部ユーザーのパスワードの変更
- 以下のコマンドを使用して、パスワード ハッシュをコンソールに出力します。
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- ファイル内のハッシュを受信したハッシュに変更します。
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
OSにファイアウォールを設定する
- ファイアウォールの起動を許可します。
systemctl enable firewalld
- 起動しましょう:
systemctl start firewalld
- Elasticsearch への接続を許可します。
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- ファイアウォール ルールをリロードします。
firewall-cmd --reload
- 就業規則は次のとおりです。
firewall-cmd --list-all
すべての変更を Elasticsearch に適用する
- プラグインを含むフォルダーへの絶対パスを含む変数を作成します。
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- パスワードを更新し、設定を確認するスクリプトを実行してみましょう。
${OD_SEC}/tools/securityadmin.sh -cd ${OD_SEC}/securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem -cert /etc/elasticsearch/admin.pem -key /etc/elasticsearch/admin-key.pem
- 変更が適用されたかどうかを確認します。
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
以上が、Elasticsearch を不正な接続から保護するための最低限の設定です。
出所: habr.com