如何在OPNsense中配置防火墙规则

本文摘要在配置防火墙规则之前,首先需要花时间思考通过构建防火墙想要达成的目标。例如,是否需要通过 VLAN 将网络划分为多个逻辑子网?在网络内部与外部之间,允许或阻止哪些服务?内部设备应划入哪个 VLAN?如何在不过度增加使用难度的前提下,尽可能地限制网络流量?一、默认的 OPNsense 防火墙配置安装 OPNsense 时设置 LAN/WAN 接口,系统会默认自动为 LAN 接口的 IPv4 和 IP...

在配置防火墙规则之前,首先需要花时间思考通过构建防火墙想要达成的目标。例如,是否需要通过 VLAN 将网络划分为多个逻辑子网?在网络内部与外部之间,允许或阻止哪些服务?内部设备应划入哪个 VLAN?如何在不过度增加使用难度的前提下,尽可能地限制网络流量?

一、默认的 OPNsense 防火墙配置

安装 OPNsense 时设置 LAN/WAN 接口,系统会默认自动为 LAN 接口的 IPv4 和 IPv6 创建 Web 管理防锁定规则以及“允许所有”规则。这些规则可以防止将自己锁在防火墙的管理页面之外,并允许网络不受限制地访问互联网。默认的防火墙配置让 OPNsense 的行为类似一台典型的消费级路由器:将设备直接插入路由器(或连接到路由器的交换机),它们就能立即正常工作。如果“允许所有”规则被禁用或删除,除访问 OPNsense Web 管理页面之外,所有到互联网以及其他本地网络的流量都将被阻止。

查看默认规则,请前往 Firewall > Rules > LAN 页面:

默认防火墙规则

二、规则处理顺序

默认情况下,防火墙规则的处理方式是:无规则 = 阻止所有流量。规则从列表顶部向底部顺序处理,因此列表中规则的顺序至关重要。当网络流量匹配到任意一条规则(无论是“允许”还是“阻止”)时,后续规则将不再被处理。第一个匹配的规则立即生效,之后的所有规则都会被忽略。这意味着你必须合理规划规则顺序,不能随意添加并期望它们按预期工作。

创建防火墙规则时,应把最具体的规则放在列表顶部,最通用的规则放在列表底部。这样,更具体的网络流量会先被允许或拒绝,而不匹配任何具体规则的流量则会被更宽泛的规则处理。这类宽泛的规则就像是“全捕获”规则,可以允许或拒绝所有其他未被明确指定的流量。在限制性更强的环境中,“拒绝所有其他”规则可能会被放在底部;而在普通家庭环境中,“允许所有其他”规则可能更合适,因为其限制性和安全性更低。

三、建立规则

下面演示一些规则的建立过程。

(一) 仅允许特定的 DNS 服务器

为提高安全性,首先应创建仅允许防火墙指定 DNS 服务器的规则。这样可以控制网络中使用的 DNS 服务器,防止用户和设备使用其他外部 DNS 服务器或在网络中自行运行 DNS 服务器。如果你希望运行自己的 DNS 服务器,或使用提供内容过滤/阻止功能的外部 DNS 服务器,这尤为重要。这些 DNS 防火墙规则可以防止用户/设备绕开为网络实施的过滤或阻止行为。

本例使用 LAN 接口,即 OPNsense 中内部局域网的默认接口,后续所有规则示例也同样适用。

添加以下两条规则来保护 DNS 服务器:

1. 允许内部 DNS 服务器

允许指定 DNS 服务器的规则

在一般的网络配置中,DNS 地址可能与网关地址不同。本例假设二者相同,因为我们在 OPNsense 中配置使用自身的 DNS 服务,而不是外部 DNS 服务器。接口的 IP 地址也同时作为该网络上设备的网关地址。查看每个设备的 DHCP 信息时会看到,网关服务器和 DNS 服务器均为 LAN 地址。在本示例中,LAN 地址为 192.168.1.1。选择 “pass (通过)” 作为允许规则。源地址和源端口均设为 “any”,以捕获所有流向指定目标的 LAN 接口流量。目标地址选择 LAN 地址,目标端口选择 DNS 服务使用的 53 端口。

