Docker远程访问与加密配置指南

devtools/2025/4/1 20:49:51/

实验目的

  1. 基础功能验证:
    验证Docker远程访问的基础配置方法
    测试未加密(2375端口)和TLS加密(2376端口)两种连接方式的可用性
  2. 安全性对比:
    对比防火墙开启/关闭状态下系统的暴露风险
    分析未加密通信的数据传输安全性
    验证TLS证书认证机制的有效性
  3. 操作实践:
    掌握证书生成与配置的全流程
    熟悉防火墙策略与Docker安全配置的协同工作方式
    测试不同网络环境下远程连接的实际效果
  4. 风险评估:
    评估systemctl stop firewalld的实际安全影响
    验证攻击者利用未防护端口入侵的可能性

(一)启用Docker远程访问

Docker默认只允许本地Unix socket连接,要启用远程访问需要修改配置:

dockerdaemonjson_24">1. 编辑 /etc/docker/daemon.json

添加hosts参数以启用 TCP 监听,同时保留本地 UNIX 套接字:
tcp://0.0.0.0:2375 :监听所有 IP 的 2375 端口(非加密,仅限内网使用)。

在这里插入图片描述

#查看Docker的基本信息,过滤出包含"Docker"的行,通常用于检查Docker版本和运行状态。
docker info | grep Docker
systemctl stop firewalld
systemctl disable firewalld
systemctl daemon-reload && systemctl restart docker
# 报错!!!
# 查看docker状态
systemctl status docker

在这里插入图片描述

在这里插入图片描述

2. 处理 systemd 冲突

若系统使用systemd(如 Rocky Linux/CentOS),需创建覆盖文件

mkdir -p /etc/systemd/system/docker.service.d
vim /etc/systemd/system/docker.service.d/override.conf[Service]
ExecStart=
ExecStart=/usr/bin/docke

在这里插入图片描述
在这里插入图片描述

3. 客户端验证
docker -H tcp://your-server-ip:2375 info #info 就是在对方docker 执行的指令

在这里插入图片描述
在这里插入图片描述

(二)Docker的加密远程——启用 TLS 加密(公网必备)

# 生成 TLS 证书
mkdir -p /etc/docker/certs && cd /etc/docker/certs
1. 生成CA根证书
# 生成加密的 CA 私钥(4096位,AES-256加密)
openssl genrsa -aes256 -out ca-key.pem 4096 #注意需要输入至少4个字符,不然报错
# 生成 CA 根证书(有效期10年)
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
# 填写信息示例:
# Country Name (2 letter code) []:CN
# Common Name []:Docker Remote CA

在这里插入图片描述

2. 生成服务端证书
# 生成服务端私钥(不加密,便于自动加载)
openssl genrsa -out server-key.pem 4096
# 创建证书签名请求(CSR)
openssl req -subj "/CN=<服务器IP或域名>" -sha256 -new -key server-key.pem -out
server.csr
例如:
openssl req -subj "/CN=192.168.1.100" -sha256 -new -key server-key.pem -out
server.csr
# 设置扩展属性(仅用于服务端认证)
echo extendedKeyUsage = serverAuth > extfile.cnf
例如:
echo subjectAltName = IP:192.168.1.100 > extfile.cnf
# 签发服务端证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem
\
-CAcreateserial -out server-cert.pem -extfile extfile.c

在这里插入图片描述

3. 生成客户端证书,设置证书的权限
# 生成客户端私钥
openssl genrsa -out client-key.pem 4096
# 创建客户端 CSR
openssl req -subj "/CN=<客户端标识>" -sha256 -new -key client-key.pem -out
client.csr
例如:
openssl req -subj "/CN=client" -new -key client-key.pem -out client.csr
# 设置扩展属性(客户端认证)
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 签发客户端证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem
\
-CAcreateserial -out client-cert.pem -extfile extfile-client.cchmod 0400 ca-key.pem server-key.pem client-key.pem
chmod 0444 ca.pem server-cert.pem client-cert.p

在这里插入图片描述

docker_TLS__130">4. docker服务端配置 TLS 监听
修改 daemon.json {
"tls": true,
"tlscacert": "/path/to/ca.pem",
"tlscert": "/path/to/server-cert.pem",
"tlskey": "/path/to/server-key.pem",
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2376"] #注意:加密和不
加密用的端口不一样
}

