容器横向渗透攻击防护措施详解,零基础也能轻松上手

什么是容器横向渗透攻击?

容器横向渗透攻击指的是攻击者攻破一个容器后,以此为跳板,攻击同一主机上的其他容器或宿主机自身。
常见的攻击方式包括:利用容器间的默认网络互通、滥用特权模式、未限制 Linux capabilities(如挂载、修改网络等权限)。
做好容器横向渗透攻击防护措施,能有效阻断攻击路径,保护整个集群安全。

准备条件

  • 一台安装了 Docker 的 Linux 服务器(本文以 Ubuntu 22.04 为例)
  • 基础镜像:使用官方 nginx:alpine 或 busybox 作为测试对象
  • 建议使用非 root 用户执行 docker 命令(或提前配置 sudo)
  • 基础命令知识:能复制粘贴并回车即可,无需编程背景

核心防护措施与操作步骤

1. 网络隔离:为每个容器设置独立自定义网络

默认的 bridge 网络会使所有容器互通,这是横向渗透的温床。
使用自定义网络并禁止容器自动加入 --link 模式。

# 创建一个自定义网络,设置子网并禁用容器间通信
docker network create --driver bridge --subnet=192.168.50.0/24 --opt com.docker.network.bridge.enable_icc=false secure-net
--opt com.docker.network.bridge.enable_icc=false 表示禁止该网络内容器互相通信。

启动容器时加入此网络:

docker run -d --name web1 --network secure-net nginx:alpine
docker run -d --name web2 --network secure-net busybox sleep 3600

验证隔离效果:

docker exec web2 ping web1  # 应显示 Destination Host Unreachable

2. 限制 Linux capabilities(仅授予必要权限)

默认容器拥有大量 capabilities(如 CAP_NET_RAW、CAP_SYS_ADMIN 等),攻击者可利用它们进行网络嗅探、加载内核模块等。
使用 --cap-drop=ALL 再按需添加。

docker run -d --name app --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx:alpine

如上只添加了 80 端口绑定的权限,其余全部丢弃。
攻击者即使进入容器也无法执行 tcpdump 等敏感操作。

3. 以非 root 用户运行容器

修改 Dockerfile 或在运行命令中指定用户:

# 运行时指定用户(UID 1000)
docker run -d --name test --user 1000:1000 busybox sleep 3600

进入容器后检查:

docker exec test id  # 显示 uid=1000 gid=1000

4. 将根文件系统设为只读

使用 --read-only 参数防止攻击者写入恶意文件:

docker run -d --name nginx-ro --read-only nginx:alpine

如果应用需要临时写入(如日志),可以挂载 tmpfs:

docker run -d --name nginx-ro --read-only --tmpfs /var/log/nginx:rw,noexec,nosuid nginx:alpine

5. 使用 seccomp 和 AppArmor 进行系统调用限制

Docker 默认已启用 seccomp 安全模式,但可以自定义更严格的策略。
本文不展开完整规则,零基础用户保持默认即可。
想进一步加固的运行命令:

docker run -d --name secured --security-opt seccomp=/path/to/custom.json nginx:alpine

避坑指南与高频问题

问题1:设置 --cap-drop=ALL 后容器启动失败

原因:丢掉了必要权限,如 CHOWNDAC_OVERRIDE 等。解决方案:逐个测试,先用 --cap-drop=ALL --cap-add=NET_BIND_SERVICE 启动,如果报错再查阅镜像文档添加所需权限。

问题2:使用 --network secure-net 但容器仍能互相通信

检查创建网络时是否加上了 --opt com.docker.network.bridge.enable_icc=false。如果忘记,可用 docker network inspect secure-net 查看 Options 字段。

问题3:--read-only 导致应用崩溃

很多应用需要写入 /tmp 或 /var/run。使用 --tmpfs 挂载临时存储解决。找不到具体路径时,先以非只读模式启动,用 docker exec 查看进程写入了哪些目录。

效果验证清单

完成上述配置后,模拟一次简单的横向渗透测试:

  1. 网络隔离:进入容器 web2 执行 ping web1,确认不通。
  2. capabilities 限制:进入 app 容器执行 tcpdump -i eth0,应提示权限不足。
  3. 非 root 用户:执行 id 确认 uid ≠ 0。
  4. 只读根文件系统:进入 nginx-ro 执行 touch /test,提示 Read-only file system。

若全部通过,说明你的容器横向渗透攻击防护措施已生效。

最后

以上每步均可单独应用,建议从网络隔离和 capabilities 限制开始。
如果你在操作中遇到其他报错,优先检查 Docker 版本(docker --version 应 ≥20.10)。
掌握这些容器横向渗透攻击防护措施,能大幅提升你的容器环境安全性,上手后可根据实际业务微调策略。

分享到:
上一篇
虚拟机性能优化资源分配:从零开始调优你的虚拟机
下一篇
K8s网络插件选型配置讲解:教你K8s网络插件选型与配置
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意