在阿里云服务器(ECS)上,Docker API 默认监听 2375
(非加密)和 2376
(TLS加密)端口。如果未正确配置,可能被恶意利用(如挖矿攻击)。以下是关闭和加固 Docker API 端口的完整步骤:
1. 确认 Docker API 端口状态
# 检查 Docker 是否正在监听端口
sudo netstat -tulnp | grep dockerd
- 如果输出包含
0.0.0.0:2375
或:::2375
,说明 API 端口已暴露(需立即关闭)。
2. 关闭 Docker API 端口(两种方法)
方法 1:修改 Docker 配置文件(推荐)
# 编辑 Docker 配置文件(通常为 /etc/docker/daemon.json)
sudo vim /etc/docker/daemon.json
- 添加或修改以下内容,禁用远程 API,仅允许本地 Unix Socket 通信:
{"hosts": ["unix:///var/run/docker.sock"] }
- 重启 Docker 服务:
sudo systemctl restart docker
方法 2:直接修改服务启动参数
# 编辑 Docker 服务文件
sudo vim /lib/systemd/system/docker.service
- 找到
ExecStart
行,删除-H tcp://0.0.0.0:2375
类似参数,确保仅保留:ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock
- 重新加载配置并重启:
sudo systemctl daemon-reload sudo systemctl restart docker
3. 验证端口是否关闭
# 再次检查端口监听状态
sudo netstat -tulnp | grep dockerd
- 正确情况下应仅显示
unix
socket,无 TCP 端口。
4. 加固 Docker API 的其他措施
(1)启用 TLS 加密(如需远程管理)
如果必须开放远程 API,强制使用 TLS 加密(端口 2376):
# 生成 CA 和客户端证书(需替换域名)
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca-key.pem -x509 -days 365 -out ca.pem
openssl req -newkey rsa:4096 -nodes -sha256 -keyout server-key.pem -out server.csr
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
- 修改
daemon.json
启用 TLS:{"tls": true,"tlscert": "/path/to/server-cert.pem","tlskey": "/path/to/server-key.pem","hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"] }
(2)阿里云安全组配置
- 登录 阿里云控制台 → 安全组 → 选择实例所在安全组。
- 删除 2375/2376 端口的入方向规则(默认应禁止所有外网访问)。
(3)防火墙限制
# 使用 iptables 禁止外部访问 2375
sudo iptables -A INPUT -p tcp --dport 2375 -j DROP
sudo iptables -A INPUT -p tcp --dport 2376 -j DROP
# 持久化规则(Ubuntu/Debian)
sudo netfilter-persistent save
5. 监控与审计
- 检查异常连接:
sudo journalctl -u docker | grep "connection"
- 定期更新 Docker:
sudo apt-get update && sudo apt-get upgrade docker-ce
总结
操作 | 命令/步骤 |
---|---|
关闭默认 API 端口 | 修改 /etc/docker/daemon.json → 只保留 unix:///var/run/docker.sock |
强制 TLS 加密 | 配置证书并限制 hosts 为 tcp://0.0.0.0:2376 |
阿里云安全组 | 删除 2375/2376 端口的入方向规则 |
防火墙加固 | iptables -A INPUT -p tcp --dport 2375 -j DROP |
重要提醒:
- 禁止将 Docker API 暴露在公网,除非完全信任网络环境并启用 TLS。
- 推荐使用 SSH 隧道 或 VPN 访问 Docker,而非直接开放端口。