在这里插入图片描述

防火墙配置

开放 TCP 端口(根据是否加密选择):若防火墙未开,省掉该步骤

# 非加密端口(仅限内网)
firewall-cmd --permanent --add-port=2375/tcp
# 加密端口(推荐公网)
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --reloa
5. 服务重启与验证
  1. 重启 Docker 服务
systemctl daemon-reload
systemctl restart docker
journalctl -u docker.service -f # 检查日志
6. 远程客户端测试:传输证书到客户端

将 ca.pem 、client-cert.pem 、client-key.pem 复制到客户端 ~/.docker/ 目录。

docker 服务器上:证书存放位置

在这里插入图片描述

测试命令:测试连接TLS 加密连接
例如:
docker -H tcp://10.0.0.14:2376 --tlsverify --tlscacert=ca.pem --tlscert=client   -cert.pem --tlskey=client-key.pem images
docker -H tcp://10.0.0.14:2376 --tlsverify --tlscacert=ca.pem --tlscert=client   -cert.pem --tlskey=client-key.pem info
# 执行容器部署
docker -H tcp://10.0.0.14:2376 --tlsverify --tlscacert=ca.pem --tlscert=client   -cert.pem --tlskey=client-key.pem run -p -d 80:80 nginx# 验证端口监听
ss -tulnp | grep 2376
# 测试 TLS 握手
openssl s_client -connect 10.0.0.14:2376 -CAfile ca.pem -cert client-
cert.pem -key client-key.pem

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/172476.html

相关文章

Flutter常用功能教程:新手入门指南

Flutter常用功能教程 本文提供了详细的Flutter常用功能教程&#xff0c;涵盖环境搭建、布局与UI设计、导航与路由管理、状态管理入门、数据获取与网络请求以及保存用户数据等内容&#xff0c;帮助开发者快速上手Flutter开发。 Flutter简介及环境搭建 Flutter是什么 Flutter…

Gateway实战(三)、断言-时间、Cookie信息

spring cloud-Gateway实战三、断言 断言一)、时间断言相关1、适用场景2、Demo案例二)、断言- Cookie信息1、用户身份验证与会话管理场景及Demo案例2、A/B测试及Demo案例断言 简单了解: 断言是一种在程序设计中用于检查程序状态或条件的机制,在gateway网关里,断言的作用是…

强大的AI网站推荐(第四集)—— Gamma

网站&#xff1a;Gamma 号称&#xff1a;展示创意的新媒介 博主评价&#xff1a;快速展示创意&#xff0c;重点是展示&#xff0c;在几秒钟内快速生成幻灯片、网站、文档等内容 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…

深入解析:ElasticSearch Query 查询方式

全文目录&#xff1a; 开篇语前言摘要概述ElasticSearch Query 查询方式详解1. Match 查询&#xff08;全文搜索&#xff09;1.1 Match 查询示例1.2 Match 查询参数扩展 2. Term 查询&#xff08;精准查询&#xff09;2.1 Term 查询示例2.2 Terms 查询 3. Bool 查询&#xff08…

基于springboot+vue的农产品电商平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

大模型提示词-模型四 (Grok-1、LLaMA与Mistral 7B模型对比)-(专题6)

1. 模型提示指南 1.1 Grok-1 Grok-1 是一个混合专家(MoE)大型语言模型(LLM),具有 3140 亿个参数,包括基础模型权重和网络架构的公开发布。 Grok-1 由 xAI 训练,并由 MoE 模型组成,在推理时对每个标记激活 25% 的权重。Grok-1 的预训练截止日期为 2023 年 10 月。 根…

算力盒子VS边缘计算盒子

算力盒子是一种集成了高性能计算能力的边缘计算设备&#xff0c;通常用于处理复杂的计算任务&#xff0c;尤其是在人工智能&#xff08;AI&#xff09;和深度学习领域。 应用场景&#xff1a; ‌智慧城市‌&#xff1a;用于多路高清视频的实时分析和处理&#xff0c;支持人、…

基于YALMIP+CPLEX的带储能微电网调度问题最优求解matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 1.YALMIP简介 2.CPLEX简介 3.基于YALMIPCPLEX的求解步骤 5.完整工程文件 1.课题概述 微电网作为分布式能源系统的核心组成部分&#xff0c;其优化调度是实现能源高效利用和经济运行的关键。传统的微电…