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

推薦する

opensslを使用して無料の証明書を生成する方法

1: openssl とは何ですか? その機能は何ですか?適用シナリオは何ですか? Baidu 百科...

MySQL学習エンジンの詳細な説明、説明、権限

エンジン導入InnodbエンジンInnodb エンジンは、データベース ACID トランザクションを...

HTML テーブル マークアップ チュートリアル (41): テーブル ヘッダーの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、ヘッダーの幅と高さはコンテンツに応じて自動的に調整されます。ヘッダーの幅と高さを手動...

Vue コード強調プラグインの総合的な比較と評価

目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...

Vueでファジークエリを実装する方法の簡単な例

序文いわゆるファジークエリとは、ユーザーの完全な入力やすべての入力情報がなくてもクエリサービスを提供...

Vue で className として空の文字列を使用することはなぜ推奨されないのですか?

目次空の文字列 '' と null を比較するケース1: 空の文字列を使用する &#...

Linux での MySQL 5.6.24 (バ​​イナリ) 自動インストール スクリプト

この記事では、Linux環境でのmysql5.6.24自動インストールスクリプトコードを参考までに共...

JavaScript の便利な配列トリック 12 選

目次アレイ重複排除1. from() を新しい Set() メソッドに重ねる2. スプレッド演算子 ...

Ubuntu 20.04にSogou入力方式をインストールする詳細な手順

1. Fcitx入力フレームワークをインストールする関連する依存ライブラリとフレームワークは自動的に...

CSS 動的高さ遷移アニメーション効果の実装

この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーション...

Mysql トランザクションで Update を実行するとテーブルがロックされますか?

2つのケース: 1. 索引あり 2. 索引なし前提条件:方法: コマンドラインを使用してシミュレー...

CSSスプライトの応用の詳細な説明

CSS Sprite は、CSS スプライトとも呼ばれ、画像結合技術です。この方法は、複数の小さなア...

Nginx+SSL による双方向認証を実装するためのサンプル コード

まずディレクトリを作成する cd /etc/nginx mkdir ssl cd ssl CA と自...

HTML はテキストの外側に省略記号を表示します...テキストオーバーフローによって実装されます

div または span に同時に CSS を適用する必要があります。コードをコピーコードは次のとお...

MySQL 基本チュートリアル パート 1 MySQL5.7.18 のインストールと接続チュートリアル

この記事から、MySQL を紹介し学習するための新しい一連の記事がスタートします。なぜ MySQL ...