2. 阻止任意外部 DNS 服务器

阻止外部 DNS 服务器的规则

选择 “Block (阻止)” 作为阻止规则。源地址和端口设为 LAN 网络上的任意设备,目标为 any,端口选择 53 (DNS)。

注意,由于规则处理顺序,任何访问指定 DNS 服务器的尝试都会被“允许”规则匹配并成功放行,该请求的规则处理随即停止。但如果设备尝试访问外部 DNS 服务器,“允许”规则无法匹配,请求将被下面的“阻止”规则命中,从而拒绝对该 DNS 服务器的访问。

最终的规则列表如下:

防火墙规则列表

在 LAN 接口中,不能将任何规则移到防锁定规则之上,但将它放在防锁定规则之下不会有任何问题。第一条规则允许访问本地 DNS 服务器,第二条规则阻止对所有其他 DNS 服务器的访问,无论它们是本地还是远程的。

(二) 允许访问接口网关地址

当存在多个 VLAN 或接口时,除少数明确允许的访问外,应阻止对其他网络的访问。本例允许每个 VLAN 或接口内的网络流量访问自身的网关 IP 地址,该地址与接口分配的 IP 地址相同。本例中的 VLAN 标识为 IOT。

添加如下规则以允许访问接口网关地址:

允许访问接口网关地址

(三) 允许跨 VLAN / 接口互访

如果使用了 VLAN 或具有不同子网的多个接口,并且正在运行本地服务器(例如 Plex Media Server),可能需要让其他网络上的设备能够访问该服务器。要实现这一点,需要在客户端设备所在的接口添加一条规则,允许访问服务端口 32400(Plex 的默认端口)。源为客户端接口所在的网络,目标为服务器的 IP 地址,端口为 32400。

允许跨 VLAN 访问 Plex 的规则

该规则允许 IOT 网络上的任意设备访问地址为 192.168.10.10、端口为 32400 的 Plex Media Server 服务器。Plex Media Server 与 IOT 网络位于不同的 VLAN。

下面的例子是运行 WordPress 的 Web 服务器,服务器地址为 192.168.10.10,站点通过 443 端口访问。

允许跨 VLAN 访问 Web 服务器的规则

(四) 阻止访问其他 VLAN

在定义好跨 VLAN 对本地网络服务的所有允许访问规则之后,还可以使用规则来阻止对其他 VLAN 的访问。默认情况下,除非在规则列表底部有一条“全部允许”规则,否则对其他网络的访问都将被禁止。如果需要显式阻止对其他 VLAN 的访问,可以先创建一个包含所有其他 VLAN 私有 IP 地址范围的别名,然后添加阻止规则来禁止 VLAN 之间的互访。

导航到 Firewall > Aliases,添加新别名,并加入其他 VLAN 的 IP 范围,如下图所示:

创建私有网络别名

然后添加阻止规则,目标选择上面创建的 IP 范围别名:

阻止访问其他私有网络

如果需要允许特定设备或 VLAN 网络之间的通信,则必须在这条“阻止所有私有 IP”规则的上方创建对应的“允许”规则,否则流量在到达“允许”规则之前就会被丢弃。

(五) “全部允许”规则

对于一般的网络使用场景,在内部接口的规则列表底部保留一条“全部允许”规则是合理的。原因是该规则将允许所有未被特定阻止的流量通过防火墙,无论目标位于本地网络还是互联网。这样的规则代表了大多数用户的正常使用需求。

如果希望防火墙执行更严格的控制,请确认所有应用所需的出站端口,以满足特定的使用需求,并阻止其他不必要的访问。

觉得内容不错?我要

评论 暂无评论
暂无评论,快来抢沙发吧~