Docker远程端口开启SSL证书认证
前言
之前在aliyun买的云服务器中装了docker,想通过远程端口直接连接docker服务进行操作,就按照网上教程配置了远程端口,但是没过几天发现服务器状态不正常,cpu一直飙升100%,最终排查到是docker中运行的一个容器导致的,但是这个容器不是我自己的,这才发现自己中招了,被挖矿了,但是如何避免被挖矿又能享受这种远程连接的便利呢?可以通过以下两种方式对远程端口进行保护。
- 安全组中配置白名单,指定访问IP
- 开启SSL证书认证
其中第一种可直接通过阿里云控制台进行配置实现,且建议云上的服务器在开端口时务必小心,一定要设置IP白名单,而不要图省事全局开放(除了80或者443端口),特别是docker默认远程端口2375,redis默认端口6379,mysql默认端口3306,这些默认端口很可能被黑客找到可乘之机(亲身经历,说多了都是泪啊)。回归正传,下面着重说一下如何为docker远程端口开启SSL证书认证。
使用openssl制作证书密钥
在服务器中新建一个目录,并切换到该目录下
mkdir /etc/docker && cd /etc/docker
创建根证书RSA私钥
openssl genrsa -aes256 -out ca-key.pem 4096
备注:此处需要两次输入密码,请务必记住该密码,在后面步骤会用到
创建CA证书
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
备注:该步骤以上一步生成的密钥创建证书,也就是自签证书,也可从第三方CA机构签发
创建服务端私钥
openssl genrsa -out server-key.pem 4096
创建服务端签名请求证书文件
openssl req -subj "/CN=47.104.254.199" -sha256 -new -key server-key.pem -out server.csr
备注:其中的IP地址为自己服务器IP地址
创建extfile.cnf的配置文件
echo subjectAltName = IP:47.104.254.199,IP:0.0.0.0 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
备注:其中IP地址改为自己服务器IP地址
创建签名生效的服务端证书文件
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
创建客户端签名请求证书文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
extfile.cnf文件中增加配置
echo extendedKeyUsage = clientAuth >> extfile.cnf
创建签名生效的客户端证书文件
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf
删除无用文件
rm -v client.csr server.csr
为证书文件授权
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
配置Docker支持TLS连接
编辑docker.service配置文件
vim /lib/systemd/system/docker.service
找到ExecStart=开头的一行代码,将其替换为如下内容
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem
备注:此处设置docker远程端口为2375,可根据需要修改
刷新配置,重启Docker
systemctl daemon-reload && systemctl restart docker
验证TLS方式远程连接
在IDEA工具中可以直接通过远程端口连接Docker,可通过该工具对Docker远程端口进行连接测试
首先使用alt+8快捷键打开IDEA的Services窗口,如下图所示
点击列表上方+号,然后选择Docker Connection,如下图所示
上图红框为需要填写的内容,其中Name随意填写,Engine API URL为服务器地址及Docker远程端口,注意是使用https方式连接
Certificates folder是指定之前生成的客户端证书存放的路径,可之前将前面生成的证书信息从服务器copy到本地某个路径中,需要的证书信息有ca.pem、cert.pem、key.pem这三个文件,填写完成之后,点击OK保存。
然后选定刚刚新建的Docker服务,点击左上角三角符号进行连接,下图为连接成功之后的情况,可以直接查看Docker中的容器,以及下载过的镜像等。