你是不是也想过,在家里那台24小时不关机的PVE上,搭一个《我的世界》或《幻兽帕鲁》服务器,叫上小伙伴们一起来玩?或者,想拥有一个自己的博客网站,分享你的生活?

但你可能马上就会担心:把服务开在家里,直接暴露给外网,万一被黑客攻击了,我家里所有的设备,比如存着重要照片的NAS、我爸妈正在上网的电脑,会不会都有危险?

很多人告诉你,要解决这个问题,得花大价钱买个企业级路由器,还要学习让人头疼的“VLAN划分”。

实际上Proxmox VE已经为提供了一套完整的解决方案。

以下教程实现不依赖任何特殊的网络硬件或复杂的VLAN划分,仅利用PVE内置的防火墙,为一台虚拟机配置一套严谨而灵活的网络安全策略。最终目标是让这台虚拟机达到以下理想状态:

  • ✅ 对外服务通畅:能正常访问互联网,并接受您在路由器上设置的端口映射流量。

  • ✅ 对内壁垒森严:被严格禁止主动访问您局域网内的任何其他设备(包括路由器后台、NAS、其他电脑等)。

通过以下配置,就能够安心地将服务暴露于公网,同时最大限度地保障家庭内网的安全,防止潜在的横向攻击。


一、 准备工作:全局防火墙配置

在对单个虚拟机进行配置前,我们需要确保PVE的全局防火墙功能已经就绪。这些操作通常只需要在数据中心级别设置一次即可。

1. 启用防火墙总开关

首先,我们需要激活PVE的防火墙功能。

  • 位置: 在PVE网页管理后台,点击左侧最顶端的 数据中心

  • 操作:

    1. 选择 防火墙 标签页。

    2. 再选择 选项 子标签页。

    3. 找到 防火墙 这一项,如果它不是“是”,请双击并将其设置为 是(Yes)

    4. 同时 输入策略 (Input Policy) 会自动设置为 DROP。PVE有内置规则,并不会影响通过 8006 端口访问网页后台或通过 22 端口进行SSH连接。

2. 创建局域网“别名”(Alias)

为了在后续规则中方便地引用我们的整个内网网段,我们为其创建一个简单的别名。

  • 位置: 数据中心 -> 防火墙 -> 别名

  • 操作:

    1. 点击 添加 按钮。

    2. 在弹出的窗口中填写以下信息:

      • 名称 (Name): lan_net

      • IP/CIDR: 10.10.10.0/24 (请务必根据你自己的实际内网网段进行修改,例如 192.168.1.0/24)

      • 备注 (Comment): 我的局域网

    3. 点击 添加


二、 配置:使用“安全群组”创建规则模板

为了方便地将同一套规则应用到多个虚拟机,使用“安全群组”功能来创建一个可复用的规则模板。

1. 创建安全群组

  • 位置: 数据中心 -> 防火墙 -> 安全群组

  • 操作:

    1. 点击 创建

    2. 名称: dmz_server (可自由修改)

    3. 备注: 对外隔离服务器通用规则

    4. 点击 创建

2. 向安全群组中添加通用规则

注意: 规则的顺序至关重要!!

PVE防火墙会从上到下匹配规则,一旦匹配成功,后续规则将被忽略。如果添加后顺序不对,可以用鼠标拖拽调整。

  • 操作:安全群组列表中,单击刚刚创建的dmz_server,然后在右侧的规则区域点击添加

  • 出站规则 (Outbound Rules)

顺序

目的

方向

操作

协议

目标

目标端口

备注

1

允许DHCP

out

ACCEPT

udp

67

允许DHCP请求

2

允许DNS查询

out

ACCEPT

udp

53

允许访问公共DNS

3

禁止访问内网

out

REJECT

lan_net

禁止访问内网

4

允许访问外网

out

ACCEPT

允许访问互联网

  • 入站规则 (Inbound Rules)

顺序

目的

方向

操作

协议

目标端口

备注

5

允许内网访问

in

ACCEPT

lan_net

允许内网所有设备访问

最终创建完毕效果:


三、 应用与个性化:为虚拟机配置防火墙

现在,我们可以将这套规则应用到任何需要隔离的虚拟机上了。

1. 在虚拟机上启用防火墙

  • 位置: 选择目标VM -> 硬件 -> 网络设备(net0)

  • 操作: 双击网卡,勾选防火墙复选框

2. 设置虚拟机默认防火墙策略

  • 位置: 选择目标VM -> 防火墙 -> 选项

  • 操作:输入策略输出策略 均设置为 DROP

  • 防火墙状态:是

3. 应用安全群组

  • 位置: 选择目标VM -> 防火墙 -> 规则

  • 操作:

    1. 点击 插入: 安全群组 按钮。

    2. 在弹出的窗口中,选择我们创建的 dmz_server 群组。

    3. 确保 启用 复选框被勾选,然后点击OK

4. 添加个性化端口映射规则

这是最后一步,只为这台虚拟机开放它需要对外提供服务的特定端口。

在路由器端口映射后

  • 位置: 选择目标VM -> 防火墙 -> 规则 -> 点击 添加

  • 示例 (为Web服务开放80):

    • 方向: in

    • 操作: ACCEPT

    • 协议: tcp

    • 目标端口: 80

    • 备注: 允许外网访问Web服务

    • 日志级别: info (可选,便于观察谁在访问服务)

      启用

      方向

      操作

      协议

      目标端口

      备注 (示例)

      日志

      in

      ACCEPT

      tcp

      80

      允许外网访问WEB

      info


至此,已经为虚拟机建立安全防护体系。既能安全地对外提供服务,又不会对内网环境构成威胁。

  • Q: 我按教程设置了,为什么虚拟机还是上不了网?

    • A: 请检查您的“出站规则”顺序是否正确,特别是“禁止访问内网”的规则有没有错误地排在了“允许访问外网”的前面。另外,也要检查虚拟机的DNS设置是否正确。

  • Q: 为什么我单独添加的端口映射规则不生效?

    • A: 请确认您在PVE防火墙里填写的“目标端口”是您服务的内部端口,而不是您在路由器上设置的外部端口

效果

正常获取DHCP分配IP,无法ping通,访问通路由器后台,NAS等设备

扫描全部网段,均无法出去。

效果2:内网其他机器访问该虚拟机一切正常。

效果3:端口映射正常访问。