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のロック機構に関する最も包括的な説明

推薦する

Ubuntu 16.04 64 ビット版の VMware Tools のインストールと構成のグラフィック チュートリアル

この記事では、VMware Toolsのインストールと構成に関するグラフィックチュートリアルを参考と...

フロントエンドページのスライド検証を実装するための JavaScript + HTML (2)

この記事の例では、クールなフロントエンドページのスライド検証の具体的なコードを参考までに共有していま...

ApacheとTomcatによるクラスタ環境構築プロセスの分析

実際、Apacheクラスタを構築するのは難しくありません。私もインターネットで情報を見つけて自分で設...

Linux 上の Tomcat で MySQL にデータを挿入するときに中国語の文字化けが発生する問題を解決する

1. 問題Windows 上の Eclipse を使用して開発されたプロジェクトは Windows ...

jsはaudioContextを通じて3Dサウンド効果を実現します

この記事では、audioContextを介して3Dサウンド効果を実現するためのjsの具体的なコードを...

MySQL インデックスの知識の要約

MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...

iOS、Android、ミニプログラムアプリの敷居の低い開発のためのフロントエンドフレームワークを詳しく解説

現在、クロスプラットフォーム開発技術はもはや新しい話題ではありません。市場にはいくつかのオープンソー...

LinuxでHomebrewを使用する正しい方法

多くの人が Linux Homebrew を使用しています。これをより良く使用するための 3 つのヒ...

PXEを使用してCentOS7.6を自動的にインストールする方法の詳細なチュートリアル

1. 需要ベースには 300 台の新しいサーバーがあり、CentOS7.6 オペレーティング システ...

一般的な XHTML タグの紹介

<br />しばらくの間、多くの人が XHTML の使い方を知らないことに気付きました。...

JavaScript インスタンス オブジェクトでプロトタイプ メソッドをオーバーライドする方法の詳細

目次JavaScriptでは、通常、次のコードのようにクラスを簡単に定義できます。 var サンプル...

Vue のスロットスコープの詳細な理解(初心者向け)

Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...

Nginx の純粋な構成でリアルタイム ログ レポートを実現するためのアイデアと方法

目次序文実装のアイデア実装手順1. Nginxをコンパイルする2. 設定ファイルは以下のとおりです要...

HTML で vue-router を使用するサンプル コード

vue と vue-router の紹介 <script src="https://...

nodejsとyarnをインストールし、Taobaoソースプロセスレコードを構成する

目次1. nodejsをダウンロードする2. ダブルクリックしてインストール3. グローバル npm...