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

在配置防火墙的规则之前,应该做的第一件事就是花一些时间思考通过构建自己的防火墙要实现的目标。例如,我想将网络分成几个逻辑网络(通过VLAN),那么在网络内部和网络外部阻止或允许哪些服务?内部网络的设备应该放入哪个VLAN?如何在不增加网络使用难度的情况下限制尽可能多的网络流量?

一、默认的OPNsense防火墙配置

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

查看默认规则,请转到Firewall > Rules > LAN页面:

默认防火墙规则

二、规则处理顺序

默认情况下,防火墙规则处理旨在阻止所有流量:无规则=阻止所有流量。规则从列表的顶部到底部进行处理,因此列表中规则的顺序很重要。当网络流量匹配任意规则(无论是“允许”规则还是“阻止”规则)时,将不处理后续规则。执行第一个匹配的规则,后面所有规则将被忽略。这意味着你必须对规则的正确顺序进行一些考虑,而不能简单地随机添加它们并期望它们按预期工作。

创建防火墙规则时,应该考虑将最具体的规则放在列表顶部,将最一般的规则放在列表底部。当这样做时,首先允许或拒绝更特定的网络流量,而与任意特定规则都不匹配的网络流量将由更广泛的规则处理。较宽泛的规则就像“全部捕获”规则一样,可以允许或拒绝所有其他未指定的网络流量。在限制性更强的环境中,“拒绝所有其他”规则可能位于底部,而在一般的家庭环境中,“允许所有其他”规则可能更合适,因为它的限制性和安全性较小。

三、建立规则

下面我们来演示建立一些规则。

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

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

在本示例中我们使用LAN接口,这是OPNsense中内部LAN网络的默认接口。这适用于本文中的所有规则示例。

要添加DNS服务器保护,请添加以下两个规则:

1、允许内部DNS服务器

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

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

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

这里要注意,由于规则处理顺序的原因,“允许”规则中任意访问指定DNS服务器的尝试都将成功,并且该请求的规则处理将停止。但是,如果设备尝试访问外部DNS服务器,则它将被“阻止”规则执行,因为“允许”规则无法通过,从而拒绝对该DNS服务器的访问。

规则列表应如下所示:

防火墙规则

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

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

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

要允许访问接口的网关IP地址,请添加如下图所示规则:

防火墙规则

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

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

防火墙规则

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

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

防火墙规则

(四)、阻止访问其他VLAN

在定义了跨VLAN对所有本地网络服务的访问权限后,我们也可以使用规则来阻止对其他VLAN的访问。默认情况下,除非在规则列表的底部有一个“全部允许”的规则,否则将禁止访问其他网络。如果需要阻止对其他VLAN的访问,可以创建一个包含所有其他VLAN私有IP地址范围的别名,然后添加阻止规则来实现禁止VLAN之前互相访问。

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

专用网络别名

然后添加阻止规则,如下图所示,目标为上面添加的IP范围别名:

防火墙规则

如果需要允许特定设备或VLAN网络的通信,则必须在这条(“block all private IPs)” 规则上方创建“允许”规则。如果不在这条规则之上被执行,则流量在执行到“允许”规则之前会被丢弃。

(五)、“全部允许”规则

对于一般网络的使用,在内部接口的规则列表的底部存在“全部允许”规则是合理的。原因是此规则将允许所有未被特别阻止的流量通过防火墙,包括本地网络或Internet上的流量,这样的规则代表了大多数用户的正常使用需求。

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