在阿里云服務器(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,而非直接開放端口。