Docker暴露2375端口导致服务器被攻击问题及解决方法
问题描述
Docker默认情况下会在服务器上的2375端口上开放API,由于这个API没有任何的认证措施,且默认情况下是允许任何IP地址连接的,所以如果不做任何调整,服务器将变得非常容易受到攻击。
示例一
以下是一种攻击方式,攻击者可以使用类似以下命令行工具的脚本程序:
docker -H tcp://your-server-ip:2375 ps
该程序会向你的服务器上的Docker API端口发送一个查询命令,返回Docker镜像及运行的容器的相关信息。但是,如果你暴露了Docker API端口,这个查询命令就会变得非常危险,该攻击者可以非常容易地了解到所有运行的容器及其配置信息,从而攻击你的服务器。
示例二
另外一个更加严重的攻击方式涉及到在你的服务器上创建一个新的容器,该容器将被用于执行有害的操作。攻击者可以使用类似以下命令行工具的脚本程序:
docker -H tcp://your-server-ip:2375 run -v /:/mnt -ti bash
该命令将会在你的服务器上运行一个新的bash shell,你的服务器上的根目录将会被挂载到这个容器的/mnt目录下,攻击者可以使用这个bash shell执行任何他想执行的命令,这场攻击会对你的服务器造成极大的危害。
解决方法
方法一:禁止Docker的API端口
首先,在你的服务器上执行以下命令行,停止并禁用Docker的服务:
systemctl stop docker
systemctl disable docker
接着,如果你的运维日志中有类似以下的记录,则说明Docker已经在使用2375端口开启了API服务:
INFO[0000] API listen on /var/run/docker.sock
因此我们需要修改Docker配置文件以禁止API端口的存在。打开Docker配置文件编辑器:
vi /usr/lib/systemd/system/docker.service
找到下面一行内容:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
在这行命令前面加上如下内容:
ExecStartPost=/usr/bin/iptables -A INPUT -p tcp --dport 2375 -j DROP
最后保存并退出编辑器。
重新启动Docker服务:
systemctl daemon-reload
systemctl start docker
现在Docker的API端口已经被禁用了,攻击者将无法通过这个API进行连接。
方法二:限制Docker API服务的访问
一个比较好的方法是使用TLS证书对Docker API进行保护,限制访问仅在本地或安全网络中进行。在Docker安装文件的目录下,使用以下命令行生成一个自签名的证书:
mkdir /etc/docker/certs.d/localhost:2376/
openssl req -newkey rsa:2048 -nodes -keyout /etc/docker/certs.d/localhost:2376/key.pem \
-x509 -days 365 -out /etc/docker/certs.d/localhost:2376/cert.pem
chmod -R 644 /etc/docker/certs.d/
接着修改Docker配置文件:
vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd \
--tlsverify \
--tlscacert=/etc/docker/certs.d/ca.pem \
--tlscert=/etc/docker/certs.d/server-cert.pem \
--tlskey=/etc/docker/certs.d/server-key.pem \
-H=0.0.0.0:2376 \
-H unix:///var/run/docker.sock
最后,重新启动Docker服务:
systemctl enable docker
systemctl daemon-reload
systemctl start docker
现在,你的Docker API端口上会使用TLS证书进行加密通信,只有在已经有一个验证好的TLS证书的情况下才能够连接到Docker API。同时,需要注意限制访问的IP地址,只允许来自安全网络的访问,这样能够增强Docker API的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker暴露2375端口导致服务器被攻击问题及解决方法 - Python技术站