Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

Docker でリモートの安全なアクセスを有効にする方法の詳細なグラフィック チュートリアル

1. docker.serviceファイルを編集する

: : vi /usr/lib/systemd/system/docker.service を実行します。

[Service]ノードを見つけて、ExecStartプロパティを変更し、 -H tcp://0.0.0.0:2375を追加します。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

これはポート2375を外部に開放するのと同じです。もちろん、自分の状況に応じて他のポートに変更することもできます。

2. Docker設定をリロードして有効にする

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

ブラウザから2375にアクセスしてテストします。形式は次のとおりです: http://ip:2375/version

アクセスできない場合は、ファイアウォールのポート 2375 を開いてみてください。具体的なコマンドは次のとおりです。

ファイアウォールコマンド --zone=public --add-port=2375/tcp --permanent
ファイアウォール-cmd --reload

それでもアクセスできない場合は、使用しているマシンが Alibaba Cloud、Tencent Cloud などのクラウド サーバーである場合は、サーバーのセキュリティ グループ ルールでポート 2375 が開いているかどうかを確認する必要があります。開いていない場合は、ポート構成を追加します。

このようにして、Idea の Docker プラグインのテストに直接接続できます。

3. Dockerのセキュアアクセスを構成する

上記の 2 つの手順は、本番環境では使用しないでください。開発環境で使う分には問題ありません。このようにDockerを直接外部に公開すると、パスワードを設定せずにRedisを外部に公開するのと同じように、非常に危険です。

基本的に、インターネット上の多くの記事は、上記の 2 つの手順、裸の手順のようなものです...よく考えてください、よく考えてください、あなたでなければ、誰がハッキングされるのでしょうか?

実際、公式ドキュメントでは、CA 証明書に基づく暗号化方式がすでに提供されています。詳細については、ここをクリックしてください。

1. CA秘密鍵とCA公開鍵を作成する

まず、秘密鍵と公開鍵を保存するためのcaフォルダを作成します。

mkdir -p /usr/local/ca
/usr/local/ca をコピー

次に、 Docker デーモンのホスト上で、CA 秘密鍵と公開鍵を生成します。

openssl genrsa -aes256 -out ca-key.pem 4096

上記の手順を実行すると、次のステップに進む前にパスワードの入力を求められます。ここではパスワードを niceyoo に設定しました。

2. CA証明書情報を入力する

次のコマンドを実行します。

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

次に、アクセス パスワード、国、都道府県、市区町村、組織名、部署名、任意の名前、電子メール アドレスなどを順番に入力します。時間を節約するために、組織やユニットなどの代わりに niceyoo を使用します。

niceyoo cn 北京 北京 niceyoo niceyoo niceyoo [email protected]

この時点で、CA 証明書が作成されています。CA を使用すると、サーバー キーと証明書署名要求 (CSR) を作成し、「共通名」が Docker への接続時に使用するホスト名と一致することを確認できます。

3. server-key.pemを生成する

openssl genrsa -out サーバーキー.pem 4096

4. CAで公開鍵に署名する

TLS 接続は IP アドレスと DNS 名の両方を介して確立できるため、証明書を作成するときに IP アドレスを指定する必要があります。たとえば、 10.211.55.4使用した接続を許可するには、次のようにします。

openssl req -subj "/CN=10.211.55.4" -sha256 -new -key server-key.pem -out server.csr

URL (例: www.sscai.club) を使用している場合は、次のように置き換えてください:

openssl req -subj "/CN=www.sscai.club" -sha256 -new -key server-key.pem -out server.csr

注: ここで言及されている IP またはドメイン名は、将来的に外部目的で使用されるアドレスを指します。

5. 一致するホワイトリスト

ホワイトリストを設定することの意義は、どの IP アドレスが Docker にリモート接続できるかを許可することです。これを行うには 2 つの方法がありますが、5.2 の手順 2 を実行するだけで済みます。

5.1. 指定された IP がサーバー内の Docker に接続できるようにします。複数の IP はカンマで区切られます。

外部 Docker アドレスが IP アドレスの場合、コマンドは次のようになります。

echo subjectAltName = DNS:$HOST、IP:XX.XX.XX.XX、IP:XX.XX.XX.XX >> extfile.cnf

使用する場合、外部に公開する Docker リンクが IP アドレスか URL かに応じて、 $HOST独自の IP アドレスまたは URL に置き換えます。

# サーバー 10.211.55.4 上の Docker は、IP アドレス 221.217.177.151 のクライアントのみ接続を許可します echo subjectAltName = DNS:10.211.55.4,IP:221.217.177.151 >> extfile.cnf

# www.sscai.club サーバー上の Docker は、IP アドレス 221.217.177.151 および 127.0.0.1 を持つクライアントのみ接続を許可します echo subjectAltName = DNS:www.sscai.club,IP:221.217.177.151,IP:127.0.0.1 >> extfile.cnf

5.2. すべての IP が接続できるように 0.0.0.0 を設定します (ただし、永続的な証明書を持つ IP のみが正常に接続できます)

echo subjectAltName = DNS:10.211.55.4,IP:0.0.0.0 >> extfile.cnf

6. コマンドを実行する

Docker デーモン キーの拡張使用プロパティをサーバー認証にのみ使用するように設定します。

