Docker暴露2375端口导致服务器被攻击问题及解决方法

yizhihongxing

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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 阿里云下docker启动mysql容器,开启外部访问

    (1)拉取mysql镜像 “`docker pull centos/mysql-57-centos7“` (2)创建容器 “`docker run -di –name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 centos/mysql-57-centos7“` -p 代表…

    Docker 2023年4月13日
    00
  • Docker存储驱动之OverlayFS简介

      OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性:   1) 更简单地设计;   2) 从3.18开始,就进入了Linux内核主线;   3) 可能更快一些。  因此,OverlayFS在Docker社区关注度提高很快,被很多人认为是AUFS的继承者。就像宣称的一样,OverlayFS还很年轻。所以,在生成…

    Docker 2023年4月11日
    00
  • IDEA集成Docker实现一键部署的详细过程

    下面是“IDEA集成Docker实现一键部署的详细过程”的完整攻略: 1. 前置要求 在开始之前,需要确保你已经满足以下前置要求: 安装好 IntelliJ IDEA 开发环境 安装好 Docker 并了解其基本操作 了解 Java Web 应用的基本概念和配置方法 2. 添加 Docker 插件 在 IntelliJ IDEA 中选择“File”>“…

    Docker 2023年5月15日
    00
  • docker之CPU配额参数的混合使用

    在启动容器的时候有很多参数,这里来实践一下与CPU相关的参数。 实例: 创建两个容器,docker10、docker20,让两个容器只运行在CPU0上,然后测试CPU使用率。 [root@openstack ~]# docker run -it –cpuset-cpus 0 –cpu-shares 512 –name docker10 centos-h…

    Docker 2023年4月13日
    00
  • docker容器内缺少命令的简单解决办法

    Docker容器内缺少命令是一个常见的问题,但这个问题的解决办法也很简单。我们可以通过在容器内安装缺少的命令来解决这个问题。下面是一个完整的攻略,包含两个示例说明。 示例一:在容器内安装curl命令 1. 确认容器内是否缺少curl命令 首先,我们需要确认容器内是否缺少curl命令。我们可以使用下面的命令在容器内执行curl命令: docker exec -…

    Docker 2023年5月16日
    00
  • Docker镜像制作详解介绍

    Docker镜像制作详解介绍 当我们在使用Docker的时候,最常遇到的就是如何制作一个合适的镜像。这也是我们必须掌握的技能,因为只有找到一个合适的镜像,我们才能够在其基础上进行各种各样的应用。 Docker的镜像制作一般分为如下几个步骤: 编写一个Dockerfile文件,用来描述镜像中所使用的操作系统,镜像软件包,以及其他相关的组件和配置; 使用Dock…

    Docker 2023年5月16日
    00
  • 在 Docker 容器中运行 PHPMyAdmin的详细步骤

    下面是在 Docker 容器中运行 PHPMyAdmin 的详细步骤: 1. 安装 Docker 在运行 Docker 容器之前,请确保你在本地计算机上安装了 Docker。如果你已经安装过了,请跳过这一步。 Docker 需要根据不同的操作系统进行不同的安装。下面是在 Ubuntu 上安装 Docker 的步骤: 打开终端并更新包列表:sudo apt-g…

    Docker 2023年5月15日
    00
  • 在docker容器上添加新的映射卷

    在很多情况下,在启动docker时会用-v参数添加映射卷,但是很多情况是,在容器里面安装了很多模块之后,才发现漏添加某些卷,这时就需要添加新卷的办法 解决方案 方案1 把容器保存为镜像,然后用-v参数添加新的卷。这个方式比较麻烦,建议不用 方案2 停止容器,直接修改容器配置文件 停止容器 # docker stop 容器名称 停止docker服务如果不停止服…

    Docker 2023年4月16日
    00
合作推广
合作推广
分享本页
返回顶部