首页/安全/安全加固速查/Docker API(2375/2376)暴露处置
服务与端口收敛50 条

Docker API(2375/2376)暴露处置

未加密的 Docker API 等于把宿主机 root 交给对方(起一个特权容器即可逃逸):发现 2375 立即封堵并整改。

安全加固速查安全更新于 2026-10-13

为什么这个端口等同于 root

Docker 守护进程的管理接口是「用 API 执行任意容器操作」的能力:能起容器,就能启动一个挂载宿主机根目录的特权容器,随后读写宿主机的任意文件。这个接口早期默认走未加密的 TCP,也没有认证。所以 2375 出现在公网上不是一次普通暴露,而是把整台主机的控制权交出去;2376 只是换了加密通道,同样需要客户端证书保护。

基本信息

加固项容器运行时管理接口
适用平台Linux(Docker Engine)
风险等级高
基线不对外暴露 TCP 管理接口,本机访问走 unix socket
默认套接字/var/run/docker.sock(本机,权限受控)

典型使用场景

  • 暴露面核查:确认主机上没有监听在 TCP 上的容器管理接口
  • 事件响应:发现暴露立即按疑似已被利用的机器排查
  • CI/CD 评估:需要远程构建时改用更安全的接入方式
  • 变更复核:修改守护进程启动参数后确认端口真的消失
  • 合规整改:容器运行时属于主机资产的一部分,同样纳入暴露面清单

核查与整改

核查与整改
ss -tlnp | grep -E ':2375|:2376 '
ps -ef | grep -E 'dockerd.*(-H|tcp://)' | grep -v grep
grep -E 'ExecStart' /usr/lib/systemd/system/docker.service | head -3
systemctl show docker.service -p ExecStart | head -3      # 现代系统查看实际启动参数

暴露形态对照

形态识别方式风险说明
明文 TCP 2375ss 显示监听 2375无加密无认证,直接可用 API 操作宿主机
TLS TCP 2376ss 显示监听 2376有加密但仍需双向证书,配置不当同样可被调用
unix 套接字以文件形式存在于本机默认形态,权限控制后可接受,注意属组权限
启动参数中的远程监听查看服务启动参数参数一旦写入就长期存在,需从配置层面移除
已经暴露过的机器要按疑似被入侵来排查:检查是否存在异常的特权容器、来源不明的镜像、新增的挂载点与计划任务。这类接口被调用时通常不会留下显眼告警,靠事后翻查痕迹,所以发现暴露与实际是否被利用无关,排查动作必须跟上。
改完启动参数要重载服务单元并重启守护进程,只删参数不重启,旧进程仍在监听;如果是套接字激活的方式,还要确认套接字单元没有把监听重新拉起。整改后必须用一条新命令确认端口确实消失,而不是凭改动动作判断。

需要远程管理时怎么做

确需远程管理的场景,正确顺序是:启用双向 TLS 并严格校验客户端证书、只在内网或管理网段监听、把访问权限收敛到少数构建节点,并考虑用受限代理代替直接暴露守护进程接口。无论采用哪种方式,都不要把管理接口放在能路由到公网的地址上,这一条比任何认证配置都更关键。

易错点

  • 删除启动参数不重启服务:旧进程仍在监听,端口依旧可达
  • 只关注明文端口忽略加密端口:加密通道若未校验客户端证书,同样可被调用
  • 套接字单元把监听重新拉起:改动服务参数后端口又出现,需一并检查套接字配置
  • 发现暴露但不排查利用痕迹:接口调用往往不留显式告警,需主动检查容器、镜像与挂载
  • 把本机套接字权限放松:宿主机上任何能访问该套接字的进程都等同具备管理能力,属组要严格限制

数据来源与参考

  • Docker 官方文档:Protect the Docker daemon socket
  • 等保 2.0:入侵防范

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