Docker开启远程安全访问(含脚本)

Docker开启远程安全访问(含脚本)

文章目录

  • Docker开启远程安全访问(含脚本)
    • 为什么开启远程安全访问
    • 创建ca证书脚本
    • 执行脚本
    • 修改docker配置文件
    • 替换ExecStart属性
    • 更新配置文件并重启docker
    • 对docker端口2375放行
    • 测试

为什么开启远程安全访问

开启Docker远程安全访问是为了增加Docker守护进程的安全性,并允许用户通过网络远程访问和管理Docker主机。

远程访问功能可以帮助开发者和管理员在任何地方都能方便地管理和监控多个Docker主机。

然而,需要注意的是, 开启远程访问也会引入一些安全风险

如果不加以适当的保护措施,未经授权的访问者可能会利用远程访问漏洞对Docker主机进行攻击。

因此,在开启Docker远程访问时,应该采取一些安全措施来保护Docker主机,

例如

使用安全传输协议:使用TLS/SSL等加密协议对网络流量进行加密,确保通信过程中的数据安全。

  • 访问控制:设置访问权限和认证机制,限制只有授权的用户才能访问Docker主机,并使用强密码进行身份验证。

  • 配置防火墙:使用防火墙规则限制访问Docker主机的IP地址范围,只允许来自可信任网络的连接。

  • 监控和日志:定期检查Docker主机的访问和活动日志,及时发现异常行为和安全漏洞。

总之,开启远程安全访问可以为用户提供方便的管理体验,但同时也需要注意保护Docker主机的安全,采取必要的安全防护措施。

创建ca证书脚本

# 先创建一个目录存放ca私钥和公钥
mkdir -p /home/docker-ca
# 进入此目录 准备生成密钥
cd  /home/docker-ca
# 生成RSA私钥:运行下面命令时,会提示输入密码,输入两次一致即可
openssl genrsa -aes256 -out ca-key.pem 4096
# 以上面生成的RSA密钥创建证书 运行此命令后,会提示输入国家、省、市、组织名称、单位、邮箱等资料。 
# 国家只能是两位,例如:CN,其他的随便填写即可。
# -days 属性设置有效期为10年,(去掉为永久:待验证)
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
# 生服务端的RSA私钥
openssl genrsa -out server-key.pem 4096
# /CN=docker.cn 此处配置你的服务器IP,这里只能是公网IP或域名!
openssl req -subj "/CN=服务器IP" -sha256 -new -key server-key.pem -out server.csr
# 配置白名单
# DNS: 此处配置你的服务器IP,这里只能是公网IP或域名!
# IP: 此处配置允许访问的IP,可以配置多个,以逗号间隔即可。此处也同样是支支持公网IP。
# 如果允许任何携带证书的人访问,直接修改为0.0.0.0 即可; (但只允许永久证书的才可以连接成功)
echo subjectAltName = DNS:服务器IP,IP:0.0.0.0,IP:服务器IP >> extfile.cnf
# 为extfile.cnf追加属性; 此属性用于服务器身份验证
echo extendedKeyUsage = serverAuth >> extfile.cnf
# 生成签名过的客户端证书; 输入和上面一致即可
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem  -CAcreateserial -out server-cert.pem -extfile extfile.cnf
# 生成客户端的RSA私钥
openssl genrsa -out key.pem 4096
#生成client.csr
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
# 生成client.csr
echo extendedKeyUsage = clientAuth >> extfile.cnf
#为extfile-client.cnf添加认证参数
echo extendedKeyUsage = clientAuth > extfile-client.cnf
# 生成签名证书
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem   -CAcreateserial -out cert.pem -extfile extfile-client.cnf
# 删除无用的配置文件,根据需要执行
# rm -v client.csr server.csr extfile.cnf extfile-client.cnf

执行脚本

根据实际情况,修改以上配置,并执行。

修改docker配置文件

vi  /usr/lib/systemd/system/docker.service
# vi /lib/systemd/system/docker.service

替换ExecStart属性

ExecStart=/usr/bin/dockerd  --tlsverify --tlscacert=/home/docker-ca/ca.pem --tlscert=/home/docker-ca/server-cert.pem --tlskey=/home/docker-ca/server-key.pem  -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

更新配置文件并重启docker

systemctl daemon-reload && systemctl restart docker

对docker端口2375放行

#如果是云服务器 需要在其管理页面中对应开启端口访问
firewall-cmd --zone=public --add-port=2375/tcp

测试

  • 访问 https://ip:2375/version,如果提示需要证书即标识配置成功
  • 使用IDEA连接

将ca-key.pem、ca.pem、cert.pem、key.pem四个文件拷贝到要访问docker的客户端。
在IDEA中,将Engine API URL中的TCP协议修改为https
在IDEA的Certificates folder中配置拷贝了四个文件的目录 点击apply,出现Connection successful即为成功!

参考:

  • https://www.cnblogs.com/zhangruifeng/p/14772181.html

  • https://blog.csdn.net/python15397/article/details/131649168

  • https://www.cnblogs.com/niceyoo/p/13270224.html

你可能感兴趣的:(docker,docker,安全,容器)