实验目的
- 基础功能验证:
验证Docker远程访问的基础配置方法
测试未加密(2375端口)和TLS加密(2376端口)两种连接方式的可用性 - 安全性对比:
对比防火墙开启/关闭状态下系统的暴露风险
分析未加密通信的数据传输安全性
验证TLS证书认证机制的有效性 - 操作实践:
掌握证书生成与配置的全流程
熟悉防火墙策略与Docker安全配置的协同工作方式
测试不同网络环境下远程连接的实际效果 - 风险评估:
评估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. 服务重启与验证
- 重启 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