首页/云/Docker 容器速查/远程 API 暴露与 TLS 保护
资源与安全50 条

远程 API 暴露与 TLS 保护

守护进程监听 TCP 时务必启用 TLS 且不裸露 2375:该端口无认证,任何人可控制 Docker;对外只保留加密的 2376 并配合证书校验。

Docker 容器速查云更新于 2026-10-13

守护进程的远程接口

Docker 守护进程默认只监听本机的 unix socket,通过文件权限控制访问。一旦让它监听 TCP,2375 端口是不做认证的:任何能连通该端口的人都能创建特权容器、挂载宿主目录,效果等同于拿到宿主机 root。确需远程访问时应使用 2376 端口并开启 TLS 双向校验,同时用网络 ACL 限制来源,把这一层暴露面压到最小。

基本信息

端口约定2375 明文且无认证,2376 为 TLS 端口
检查命令ss -ltnp | grep -E '2375|2376'
加固方式--tlsverify 配合 CA、服务端证书与客户端证书
推荐做法仅本机使用时保持默认的 unix socket

典型使用场景

  • 上线前安全自查:确认没有多余的 TCP 监听端口暴露在外
  • 集中构建环境:跨主机调用守护进程时使用证书校验的加密通道
  • 事故复盘:确认暴露窗口与来源范围,评估影响面
  • 基线核查:把监听地址与 TLS 配置纳入巡检项
  • 历史脚本清理:排查遗留在脚本里的无认证监听参数

检查与加固

检查与加固
# 看有没有监听在 TCP 上
ss -ltnp | grep -E '2375|2376'

# 找配置来源:daemon.json 与 systemd 单元
grep -r 'tcp://' /etc/docker/daemon.json /etc/systemd/system/docker.service.d/ 2>/dev/null

# systemd drop-in 片段示意(放在 /etc/systemd/system/docker.service.d/ 下)
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem

# 改完重载并确认监听端口与校验生效
systemctl daemon-reload && systemctl restart docker

配置方式与风险

配置方式认证能力风险
unix socket(默认)宿主文件权限仅本机可达,暴露面最小
tcp 加 2375无认证任何人可控制守护进程,等同宿主 root
tcp 加 2376 且 tlsverify校验证书链与客户端身份证书私钥与签发流程需要保护
tcp 加 2376 不带 verify只加密不校验客户端客户端证书泄露即可被冒用
把监听地址写成 0.0.0.0:2375 等于把宿主机控制权公开在网络上,出现这类配置应按高危事件处理:先切断网络访问,再补证书与来源限制。
证书只签服务端、不校验客户端时,通道虽加密但仍可被持有任何有效客户端证书的人滥用,双向校验才是完整方案。

易错点

  • 沿用历史脚本里的无认证监听:这类参数在网络上流传很广,出现即按高危整改
  • 只改端口不改校验方式:换端口不会带来认证能力,2376 不带 verify 同样是可被冒用的通道
  • 证书与私钥放在共享目录:私钥泄露后证书校验形同虚设,权限要收紧到最小范围
  • 重启守护进程不评估影响:未开启容器存活保留时,重启会中断全部容器,先提示影响窗口

数据来源与参考

  • Docker 官方文档:Protect the Docker daemon socket(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