前言
将题目部署至远程服务器可大大释放靶场比赛环境资源。让题目服务和靶场比赛环境独立增加了系统安全性,防止用户通过逃逸等方式对靶场比赛系统进行破坏。当然服务器开启docker远程访问时需要注意权限控制,通过加密的方式防止api被远程攻击,所以这里需要给docker远程端口添加tls加密证书,只比赛环境能和其通讯,为了安全起见你也可以将docker远程端口设置安全组规则只需要比赛环境IP访问。
一、准备服务器并安装docker环境
自行准备一台linux服务器并安装好docker环境,并开放2376安全组端口和防火墙规则。以下简称题目环境,
二、生成tls加密证书
执行下面脚本会生成服务端和客户端的证书
vim generate_tls.sh
chmod +x generate_tls.sh
./generate_tls.sh 题目环境IP
#!/usr/bin/env bash
#
# 一键生成 TLS 自签 CA / 服务端证书 / 客户端证书
# 用法: ./generate_tls.sh <SERVER_IP_OR_FQDN>
# 例: ./generate_tls.sh 21.109.xxx.xx
set -euo pipefail
[[ $# -eq 1 ]] || { echo "Usage: $0 <SERVER_IP_OR_FQDN>"; exit 1; }
SERVER_IP=$1
DAYS=36500 # 约 100 年,俗称“永久”
KEY_SIZE=2048
DIR="certs"
CA_KEY="${DIR}/ca-key.pem"
CA_CRT="${DIR}/ca.pem"
SRV_KEY="${DIR}/server-key.pem"
SRV_CSR="${DIR}/server.csr"
SRV_CRT="${DIR}/server.pem"
CLI_KEY="${DIR}/client-key.pem"
CLI_CSR="${DIR}/client.csr"
CLI_CRT="${DIR}/client.pem"
mkdir -p "$DIR"
# 1. 生成 CA
echo "==> 1. 生成自签 CA (${DAYS} 天有效期)"
openssl req -new -x509 -nodes -days "$DAYS" \
-newkey rsa:"$KEY_SIZE" -keyout "$CA_KEY" -out "$CA_CRT" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=LocalDev/CN=LocalCA" \
2>/dev/null
# 2. 生成服务端私钥与 CSR
echo "==> 2. 生成服务端私钥 & CSR"
openssl req -new -nodes -newkey rsa:"$KEY_SIZE" \
-keyout "$SRV_KEY" -out "$SRV_CSR" \
-subj "/C=CN/ST=Beijing/L=Beijing/O=LocalDev/CN=server" \
2>/dev/null
# 3. 创建 SAN 扩展文件(包含 IP 与 localhost)
SAN_FILE="${DIR}/san.conf"
cat > "$SAN_FILE" <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
CN = server
[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
IP.1 = ${SERVER_IP}
DNS.1 = localhost
DNS.2 = ${SERVER_IP}
EOF

三、docker开启远程访问API并添加加密证书
编辑docker.service文件,注意此文件一般在/usr/lib/systemd/system/docker.service 目录下或者/etc/systemd/system/docker.service目录。将ExecStart字段替换以下内容,tlscert、tlskey、tlscacert为刚生成的证书信息。这里注意/opt/certs/server-cert.pem等证书的路径是否正确。
ExecStart=/usr/bin/dockerd --host=unix:///var/run/docker.sock \
--host=tcp://0.0.0.0:2376 \
--tlsverify \
--tlscert=/opt/certs/server.pem \
--tlskey=/opt/certs/server-key.pem \
--tlscacert=/certs/ssl/ca.pem
重启docker.service和docker
# 1. 重新加载 systemd 配置
sudo systemctl daemon-reload
# 2. 重启 docker.service
sudo systemctl restart docker.service
# 3. 确认状态
sudo systemctl status docker.service
# 3. 重新docker
sudo systemctl restart docker
三、后台添加docker远程引擎
主机类型选择模式,地址为题目服务器IP、端口设置2376,域名按需配置如有需将IP解析到此域名。然后开启TLS,上传刚才生成的ca证书和客户端证书,然后启用此引擎。这样就可以将题目部署到远程服务器了。

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.secsnow.cn/wiki/subject/article/set-docker-api/
许可协议:署名-非商业性使用 4.0 国际许可协议