echo 拡張キー使用法 = serverAuth >> extfile.cnf

7. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf

実行後、上記で設定したパスワードを入力する必要があります

8. クライアントキー.pemを生成する

openssl genrsa -out キー.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

9. クライアント認証に適したキーを作成する

拡張機能構成ファイルを作成します。

echo 拡張キー使用法 = clientAuth >> extfile.cnf
echo 拡張キー使用法 = clientAuth > extfile-client.cnf

10. 署名整数を生成する

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile extfile-client.cnf

cert.pem を生成するには、以前に設定したパスワードを再度入力する必要があります: niceyoo

11. 不要なファイルと2つの整数署名要求を削除する

cert.pemserver-cert.pemを生成したら、証明書署名要求と拡張構成ファイルの両方を安全に削除できます。

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

12. 変更可能な権限

キーが誤って破損するのを防ぐには、書き込み権限を削除します。読み取り専用にするには、ファイル モードを次のように変更します。

chmod -v 0400 ca-key.pem key.pem server-key.pem

証明書は、偶発的な破損を防ぐために書き込み権限を削除して、公開読み取り可能にすることができます。

chmod -v 0444 ca.pem server-cert.pem cert.pem

13. サーバー証明書を収集する

cp server-*.pem /etc/docker/
cp ca.pem /etc/docker/

14. Docker構成を変更する

DockerデーモンがCAによって信頼された証明書を提示するクライアントからの接続のみを受け入れるようにする

vim /lib/systemd/system/docker.service

ExecStartプロパティの値を置き換えます。

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

15.デーモンをリロードしてdockerを再起動する

systemctlデーモンリロード

systemctl dockerを再起動します

IDEA の docker モジュールで確認し、以前の接続を見てみましょう。

当然、接続は不可能です。このとき、docker ホストによって作成された証明書を取得し、その証明書を使用して接続する必要があります。

これら 4 つの証明書ファイルをローカル フォルダーにプルします。このフォルダーは、アイデアを指定するために使用されます。TCP のリンクを Https 形式に変更する必要があることに注意してください。具体的な内容は、次の図に示されています。

要約する

これで、Docker でリモート セキュア アクセスを有効にする方法についての詳細なグラフィック チュートリアルに関するこの記事は終了です。Docker リモート アクセスの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法
  • 独立した IP を介して Windows コンテナ イントラネットの Docker に直接アクセスする方法
  • Centos Docker ブリッジ モードでホスト Redis サービスにアクセスできないというトラブルシューティングの経験
  • Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerでローカルマシン(ホストマシン)にアクセスする方法
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • 実行後にdocker nginxにアクセスできない問題の解決策
  • Dockerコンテナ内の独立IPにアクセスする方法
  • Dockerコンテナ間で通信する3つの方法

<<:  ユーザー名が使用可能かどうかを確認するVueメソッド

>>:  mysql トリガーの作成と使用例

推薦する

Mysql WorkBench のインストールと設定のグラフィックチュートリアル

この記事では、Mysql WorkBenchのインストールと設定のグラフィックチュートリアルを参考ま...

Tudou.comのホームページのデザイン方法

<br />私は数年間フロントエンドに取り組んできました。フロントエンドについて完全に理...

mysql8でルートユーザーのパスワードをリセットする手順を完了します

序文最近、多くの新しい同僚がこの質問をしてきました。特に、homebrew を通じて自動的にインスト...

MySQL における大規模オブジェクトのマルチバージョン同時実行制御の詳細な説明

MySQL 8.0: InnoDB のラージ オブジェクトに対する MVCCこの記事では、MySQL...

MySQLでNULL値を判定する際の落とし穴事例

目次序文Mysql の case when 構文:事例実践:要約:序文今日、プログラムを開発している...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

2048 ゲームを実装するためのネイティブ js

2048ミニゲーム、参考までに具体的な内容は以下のとおりですまず、2048ゲームは16のグリッドか...

mysqlを使用して、URLから返されたhttp GETリクエストデータを記録します。

ビジネスシナリオの要件と実装ロジックの分析ビジネスでは、HTTP GET を使用してデータを要求する...

Ubuntu 18.04 Server に静的 IP を設定する方法

1. 背景Netplan は、Ubuntu システムのネットワーク設定を簡単に管理および構成できるよ...

一意の注文番号を生成するためのMySQLの高同時実行方法

序文このブログ記事が公開された後、何人かの友人からSQL Serverバージョンがあるかどうか尋ねら...

ES6 における Object.assign() の使い方の詳細な説明

目次2. 目的2.1 オブジェクトにプロパティを追加する2.3 オブジェクトの複製2.4 複数のオブ...

Linux の chown コマンドと chmod コマンドの違いの詳細な説明

Linux システムでは、chmod コマンドと chown コマンドの両方を使用して権限を設定でき...

MySQL mysqladmin クライアントの使用の概要

目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...

Vue はシェイク機能を実装します (ios13.3 以降と互換性があります)

最近、shake.jsを使用して、shakeに似た機能を作成しました。ただし、shake機能はios...

mysqldump でデータベースをバックアップするときに特定のライブラリを除外する例

例: mysqldump –all-databases を使用すると、すべてのライブラリがエクスポー...