家用住宅主机Linux容器网络隔离防内网扫描

家用住宅主机如果直接暴露在内网,很容易被邻居设备、访客设备甚至智能家电扫描到开放端口,进而遭受探测或攻击。
利用 Linux 容器(比如 Docker)将服务隔离在独立网络内,是成本最低且效果明显的方案。
本文从零开始,把准备、操作、避坑和验证一次讲清楚。

环境准备与隔离思路

你需要一台运行 Linux 系统的家用主机(推荐 Ubuntu 22.04 或 Debian 11+),并确保已经安装 Docker 引擎。
本文以 Docker 为例,Podman 用户可参考类似命令。

隔离的核心思路:

  • 创建一个自定义 Docker 网络,不绑定到主机物理网卡。
  • 运行容器时指定该网络,容器只暴露必要端口给宿主机(或指定 IP)。
  • 通过宿主机防火墙 iptables / nftables 限制外部对容器端口的访问。

首先确认 Docker 已安装:

docker --version

如果未安装,参考官方文档用一键脚本安装,注意不要直接从系统源安装旧版本。

创建隔离网络与容器

默认的 bridge 网络会让容器通过宿主机的 Docker0 网桥与外界通信,所有容器都能彼此连通,不符合隔离需求。
我们需要创建自定义网络,并禁止自动发布端口。

1. 创建自定义网络

docker network create --driver bridge --subnet 172.20.0.0/24 --gateway 172.20.0.1 isolated_net

这里指定了一个不常用的私有子网,避免与宿主机现有网络冲突。

2. 运行容器并加入隔离网络

例如运行一个 Nginx 容器:

docker run -d --name web --network isolated_net --restart unless-stopped nginx:alpine

此时容器仅在网桥内部有 IP(如 172.20.0.2),宿主机外部无法直接访问。

3. 按需暴露端口

如果确实需要从外部访问服务,使用 -p 映射到宿主机指定端口,例如:

docker run -d --name web --network isolated_net -p 127.0.0.1:8080:80 nginx:alpine

注意绑定到 127.0.0.1,这样只有宿主机本机才能访问 8080,内网其他设备无法直接扫到。
如果必须对内网开放,至少用防火墙限制来源 IP。

配置防火墙与默认拒绝策略

光靠容器网络隔离还不够,宿主机上的 iptables 规则也会影响。
Docker 默认会修改防火墙规则,允许容器出网。
为了防内网扫描,需要单独设置。

以下使用 ufw(Uncomplicated Firewall)简化操作,适合新手:

# 安装 ufw(如果未安装)
sudo apt install ufw -y

# 默认拒绝入站,允许出站
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 放行 SSH(防止被锁)
sudo ufw allow ssh

# 如果容器端口映射到宿主机,例如 8080,允许本机访问
sudo ufw allow from 127.0.0.1 to any port 8080 comment '容器 web 映射'

# 启用防火墙
sudo ufw enable
sudo ufw status verbose

注意:启用 ufw 后,Docker 的端口映射规则依然生效,但 ufw 会阻断外部对宿主机端口的访问。
这样即使内网扫描仪扫到宿主机的 8080 端口,也会被 ufw 拒绝。

如果使用 iptables 直接管理,可增加一条拒绝所有来自容器网络外部的输入规则,但新手更推荐 ufw。

常见问题与避坑指南

  • 为什么容器能访问外网,但外部扫描不到? 因为 Docker 默认开启了 IP 转发和 NAT,容器出网不受影响。入站靠防火墙规则拦截,只要物理网卡上的端口没有被放行,外网就扫不到。
  • 容器之间的通讯能否控制? 自定义网络默认允许同网络内容器互通。如需进一步隔离,使用 --internal 选项创建完全隔离网络(没有外网访问能力)。
  • 重启后配置是否持久? Docker 网络和容器启动参数会持久化,ufw 规则也会重启后生效。注意不要手动修改 /etc/docker/daemon.json 中的 iptables 选项为 false,否则容器端口映射会失效。
  • 被扫描到宿主机的其他端口(如 22)怎么办? 确保 SSH 端口只监听内网或使用密钥登录,并且 ufw 限制了来源 IP。

效果验证

完成配置后,验证隔离是否生效:

1. 容器内网络测试

docker exec -it web sh
/ # ping 8.8.8.8          # 应能通
/ # ping 192.168.1.1      # 宿主机局域网 IP,应能通
/ # exit

2. 从另一台内网设备扫描宿主机 IP

使用 nmap 扫描宿主机的开放端口:

nmap -p 1-65535 192.168.1.100   # 替换为宿主机实际 IP

预期结果:除了 22(SSH)和已明确放行的端口(如 8080),其余端口应显示 filtered(被过滤)或 closed。
如果看到某个容器映射端口显示 open,检查是否忘记绑定 127.0.0.1 或 ufw 规则未生效。

3. 确认容器无法被直接访问

尝试直接在浏览器访问 http://宿主机IP:8080,如果绑定的是 127.0.0.1,则无法访问。
只有从宿主机本机 http://127.0.0.1:8080 才能打开。

通过以上步骤,家用住宅主机的容器服务就能有效防内网扫描。
后续如果你需要跑更多服务,可以沿用同一个隔离网络,或者按业务拆分成不同的网络。
遇到异常时,先回看避坑部分的说明,再检查防火墙状态。

分享到:
上一篇
外贸站宝塔面板服务器频繁宕机故障根因排查
下一篇
跨境独立站宝塔面板多站点防跨站入侵加固
1
系统公告

机房迁移升级通知

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