我会尽我所能描述我在这里真正想要做的事情,但首先是设置。我有一个完整的内部网络,它与一个管理的第 2 层或第 3 层网络交换机连接在一起,并且有许多设备在该网络内进行通信,并且我想在网络内托管的 Proxmox VE 集群上运行 Ubuntu Server 22.04 的面向外部的服务器(游戏服务器,例如 minecraft 等)。我已经让这一切正常工作,一切都很好,但我看到来自未知 IP 的尝试试图进入网络。他们的防火墙已被指示拒绝除两个端口之外的所有流量 - 一个用于 SSH,一个用于服务器本身。用于服务器本身的端口是唯一转发到互联网的端口,并且它是设备特定的,因此这些尝试肯定来自游戏服务器端口。我有 Xfinity,所以这些尝试通常会被阻止 - 但我不想仅仅相信这一点。
我希望将这些虚拟机与我的主网络隔离开来 - 我在密码管理器中使用长而复杂的密码,甚至更长的密码等等,但密码的作用有限。我希望它们能够通过互联网进行通信,我希望能够加入并与朋友一起在这些服务器上玩游戏,但我不希望服务器在我的网络被攻破时访问我的网络。能够通过 SSH 访问它们对于服务器管理来说会很好,但目前我认为这是一种奢侈。到目前为止,我读到的所有内容都告诉我这是可能的,但取决于我信任的信息,它要么非常简单,要么非常复杂。
我正在查看的方法来自Reddit 帖子,其中指出我可以使用 pfSense 创建虚拟机(我可能会尝试使用 OPNsense 来执行此操作)并将其用作内部路由器,为其提供两个虚拟 NIC。第一个 vNIC 将连接到主 vSwitch(具有内部网络访问权限,连接到物理 NIC),辅助 vNIC 将连接到辅助 vSwitch(无内部网络访问权限,不连接到任何物理 NIC)。使用 pfSense,您可以将 WAN 接口设置为使用主 vSwitch,将 LAN 接口设置为使用辅助 vSwitch。您可以将其配置为阻止所有流量通过,但我只需要它来阻止服务器获得对我的其他设备的内部网络访问权限。
在Proxmox 论坛帖子中可以看到一种方法(有点像),这也是我所寻找的方法,但再次说明这不是我真正想要的。无论如何,我都尝试过这种方法,但甚至很难让它发挥作用。
我想要隔离的服务器需要将特定端口转发到互联网。这就是服务器实际通信的方式 - 而这个过程的最终步骤将是端口重定向,但这不是我准备解决的问题。端口转发使机器易受攻击,如果机器受到攻击,我希望它与我的网络完全隔离。我的 Xfinity 路由器允许将端口转发隔离到特定设备,并且它确实将这些虚拟机视为特定设备,因此我相信该端口不会对其他设备开放。
有人有可行的方法来做到这一点吗?总之,我想要...
- 面向互联网的游戏服务器虚拟机
- 与我的内部 LAN 网络隔离,但是
- 仍然可以访问互联网
- (奖励项目以某种方式/形式保留 SSH 访问权限,因此我不必手动输入 20 多个字符的随机密码)
如果需要任何其他信息,请告诉我!
设置路由器虚拟机,然后创建防火墙规则,允许数据包进入互联网但不允许数据包进入“主” LAN 子网。
但我猜测 Xfinity 路由器不支持“静态路由”配置,这意味着您无法以常规方式定义从LAN 和 Internet 到服务器的路径。
如果是这种情况,它将使到“服务器”子网的入站 HTTP 和 SSH 设置起来有些烦人 - 仍然是可能的,但这意味着您需要有两层端口转发规则; 一次从 Xfinity 路由器到 pfSense,然后第二次从 pfSense 到真实服务器。
您无法避免这种情况。防火墙只能阻止流量越过防火墙,但不能完全阻止流量到达防火墙 - 即您无法拒绝接收数据包。因此,只要您在互联网上有一个 IP 地址,您就会成为许多僵尸网络和“研究人员”的接收端,他们会攻击每个 IP 地址。
不过,您的 Xfinity 路由器在这里并没有做任何特别的事情——几乎任何将防火墙设置为“默认阻止”的路由器都会得到相同的结果。
我很确定你的端口完全颠倒了——连接到 SSH 服务的初始数据包永远不会来自SSH或游戏服务器端口,而是来自SSH端口或游戏服务器端口;同样,“端口转发”通常处理入站数据包(来自互联网,而不是到互联网)——你确实需要把这部分弄直,作为配置防火墙的先决条件。
您可以使用相同类型的配置来实现此目的,只需将防火墙规则缩小即可。也就是说,您将拥有一个阻止从 到
game_server_address
的数据包的数据包过滤规则lan_subnet
,以及一个允许所有其他数据包的规则。即:(对于 Linux iptables 样式,它将完全按照这个顺序,因为第一个匹配获胜;而 pfSense/OpnSense 'pf' 样式通常是相反的。上次我使用 pfSense 时,我习惯将规则标记为“快速”,以便第一个匹配的规则获胜。)
通常,您只需要在第一个数据包去的方向上创建规则,而“回复”数据包将被自动允许 - 例如,规则 1 对来自服务器的回复没有影响,因此您不需要单独的规则来允许 src-port = 22。