docker リモート API のワンクリック TLS 暗号化の実装

docker リモート API のワンクリック TLS 暗号化の実装

最近、同社のサーバーがマイニングされ、その原因は最終的にDockerのポート2375にあることが判明した。

整理してみましょう。まず、原因不明ですが、docker 内にイメージや実行中のコンテナがいくつかあり、CPU を大量に消費していることがわかりました。さらに、ポート 2375 には IP アクセス ルールが設定されていなかったため、誰でもポート 2375 経由で docker を操作し、起動コンテナでホスト フォルダをマウントできます。docker はルート権限で起動されるため、誰でもポート 2375 経由でルート ユーザーとしてホストを制御できます。

対応手順は次のとおりです:

1. Docker の 2375 ポートを別のポートに変更します。これは一時的な対策にすぎません。

$ vi /usr/lib/systemd/system/docker.service

ここに画像の説明を挿入

Dockerを再起動します。

$ systemctlデーモンリロード
$ systemctl dockerを再起動します

2. DockerのTLSを暗号化する

#!/bin/bash
mkdir -p /root/tls/pem
DOMAIN_HOST=`ifconfig eth0 | grep "inet" | awk '{ print $2}' | sed -n '1p;1q'`
#DOMAIN_HOST=`hostname` #最適なドメイン名プランを選択してください HOST=$DOMAIN_HOST
# カスタム情報 PASSWORD="yourPassword"
国=CN
州=gd
都市=gz
組織=dounine
グループ=dg
名前=湖
SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST"
# カスタム情報#================================================================================================================================
#このフォームは、自分自身に証明書を発行するためのものです。CA 組織になることも、第三者組織に発行を委託することもできます。#ルート証明書の RSA 秘密鍵を生成し、秘密鍵のパスワードとしてパスワードを使用します (ID カード)
openssl genrsa -passout pass:$PASSWORD -aes256 -out /root/tls/pem/ca-key.pem 4096
# 2. ルート証明書のRSA秘密鍵を使用して自己署名ルート証明書(ビジネスライセンス)を生成する
openssl req -new -x509 -days 365 -passin pass:$PASSWORD -key /root/tls/pem/ca-key.pem -sha256 -subj $SUBJ -out /root/tls/pem/ca.pem
#============================================================================================
#サーバーに証明書を発行する# 1. サーバーは独自の秘密鍵を生成します openssl genrsa -out /root/tls/pem/server-key.pem 4096
# 2. サーバーは証明書を生成します(公開鍵とサーバー情報が含まれます)
openssl req -new -sha256 -key /root/tls/pem/server-key.pem -out /root/tls/pem/server.csr -subj "/CN=$DOMAIN_HOST"
# 3. どうやって接続するのですか? 複数の IP アドレスを設定し、カンマで区切ることができます echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf
# 4. 認証局は証明書にスタンプを押して有効にします openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in /root/tls/pem/server.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/server-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
#クライアントに証明書を発行する openssl genrsa -out /root/tls/pem/client-key.pem 4096
openssl req -subj '/CN=client' -new -key /root/tls/pem/client-key.pem -out /root/tls/pem/client.csr
echo 拡張キー使用法 = clientAuth > /tmp/extfile.cnf
openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in /root/tls/pem/client.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/client-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
# ファイルをクリーンアップします rm -rf /root/tls/pem/ca-key.pem
rm -rf /root/tls/pem/{サーバー、クライアント}.csr
rm -rf /root/tls/pem/ca.srl
# 最終ファイル# ca.pem == CA 証明書# client-cert.pem == クライアント証明書# client-key.pem == クライアント秘密鍵# server-cert.pem == サーバー証明書# server-key.pem == サーバー秘密鍵

知らせ:

  • DOMAIN_HOST がドメイン名に設定されている場合、echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf を実行します。このコード内の $DOMAIN_HOST は、サーバーのパブリック IP アドレスに置き換える必要があります。
  • echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > IP:0.0.0.0 in /tmp/extfile.cnf は、証明書を携帯することですべての IP にアクセスできることを意味します。ここではすべて設定されていますが、サーバーのパブリック IP は省略しないでください。つまり、IP:$yourip,IP:0.0.0.0 であり、IP:0.0.0.0 ではありません。

ファイルに実行権限を付与します。

$ chmod +x tls.sh

シェル スクリプトを実行すると、/root/tls/pem ディレクトリに ca.pem、client-cert.pem、client-key.pem、server-cert.pem、server-key.pem が生成されます。

次に、docker 構成を変更します。

$ vim /usr/lib/systemd/system/docker.service

に追加:

		--tlsverify \
        --tlscacert=/root/tls/pem/ca.pem \
        --tlscert=/root/tls/pem/server-cert.pem \
        --tlskey=/root/tls/pem/サーバーキー.pem \


Dockerを再起動します。

$ systemctlデーモンリロード
$ systemctl dockerを再起動します

次に、docker リモート API を使用して接続します。

認証なし:

$ docker -H tcp://192.168.0.150:2376 バージョン

認証が成功しなかったことを示すエラー メッセージが表示されます。

認証方法を持ちます:

docker --tlsverify --tlscacert=/root/tls/pem/ca.pem --tlscert=/root/tls/pem/client-cert.pem --tlskey=/root/tls/pem/client-key.pem -H tcp://192.168.0.150:2376 バージョン

これで、docker リモート API のワンクリック TLS 暗号化の実装に関するこの記事は終了です。docker リモート API のワンクリック TLS 暗号化に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • TLS暗号化通信を使用してDockerにリモート接続する詳細な例
  • Docker で TLS と CA 認証を有効にする方法
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • Dockerは安全なTLSリモート接続アクセスを可能にします

<<:  CSS ボックスモデル内のパディングと略語の詳細な説明

>>:  MySQLのロック機構に関する最も包括的な説明

推薦する

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...

JavaScriptは両端キューを実装する

この記事の例では、両端キューを実装するためのJavaScriptの具体的なコードを参考までに共有して...

MySQL 5.7.17 winx64 解凍版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.17 winx64解凍版のインストールと設定方法を紹介します。具体...

ウェブサイトのホームページを作成するための基本原則

1. ウェブサイトのホームページのハイパーテキスト ドキュメントの構成構造は、ユーザーの注意をできる...

JS配列メソッドsome、every、findの使用に関する詳細

目次1. いくつか2. すべての3. 見つける1. いくつかsome()メソッドは、指定された関数の...

MySQLクエリのソートとページング関連

概要通常、データベース内のデータを直接表示することは望ましくないため、最後の 2 つのセクションでは...

Dockerはmysqldumpコマンドを使用してプロジェクト内のmysqlデータをバックアップおよびエクスポートします。

mysqldump コマンドはじめに: データベースバックアッププログラム形式: mysqldum...

MySQL 8.0 の binlog の詳細な説明

1 はじめにバイナリ ログは、データを持つ、またはデータを変更する可能性がある SQL ステートメン...

W3C が推奨するモバイル Web マークアップ言語 XHTML Basic 1.1

W3C は最近、「 XHTML Basic1.1 」と「 Mobile Web Best Prac...

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

Reactでパスワード強度検出器を実装する方法

目次序文使用コンポーネントの記述データ構造分析プロセス分析基礎コードの分析他の要約する序文パスワード...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

JavaScript コードを省略する一般的な方法の概要

目次序文矢印関数一般的な配列操作をマスターするスプレッド演算子オブジェクトの省略形構造化割り当てデー...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...