Docker容器--TLS安全管理

一、Docker remote api 访问

Docker的远程调用API接口存在未授权访问的漏洞,至少也应该限制外网访问,这里配置使用Socket方式访问。
这里我们使用centos7 ip:192.168.100.101作为被访问方;
centos7 ip:192.168.100.100作为远程调用方。
使用

docker -d -H unix:///var/run/docker.sock -H tcp://192.168.100.101:2375 

或者

vim /usr/lib/systemd/system/docker.service
##添加配置
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://192.168.100.101:2375

systemctl daemon-reload
systemctl restart docker

###查看2375端口是否开启
[root@compute1 ~]# netstat -anpt | grep 2375
tcp        0      0 192.168.100.101:2375    0.0.0.0:*               LISTEN      96472/dockerd    

然后在宿主机的firewalld上做IP访问控制即可,或者关闭firewalld,不做策略。

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.100" port protocol="tcp" port="2375" accept"
firewall-cmd --reload

###查看firewall rich-rules
[root@compute1 ~]# firewall-cmd --list-rich-rules 
rule family="ipv4" source address="192.168.100.100" port port="2375" protocol="tcp" accept

测试远程调用docker

docker -H tcp://192.168.100.101 images
##远程调用192168.100.101的docker images命令

docker -H tcp://192.168.100.101 ps -a
##远程调用192.168.100.101的docker ps -a命令

二、Docker-TLS加密

为了防止链路劫持、会话劫持等问题导致 Docker 通信时被中 间人攻击,c/s 两端应该通过加密方式通讯。

mkdir /tls
cd /tls

hostnamectl set-hostname master
su

vim /etc/hosts
127.0.0.1   master
1. 创建ca密钥
openssl genrsa -aes256 -out ca-key.pem 4096 //输入123123
2. 创建ca证书
openssl req -new -x509 -days 1000 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem  //输入123123
3. 创建服务器私钥
openssl genrsa -out server-key.pem 4096 
4. 签名私钥
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr
5. 使用ca证书与私钥证书签名,输入123123
openssl x509 -req -days 1000 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
6. 生成客户端密钥
openssl genrsa -out key.pem 4096
7. 签名客户端
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
8. 创建配置文件
echo extendedKeyUsage=clientAuth > extfile.cnf
9. 签名证书,输入123123,需要(签名客户端,ca证书,ca密钥)
openssl x509 -req -days 1000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
10. 删除多余文件
rm -rf ca.srl client.csr extfile.cnf server.csr
11. 配置docker
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/tls/ca.pem --tlscert=/tls/server-cert.pem --tlskey=/tls/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker

scp ca.pem root@192.168.100.100:/etc/docker/
scp cert.pem root@192.168.100.100:/etc/docker/
scp key.pem root@192.168.100.100:/etc/docker/

验证

  1. 本地验证
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 version
  1. client验证
docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://master:2376 images
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!以下是DockerTLS配置文档: 1. 首先,确保您已经安装了Docker。如果没有安装,请参考Docker官方文档进行安装。 2. 生成TLS证书和密钥: - 创建一个用于存储证书和密钥的目录,例如 `/etc/docker/certs.d`。 - 使用以下命令生成CA证书和私钥: ``` $ openssl genrsa -aes256 -out ca-key.pem 4096 $ openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem ``` - 使用以下命令生成服务器证书和私钥: ``` $ openssl genrsa -out server-key.pem 4096 ***.pem -out server.csr $ echo subjectAltName = IP:<your-server-ip>,IP:127.0.0.1 > extfile.cnf $ openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf ``` - 使用以下命令生成客户端证书和私钥: ``` $ openssl genrsa -out key.pem 4096 *** $ echo extendedKeyUsage = clientAuth > extfile-client.cnf $ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf ``` 3. 配置Docker守护进程: - 编辑或创建 `/etc/docker/daemon.json` 文件,并添加以下内容: ``` { "tls": true, "tlscacert": "/etc/docker/certs.d/ca.pem", "tlscert": "/etc/docker/certs.d/server-cert.pem", "tlskey": "/etc/docker/certs.d/server-key.pem", "tlsverify": true } ``` - 重新启动Docker守护进程,使配置生效。 4. 配置Docker客户端: - 将客户端证书和密钥复制到客户端机器上的适当位置,例如 `/etc/docker/certs.d/client.pem` 和 `/etc/docker/certs.d/key.pem`。 - 设置环境变量 `DOCKER_TLS_VERIFY` 为 `1`。 - 设置环境变量 `DOCKER_CERT_PATH` 为证书和密钥的存储路径,例如 `/etc/docker/certs.d`。 现在,您已经完成了DockerTLS配置。通过使用TLS证书和密钥,您可以保护Docker守护进程和与之通信的客户端之间的通信安全性。请确保妥善保管生成的证书和密钥文件,并仅将其提供给受信任的实体。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值