家用住宅主机Linux容器横向渗透攻击防护配置

为什么家用容器也要防横向渗透?

很多人在家里的NAS或小主机上跑Docker容器时,只图方便,往往把容器网络设置成默认的bridge模式,甚至直接把宿主机端口映射出去。
但默认模式下,同一宿主机上的容器之间默认是可以互相通信的——万一某个容器被入侵(比如运行了有漏洞的镜像或弱口令服务),攻击者就能通过横向渗透跳转到其他容器甚至宿主机,造成更大的损失。
本文就从零开始,手把手教你给家用容器加上防护围栏。

准备工作:你需要什么?

  • 一台运行 Linux 的家用主机(Ubuntu 22.04 / Debian 11 或 CentOS Stream 8+ 均可)
  • 已经安装好 Docker 或 Podman(本文以 Docker 示例)
  • sudo 权限的用户
  • 基本的命令行操作能力(会复制粘贴即可)

操作前先确认当前 Docker 版本:

docker --version

建议使用 20.10 以上版本以支持完整的安全配置。

第一步:阻断容器间默认通信

Docker 默认的 bridge 网络允许同一宿主机上所有容器互访。
我们需要创建自定义网络并手动禁止容器间通信。

创建自定义隔离网络

docker network create --driver bridge --opt com.docker.network.bridge.enable_icc=false secure_net
  • --opt com.docker.network.bridge.enable_icc=false 就是关键,它禁用了同一网络下的容器间通信(ICC, Inter-Container Communication)。

将容器接入隔离网络

创建容器时用 --network secure_net 参数:

docker run -d --name web --network secure_net nginx:alpine

如果容器已运行,先断开再连接(会中断服务,建议新建):

docker network disconnect bridge web
docker network connect secure_net web

这样,web、app、db 等容器之间就不能直接 ping 通或建立 TCP 连接了。
如果确实需要容器间通信(例如 app 连 db),可以再用 --link 或另行创建共享网络。

第二步:限制容器特权能力和系统调用

即使网络隔离了,如果容器以 --privileged 运行或绑定了敏感目录,攻击者仍可能突破。
必须去掉不必要的权限。

安全启动容器

docker run -d --name myapp \
  --security-opt no-new-privileges:true \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  your_image
  • no-new-privileges:禁止容器内进程通过 setuid 等方式提权。
  • --cap-drop=ALL--cap-add=NET_BIND_SERVICE:只保留绑定低端端口的权限,其他能力全部移除。

使用 Seccomp 限制系统调用

Docker 默认有一个 seccomp 策略,但你可以自定义更严格的配置。
这里直接使用 Docker 默认的安全运行参数即可:

docker run --security-opt seccomp=default.json ...

一般默认策略已经够用,但如果你要运行需要某些系统调用的程序(如 ptrace),需单独调整。

第三步:配置宿主机防火墙和内核参数

即使容器隔离了,也可能通过端口映射暴露给外网。
用 iptables 或 firewalld 限制入站和出站。

限制容器访问宿主机内部服务

编辑 /etc/docker/daemon.json(没有就创建),加入:

{
  "iptables": true,
  "ip-forward": true
}

重启 Docker:sudo systemctl restart docker
Docker 会自动管理 iptables 规则,但你可以再加一条自定义规则拒绝容器访问宿主机敏感端口(如 SSH 22):

sudo iptables -I DOCKER-USER -i docker0 -p tcp --dport 22 -j DROP

注意:docker0 是默认桥接网卡,如果用了自定义网络则规则要对应修改。

启用内核安全参数

修改 /etc/sysctl.conf/etc/sysctl.d/99-security.conf

net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.log_martians=1
kernel.kptr_restrict=2
kernel.dmesg_restrict=1

执行 sudo sysctl -p 生效。
这些参数能减少信息泄露和 IP 欺骗风险。

避坑指南:新手最容易踩的雷

  1. 忘记禁用 ICC: 很多人只创建了自定义网络,但没加 --opt enable_icc=false,容器间依然能通信。一定要带上这个参数。
  2. 容器仍用默认 bridge 网络: 默认 bridge 无法禁用 ICC,必须使用自定义网络。
  3. 启动容器带 --privileged 这相当于把宿主机完全开放给容器,绝对不要在生产或家用环境使用。
  4. 端口映射到 0.0.0.0: 如果只在局域网使用,绑定到内网 IP(例如 -p 192.168.1.100:8080:80)而不是 0.0.0.0,避免暴露到公网。
  5. 忽略 Docker 版本: 旧版 Docker 的 iptables 规则管理有缺陷,建议升级到最新稳定版。

效果验证:检查防护是否生效

验证容器间通信是否被阻断

在一个容器中 ping 另一个容器的 IP:

docker exec -it web ping 172.20.0.3

如果返回 Destination Host Unreachable 或长时间无响应,说明网络隔离生效。

验证权限限制

尝试在容器内运行 apt updatemount 等提权命令,应该被拒绝。

验证防火墙规则

从另一台机器扫描宿主机的容器映射端口,或者尝试 ssh 本机,确认规则生效。

使用安全扫描工具

可以用 docker run --network host --rm aquasec/trivy image --severity CRITICAL,HIGH your_image 检查镜像自身漏洞,
但横向渗透防护更多靠网络和权限。

总结

配置家用主机容器的横向渗透防护并不复杂,核心就三步:隔离网络、剥夺特权、收紧防火墙
按照本文步骤操作后,你的容器环境安全性会大幅提升。
后续还可以考虑使用 Docker 的 V2 插件网络(如 Calico)实现更细粒度的安全策略,但对家用场景,以上配置已经足够。
遇到配置报错时,优先检查 Docker 版本和 daemon.json 语法。

分享到:
上一篇
外贸站宝塔面板网站数据库慢查询批量优化脚本
下一篇
跨境独立站宝塔面板服务器家用住宅机器降噪散热改造
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意