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 トリガーの作成と使用例

推薦する

Angularコンポーネントのライフサイクルの詳しい説明(パート2)

目次1. ビューフック1. ngAfterViewInit および ngAfterViewCheck...

Vuex環境の詳細な説明

目次Vuex環境を構築する要約するVuex環境を構築するsrcディレクトリにフォルダstoreを作成...

Docker: /etc/default/docker の DOCKER_OPTS パラメータを変更しても反映されない

デフォルトでは、 /etc/default/docker 設定は有効になりません。docker 環境...

MySQL テーブル作成外部キー エラーの解決方法

データベーステーブルA: テーブル task_desc_tab を作成します ( id INT(11...

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

Windows システムで MySQL が起動しない場合の一般的な解決策

MySQL 起動エラーWindows 10 に MySQL をインストールする前は、net star...

私の CSS フレームワーク - base.css (ブラウザのデフォルト スタイルをリセット)

コードをコピーコードは次のとおりです。 @文字セット "utf-8"; /* @...

Tomcat のパフォーマンス最適化方法の簡単な概要

Tomcat自体の最適化Tomcat メモリ最適化起動時に大きなメモリ ブロックが必要であることを ...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...

Vue が学ぶべき知識ポイント: forEach() の使用

序文フロントエンド開発では、目的のコンテンツを取得するためにループをトラバースする必要がある状況に頻...

Linux システムをバックアップする docker コマンドの詳細な説明

tar バックアップ システム sudo tar cvpzf backup.tgz --exclud...

VirtualBox を使用して Linux クラスターをシミュレートする方法

1. ホストMacbookにHOSTをセットアップする前回のドキュメントでは仮想マシンの静的 IP ...

Linux でスレッドを作成するための pthread_create の具体的な使用法

pthread_create関数機能紹介pthread_createはUNIX環境のスレッド作成関数...

HTML で js を使用してローカル システム時間を取得する

コードをコピーコードは次のとおりです。 <div id="名前"> ...

Linux で killall コマンドを使用してプロセスを終了する 8 つの例

Linux コマンドラインには、プロセスを強制終了するためのコマンドが多数用意されています。たとえば...