Docker によりリモートで安全なアクセスが可能になります (スクリプトを含む)
記事ディレクトリ
リモート セキュア アクセスをオンにする理由
Docker リモート セキュリティ アクセスを有効にする目的は、Docker デーモン プロセスのセキュリティを強化し、ユーザーがネットワーク経由で Docker ホストにリモート アクセスして管理できるようにすることです。
リモート アクセス機能は、開発者や管理者がどこからでも複数の Docker ホストを簡単に管理および監視できるようにします。
ただし、 に注意してください开启远程访问也会引入一些安全风险
。
適切な保護手段がなければ、権限のない訪問者がリモート アクセスの脆弱性を悪用して Docker ホストを攻撃する可能性があります。
したがって、Docker リモート アクセスを有効にする場合は、Docker ホストを保護するためにいくつかのセキュリティ対策を講じる必要があります。
たとえば:
安全な伝送プロトコルを使用する: TLS/SSL およびその他の暗号化プロトコルを使用してネットワーク トラフィックを暗号化し、通信中のデータのセキュリティを確保します。
-
アクセス制御: アクセス権と認証メカニズムを設定し、許可されたユーザーのみが Docker ホストにアクセスすることを制限し、認証に強力なパスワードを使用します。
-
ファイアウォールを構成する: ファイアウォール ルールを使用して、Docker ホストの IP アドレス範囲へのアクセスを制限し、信頼されたネットワークからの接続のみを許可します。
-
監視とログ: Docker ホストのアクセス ログとアクティビティ ログを定期的にチェックして、異常な動作やセキュリティの脆弱性をタイムリーに検出します。
总之
、リモート セキュリティ アクセスを有効にすると、ユーザーに便利な管理エクスペリエンスを提供できますが、同時に、Docker ホストのセキュリティの保護に注意を払い、必要なセキュリティ保護措置を講じる必要もあります。
CA証明書スクリプトの作成
# 先创建一个目录存放ca私钥和公钥
mkdir -p /home/docker-ca
# 进入此目录 准备生成密钥
cd /home/docker-ca
# 生成RSA私钥:运行下面命令时,会提示输入密码,输入两次一致即可
openssl genrsa -aes256 -out ca-key.pem 4096
# 以上面生成的RSA密钥创建证书 运行此命令后,会提示输入国家、省、市、组织名称、单位、邮箱等资料。
# 国家只能是两位,例如:CN,其他的随便填写即可。
# -days 属性设置有效期为10年,(去掉为永久:待验证)
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
# 生服务端的RSA私钥
openssl genrsa -out server-key.pem 4096
# /CN=docker.cn 此处配置你的服务器IP,这里只能是公网IP或域名!
openssl req -subj "/CN=服务器IP" -sha256 -new -key server-key.pem -out server.csr
# 配置白名单
# DNS: 此处配置你的服务器IP,这里只能是公网IP或域名!
# IP: 此处配置允许访问的IP,可以配置多个,以逗号间隔即可。此处也同样是支支持公网IP。
# 如果允许任何携带证书的人访问,直接修改为0.0.0.0 即可; (但只允许永久证书的才可以连接成功)
echo subjectAltName = DNS:服务器IP,IP:0.0.0.0,IP:服务器IP >> extfile.cnf
# 为extfile.cnf追加属性; 此属性用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
# 生成签名过的客户端证书; 输入和上面一致即可
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
# 生成客户端的RSA私钥
openssl genrsa -out key.pem 4096
#生成client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
# 生成client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
#为extfile-client.cnf添加认证参数
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 生成签名证书
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf
# 删除无用的配置文件,根据需要执行
# rm -v client.csr server.csr extfile.cnf extfile-client.cnf
スクリプトを実行する
実際の状況に応じて、上記の設定を変更して実行してください。
Docker 構成ファイルを変更する
vi /usr/lib/systemd/system/docker.service
# vi /lib/systemd/system/docker.service
ExecStart 属性を置き換える
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/home/docker-ca/ca.pem --tlscert=/home/docker-ca/server-cert.pem --tlskey=/home/docker-ca/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
構成ファイルを更新し、docker を再起動します。
systemctl daemon-reload && systemctl restart docker
Docker ポート 2375 を解放します。
#如果是云服务器 需要在其管理页面中对应开启端口访问
firewall-cmd --zone=public --add-port=2375/tcp
テスト
- にアクセスし
https://ip:2375/version
、証明書が必要であることを示すプロンプトが表示されたら、ID 構成は成功です。 - IDEA を使用して接続する
4 つのファイル ca-key.pem、ca.pem、cert.pem、および key.pem を、Docker にアクセスするクライアントにコピーします。
IDEA で、エンジン API URL の TCP プロトコルを https に変更し、
IDEA の Certificates フォルダーに 4 つのファイルがコピーされたディレクトリを設定し、適用をクリックします。Connection success と表示されれば成功です。
参考: