pfSense book之防火墙(二)

文章目录

配置防火墙规则

在防火墙>规则策略下配置防火墙规则时,有许多选项可用于控制流量的匹配和控制方式。 本节列出了大部分选项,因为pfsense book是以pfsense2.31来进行示例的,与现在pfsense2.41可能有些许不同。

动作

该选项指定规则是否通过阻止拒绝流量。

通过: 符合此规则的数据包将被允许通过防火墙。 如果为规则启用了状态跟踪,则会创建一个允许相关返回流量回传的状态表条目。

阻止: 符合此规则的数据包将被丢弃。

拒绝: 匹配这个规则的数据包将被丢弃,对于支持的协议,一条消息将被发送回始发者,表明连接被拒绝。

禁用

要禁用规则而不将其从规则列表中删除,请选中此框。 它仍将显示在防火墙规则页面中,但该规则将显示为灰色以提示其禁用状态。

接口

“接口”下拉菜单指定接收由此规则控制的流量的接口。 请记住,在接口和组选项卡规则中,流量仅在启动流量的接口上被过滤。 从局域网发起的流量指向Internet或防火墙上的任何其他接口由LAN规则集过滤。

TCP/IP 版本

提示规则应用于IPv4,IPv6或同时应用IPv4 + IPv6流量。 这些规则将只匹配正确协议的数据包并采取动作。 可以使用包含这两种IP地址的别名,并且该规则将仅匹配来自正确协议的地址。

协议

规则将匹配的协议。 这些选项大部分都是不言自明的。 TCP / UDP将同时匹配TCP和UDP流量。 指定ICMP将显示一个额外的下拉框来选择ICMP类型。 其他几个常见的协议也是可用的。

注意

这个字段默认为新的规则的TCP,因为它是一个通用的默认值,它将显示该协议的预期字段。 要使规则适用于任何协议,请将此字段更改为any。 创建新规则最常见的错误之一是意外创建TCP规则,然后无法传递其他非TCP流量,如ping,DNS等。

ICMP 类型

选择ICMP作为协议时,该下拉列表包含所有可能的ICMP类型。 通过ICMP时,最好的做法是只在可行的时候通过所需的类型。 最常见的用例是只传递一种回应请求,允许ICMP ping通。

提示

从历史上看,ICMP的声誉很差,但通常是有益的。 在允许ICMP时,允许任何ICMP类型通常是可以接受的。

源地址

该字段指定将匹配此规则的源IP地址,子网或别名。

源地址的下拉框允许几种不同的预定义类型的源地址:

Any: 匹配任何地址。

单个主机或别名:匹配一个IP地址或别名。 当它处于活动状态时,可以在“源地址”字段中键入一个别名。

网络:使用IP地址和子网掩码来匹配一个地址范围。

PPPoE客户端: 如果启用了PPPoE服务器,则匹配来自PPPoE服务器的客户端地址范围的流量。

L2TP客户端: 如果启用了L2TP服务器,则将匹配来自L2TP服务器的客户端地址范围流量。

接口网络:防火墙上的每个接口都有此列表中的条目。 这种源类型准确指定了该接口的子网,包括与定义的接口子网不同的任何IP别名VIP子网。

接口地址:防火墙上的每个接口都有此列表中的条目。这些源类型指定在该接口上配置的IP地址。

警告

源网络或目的网络的WAN Net选项仅表示WAN接口的子网。 这并不意味着“互联网”或任何远程主机。

对于匹配TCP和或UDP的规则,也可以通过点击 显示高级设置指定源端口。 源端口隐藏在“显示高级”按钮后面,因为通常源端口必须保持设置为任意端口,因为TCP和UDP连接源于临时端口范围内的随机端口(在1024到65535之间,所使用的确切范围取决于连接的操作系统和操作系统版本)。 源端口几乎不会与目标端口相同,也不应该像这样配置,除非正在使用的应用程序已知使用这种非典型行为。 将源端口定义为从1024到65535的范围也是安全的。

选择反转匹配将取消匹配,以便除源值之外的所有通信都将触发规则。

目标地址

该字段指定将匹配此规则的目标IP地址,子网或别名。

对于指定TCP和或UDP的规则,此处还指定了目标端口,端口范围或别名。 与源不同,在许多情况下配置目的端口是必需的,因为它比使用任何端口更安全,并且通常基于协议预先知道目的端口。 下拉列表中提供了许多常用端口值,或者选择(其他)手动输入值或使用端口别名。

提示

要指定连续范围的端口,请在“”部分输入较低的端口,在“”部分输入较高的端口值。

日志

此框决定是否将符合此规则的数据包记录到防火墙日志中。

描述

在这里输入描述以供参考。 这是可选的,不影响规则的功能。 最好的做法是输入描述规则目的的文字。 最大长度是52个字符。

高级选项

页面的这一部分已经隐藏了不太可能被需要或者具有对新用户混淆的功能的选项。 单击显示高级选项。 如果页面的这一部分中的选项已经设置,则将来在加载规则时会出现。

源操作系统

pf和pfSense更独特的功能之一就是能够通过对连接的操作系统进行过滤。 对于TCP规则,pf启用被动操作系统指纹(“p0f”),允许规则根据启动TCP连接的操作系统进行匹配。 pf的pf功能通过将启动TCP连接的TCP SYN数据包的特征与指纹文件进行比较来确定正在使用的操作系统。 请注意,可以将操作系统的指纹更改为另一个操作系统,尤其是对于开放源代码操作系统,如BSD和Linux。 这并不容易,但是如果一个网络包含技术熟练的用户,并且具有对系统的管理员或根级访问权限,那么这是可能的。

区分服务代码点

区分服务代码点是应用程序在数据包内部指示如何在路径沿着路径转发时更喜欢路由器来处理其流量的一种方式。这最常见的用途是服务质量或流量整形的目的。冗长的名称通常缩写为Diffserv Code Point或简写为DSCP,有时也称为TOS字段。

生成数据包的程序或设备(例如Asterisk通过它的tos_sip和tos_audioconfiguration参数)将设置数据包中的DSCP字段,然后由防火墙和其他临时路由器来匹配,排队或作用于数据包。

要在防火墙中匹配这些参数,请使用与始发设备设置的值匹配的“区分服务代码点”下拉条目。有很多选项,每个都有特定的通行类型的特殊含义。请查阅相关设备的文档以获取有关信息。

DSCP的缺点是它假定路由器支持或在现场采取行动,这可能是也可能不是。不同的路由器可能会以无意或不匹配的方式处理相同的DSCP值。更糟糕的是,有些路由器在转发数据包时会完全清除数据包中的DSCP字段。此外,pf匹配流量的方式,必须在创建状态的连接的第一个数据包上设置DSCP值,因为每个数据包在创建状态后都不会被单独检查。

注意

该选项只读取和匹配DSCP值。 它不会在数据包中设置值。

IP 选项

选中此框将允许具有定义的IP选项的数据包通过。 默认情况下,pf会阻止所有设置了IP选项的数据包,以阻止操作系统指纹等。 选中此框可传递包含IP选项的IGMP或其他多播通信。

禁用应答

防火墙在默认情况下将应答关键字添加到WAN类型接口上的规则,以确保进入WAN的流量也将通过同一个WAN离开。 在某些情况下,这种行为是不受欢迎的,例如某些流量通过WAN接口上的单独防火墙/路由器进行路由时。 在这些情况下,请选中此选项以仅对符合此规则的流量禁用应答,而不是全局禁用应答。

Tag and Tagged

Tag和Tagged字段与浮动规则一起使用非常有用,因此防火墙可以在进入接口时使用特定字符串标记数据包,然后使用浮动规则在匹配的数据包上执行不同的操作。

最大状态条目

此选项限制此规则允许的最大连接数(总数)。 如果更多连接符合连接限制时的此规则,则此规则将在规则执行中跳过。 如果以后的规则匹配,则流量将应用该规则的操作,否则将触发默认的拒绝规则。 一旦该规则允许的连接数量下降到低于此连接限制,流量可以再次匹配此规则。

源主机最大数量

此选项指定可为此规则同时连接多少个源IP地址。 每个源IP地址允许不限数量的连接,但允许的不同源IP地址的总数限制为该值。

最大连接数

要根据每个主机的连接限制访问,请使用此设置。 该值可以将规则限制为每个源主机的特定连接数(例如10),而不是特定的全局连接总数。 该选项控制每个主机匹配规则的完全建立的(完成的握手)连接的数量。 此选项仅适用于TCP连接。

每个主机最大状态记录

此设置与上述建立的计数类似,但仅检查状态条目,而不是跟踪是否成功建立连接。

最大连接数/每秒

这种速率限制方法有助于确保较高的TCP连接速率不会使服务器或防火墙上的状态表过载。 例如,可以限制传入邮件服务器的连接,减少垃圾邮件过载的负担。 它也可以用于出站流量规则来设置限制,防止任何单个机器加载防火墙上的状态表或进行太多快速连接,这是病毒常见的行为。 可以为该规则配置连接数量和该时间段的秒数。 在给定的时间范围内超过指定连接数的任何IP地址将被防火墙阻止一个小时。 此选项仅适用于TCP连接。

状态超时(秒)

使用此字段,可以定义匹配此规则的流量的状态超时,覆盖默认状态超时。 当连接闲置了这段时间时,任何不活动的连接都将被关闭。 默认状态超时取决于正在使用的防火墙优化算法。

注意

此选项仅控制入站方向的流量,所以它本身并不是很有用。 匹配连接的出站流量仍将具有默认状态超时。 要正确使用此设置,需要在具有类似状态超时设置的流量占用的出站路径中使用匹配的浮动规则。

TCP 标识

默认情况下,TCP的新传递规则只检查要设置的TCP SYN标识,不包括可能的SYN和ACK集合。 为了解决更复杂的情况,例如解决非对称路由或其他非传统的流量组合,请使用这组控件来更改标识与防火墙规则匹配的方式。

第一行控制哪些标识必须设置为匹配规则。 第二行定义将在数据包上查询的标识列表以查找匹配。

最常用的标志的含义是:

SYN: 同步序列号。 指示新的连接尝试。
ACK: 指示数据的确认。 这些是应答,让发件人知道数据收到OK。
FIN: 表示发件人没有更多的数据,关闭连接。
RST: 连接重置。 这个标志响应在没有监听守护进程的端口上打开一个连接的请求时被设置。 也可以通过防火墙软件来设置,以避免不良连接。
PSH: 指示应通过将数据传递给应用程序来推送或刷新数据,包括数据包中的数据。
URG: 表示紧急字段是重要的,并且该数据包应该在不紧急的数据之前被发送。

要允许设置了任何标志的TCP,请选中任何标志。

状态类型

在pfSense中有三种状态跟踪选项,可以按规则指定:

Keep:

选择后,防火墙将创建并维护允许通信的状态表条目。 这是默认的,在大多数情况下是最好的选择。

Sloppy State:

这是使用一种不太严格的手段来保持状态,用于非对称路由的场景。 当防火墙只能看到连接的一半流量时,缺省状态保持的有效性检查将失败,流量将被阻止。 防止某些类型***的pf机制在审查不严格的状态时不起作用。

Synproxy:

此选项会导致pfSense代理传入的TCP连接。 TCP连接以三次握手开始。 TCP连接的第一个数据包是来自源的SYN,它从目的地引发SYN ACK响应,然后从源返回ACK以完成握手。正常情况下,防火墙后面的主机会自行处理,但是synproxy状态会让防火墙完成这个握手。这有助于防止一种类型的拒绝服务***,SYN泛滥。这通常仅用于WAN接口上的规则。目前这种***类型最好是在目标操作系统级别进行处理,因为每个现代操作系统都包含独立处理这种***的能力。由于防火墙无法知道后端主机支持哪些TCP扩展,因此在使用synproxy状态时,它将宣告不支持TCP扩展。这意味着使用synproxy状态创建的连接不会使用窗口缩放,SACK,也不会使用大多数情况下会导致性能显着下降的时间戳。将TCP端口打开到不能很好地处理网络滥用的主机时非常有用,其中最重要的性能不是问题。

None:

这个选项不会保持这个规则的状态。 这只是在一些高度专业化的高级场景下才需要的,本书没有涉及这些内容,因为它们非常罕见。

注意

在这里设置“None”只影响入站方向的流量,所以它本身并不是很有用,因为在出站方向上仍然会创建一个状态。 它必须与出站方向上的浮动规则配对,该规则也具有相同的选项。

不同步XML-RPC

选中此框可防止此规则通过XMLRPC同步到其他高可用性集群成员。 这包含在高可用性中。 这不会阻止辅助节点上的规则被主节点覆盖。

VLAN优先级(匹配和设置)

802.1p(也称为IEEE P802.1p或优先级代码点)是一种匹配和标记具有特定服务质量优先级的数据包的方法。 与DSCP不同,802.1p在第2层使用VLAN运行。 但是,与DSCP一样,上游路由器也必须支持802.1p才能有用。

本节有两个选项。 第一个将匹配一个802.1p字段,以便防火墙可以对其执行操作。 第二个将通过这个防火墙将一个802.1p标签注入到一个数据包中。 某些ISP可能需要在某些地区(如法国)设置802.1p标记,以正确处理隔离VLAN上的语音/视频/数据,以确保质量。

802.1p有8个优先级,每个在GUI中都有一个双字母代码。 从最低优先到最高顺序是:

BK: Background
BE: Best Effort
EE: Excellent Effort
CA: Critical Applications
VI: Video
VO: Voice
IC: Internetwork Control
NC: Network Control

时间表

此选项配置一个时间表,指定规则生效的日期和时间。 选择“None”意味着规则将始终启用。

网关

此选项将配置网关或网关组以供符合此规则的流量使用, 这包括在策略路由中。

进/出管道(限制器)

这些选择列表定义了限制器对进入该接口(In)的流量应用带宽限制并离开该接口(Out)。

Ack队列/队列

这些选项定义将哪个ALTQ流量整形器队列应用于进入和退出此接口的流量。

浮动规则

浮动规则是一种特殊类型的高级规则,可以执行复杂的操作,这些操作在接口或组选项卡上都不可行。 浮动规则可以在入站,出站或两个方向上的多个接口上运行。 入站和出站过滤的使用使设计规则更加复杂,并容易出现用户错误,但是在特定的应用程序中它们是可取的。

大多数防火墙配置永远不会有浮动规则,或者只有流量整形器才具有浮动规则。

注意事项

浮动规则比其他规则更强大,但也更混乱,更容易做出可能有短暂的或中断连接的意外后果。

浮动规则,入方向,应用于多个广域网,不会得到应答,因为他们也会在各个接口上添加规则,所以同样的问题存在接口组这里:流量将始终与默认网关退出WAN ,而不是从输入的WAN中正确地返回。

鉴于许多用户对浮动规则相对陌生,在维护防火墙时,他们可能不认为需要查看规则。因此,他们可能会更难以管理,因为它可能不是在一个明显的地方寻找规则。

根据入站和出站方向考虑数据包的来源和目的地时要小心。例如,WAN上出站方向的规则将具有防火墙的本地源(NAT之后)和远程目标。

潜在的用途

浮动规则最常见的用途是ALTQ流量整形。浮动选项卡规则是唯一可以匹配和排队流量而不显式传递流量的规则类型。

另一种使用浮动规则的方法是控制从防火墙本身流出的流量。浮动规则可以防止防火墙到达特定的IP地址,端口等。

其他常见用途是确保没有流量可以从其他路径退出到安全网络,而不管其他接口上存在什么规则。通过阻止除了经批准的位置以外的所有安全网络向外的安全网络,通过一些其他不希望的路径意外地允许通信的可能性减小。同样,它们可以用来防止专用网络的流量离开WAN接口,以防止***流量泄漏。

正如前面在接口规则中提到的,它们还可以有效地为非对称路由制定状态超时,标记或匹配操作“no state” 规则和 “sloppy state” 规则。

处理任务

在入站方向上,浮动规则基本上与接口或组规则相同,只不过它们首先被处理。 然而,在出站方向,事情会变得更加混乱。

防火墙规则是在NAT规则之后进行处理的,因此,如果在该接口上的出站NAT处于活动状态,则WAN上出站方向的规则永远不会匹配本地/专用IP地址源。 到达规则时,数据包的源地址现在是WAN接口的IP地址。 在大多数情况下,这可以通过使用匹配选项来标记局域网上的数据包,然后在防火墙出口处匹配该标记。

浮动规则在接口组规则和接口规则之前进行处理,因此也必须予以考虑。

匹配动作

匹配动作对于浮动规则是独一无二的。 具有匹配动作的规则不会传递或阻止数据包,而只是为了将流量分配给队列或限制器进行流量整形。 匹配规则在启用快速的情况下无效。

快速

快速控制当规则匹配时规则处理是否停止。 快速行为将自动添加到所有接口选项卡规则中,但在浮动规则上是可选的。 如果没有快速检查,则只有在没有其他规则匹配流量的情况下,规则才会生效。 它把“第一场比赛胜利”的行为逆转为“最后一场胜利”。

使用这种机制,可以制定一个默认的排序行为,只有在没有其他规则匹配的情况下才能生效,类似于广域网上的默认阻止规则。

在大多数情况下,我们建议有快速选择。 有一些特定的情况下离开快速取消选中是必要的,但他们是少之又少。 对于大多数情况下,他们没有快速选择的唯一规则是匹配规则流量整形规则。

接口

浮动规则的接口选择与普通接口规则不同:它是一个多选框,因此可以选择一个,多个或所有可能的接口。 按住Ctrl的同时单击接口以逐个选择它们,或者使用其他组合的单击/拖动或按住Shift键单击以选择多个接口。

方向

浮动规则不仅限于入口方向,如接口规则。 他们也可以通过在这里选择,或在两个方向选择任何方向的行动出站方向。 方向也是可用的。

方向对于过滤来自防火墙本身的流量,用于匹配尝试退出接口的其他不合需要的流量,或者用于完全配置“sloppy state”规则,“no state”规则或者备用状态超时是有用的。

标记和匹配

使用“Tag 和 Tagged”字段,可以使用接口选项卡规则标记连接,然后在浮动规则的出站方向上进行匹配。 这是对来自特定内部主机的WAN出站通信采取行动的有效方法,否则,由于NAT屏蔽了源地址,因此无法进行匹配。 它也可以被类似地用于应用在到达防火墙的专门标记的流量上的整形出站。

例如,在LAN规则中,使用Tag字段中的短字符串来标记来自10.3.0.56源的数据包。 然后在浮动规则上,快速出站到广域网上,使用Tagged为相同的字符串来处理由LAN规则匹配的流量。

使用其他公共IP地址的方法

部署额外的公共IP地址的方法取决于如何委派地址,分配的大小以及特定网络环境的目标。 例如,要通过NAT使用其他公有IP地址,防火墙将需要虚拟IP地址。

直接为主机分配公共IP地址有两种选择:路由公共IP子网和桥接。

选择路由,桥接和NAT

额外的公有IP地址可以通过直接在使用它们的系统上分配或使用NAT来使用。 可用的选项取决于ISP如何分配地址。

额外的静态IP地址

使用附加静态公共IP地址的方法因分配类型而异。 这里描述了每种常见的情况。

WAN上的单个IP子网

对于WAN上的单个公共IP子网,其中一个公共IP地址将位于上游路由器上,通常属于ISP,另一个IP地址将作为pfSense上的WAN IP地址。 其余的IP地址可以用于NAT,桥接或两者的组合。

要在NAT中使用地址,请添加代理ARP,IP别名或CARP类型虚拟IP地址。

要将公共IP地址直接分配给防火墙后面的主机,必须将这些主机的专用接口桥接到WAN。 与桥接一起使用时,直接分配了公网IP地址的主机必须使用与防火墙广域网(即上游ISP路由器)相同的默认网关。 如果具有公有IP地址的主机需要发起到防火墙其它接口后面的主机的连接,则会产生困难,因为ISP网关不会将内部子网的通信路由回防火墙。

下图显示了使用多个公用IP地址并结合使用NAT和桥接的示例。

多个公用IP地址使用单个IP子网

具有较大LAN IP子网的小型WAN IP子网

一些ISP将分配一个小的IP子网作为“WAN端”分配,有时称为传输或互连网络,并将更大的“内部”子网路由到防火墙。通常这是在WAN侧的一个/ 30和在防火墙内的一个/ 29或更大的子网。服务提供商路由器被分配/ 30的一端,通常是最低的IP地址,防火墙被分配较高的IP地址。然后提供程序将第二个子网路由到防火墙的WAN IP地址。额外的IP子网可以被路由的LAN或OPT接口上的防火墙使用,公网IP地址直接分配给主机,NAT使用其他类型的VIP,或者两者的组合。由于IP地址被路由到防火墙,因此不需要ARP,因此VIP条目不需要用于NAT。

由于pfSense是本地网段上的网关,从公共本地子网主机到局域网的路由比使用单个公有IP子网时所需的桥接场景要容易得多。下图使用两个IP子网的多个公用IP地址显示了一个将路由的IP子网和NAT组合在一起的示例。路由公共IP地址在路由公共IP地址和网络地址转换中包含NAT。

使用两个IP子网的多个公用IP地址

如果防火墙是使用CARP的高可用性群集的一部分,则WAN侧子网将需要为/ 29,因此每个防火墙都有自己的WAN IP地址和CARP VIP。 提供商将在这种类型的配置中将较大的内部子网路由到WAN CARP VIP。 内部IP子网必须路由到一个始终可用的IP地址,而不管哪个防火墙已经启动,并且可用于CARP的最小子网是/ 29。 CARP的这种设置与上述相同,OPT1网关是CARP VIP,而提供商路由到CARP VIP,而不是WAN IP地址。 CARP涵盖了高可用性。

多个IP子网

在其他情况下,一个站点可能被分配来自ISP的多个IP子网。通常当发生这种情况时,站点以前面描述的两种安排之一开始,随后在请求额外的IP地址时,该站点被提供了额外的IP子网。理想情况下,这个额外的子网将被ISP路由到防火墙,或者在单个防火墙的情况下被路由到WAN IP地址,或者在使用HA的时候被路由到CARP VIP。如果提供商拒绝将IP子网路由到防火墙,而是将其路由到其路由器,并使用子网中的一个IP地址作为网关IP地址,则防火墙将需要使用代理ARP VIP,IP别名VIP,或IP别名和CARP VIP的组合用于其他子网。如果可能的话,提供者应该将IP子网路由到防火墙,因为无论防火墙是否被使用,它都可以更容易地工作。它还消除了在附加子网中增加3个IP地址的需要,一个用于网络和广播地址,一个用于网关IP地址。通过路由子网,整个子网可与NAT组合使用。

在将IP子网路由到防火墙的情况下,具有较大LAN IP子网的小型广域网IP子网中描述的场景适用于额外的内部子网。子网可以分配给一个新的OPT接口,与NAT一起使用,或者两者结合使用。

通过DHCP的其他IP地址

一些ISP需要通过DHCP获得额外的IP地址。 这不是获取多个公网IP地址的好方法,必须避免在任何严重的网络中使用。 业务级连接不应该要求这样做。 pfSense是少数可以在任何容量下使用DHCP的附加IP地址的防火墙之一。 这提供了有限的灵活性

桥接

如果来自DHCP的附加IP地址必须直接分配给将要使用它们的系统,桥接是唯一的选择。 这些系统使用与WAN桥接的OPT接口,并且系统必须配置为使用DHCP获取其地址。

伪多WAN

让防火墙将这些DHCP地址作为租约提取的唯一选择是伪多WAN部署。 每个公共IP地址安装一个网络接口,并为每个DHCP配置一个。 将所有接口插入防火墙与调制解调器或路由器之间的交换机。 由于防火墙将有多个接口共享同一个广播域,因此在系统>高级设置,网络设置页面选择“抑制ARP报文”,可以消除系统日志中的ARP告警,这种配置方式是正常的。

以这种方式分配的多个公有IP地址的唯一用途是用于端口转发。 端口转发可以在每个WAN接口上使用,由ISP DHCP服务器使用分配给该接口的IP地址。 出站NAT到OPT WAN将不起作用,因为每个WAN必须具有唯一的网关IP地址才能将流量正确地引导出该WAN。 这将在多个WAN连接中进一步讨论。

虚拟IP地址

pfSense允许通过虚拟IP(VIP)将多个IP地址与NAT或本地服务结合使用。

在pfSense中有四种类型的虚拟IP地址:IP别名,CARP,代理ARP和其他。 每个在不同的情况下都很有用。 在大多数情况下,pfSense将需要回答对VIP的ARP请求,这意味着必须使用IP别名,代理ARP或CARP。 在不需要ARP的情况下,例如当服务提供商将其他公共IP地址路由到防火墙上的WAN IP地址时,请使用其他类型的VIP。

无论防火墙规则配置如何,pfSense都不会响应代理ARP和其他类型VIP的ping。 使用代理ARP和其他VIP,NAT必须存在于防火墙上,将流量转发到内部主机才能运行。

IP 别名

IP别名与接口上的任何其他IP地址一样工作,例如实际的接口IP地址。他们将响应第2层(ARP),并可以用作防火墙上服务的绑定地址。它们也可以用来处理同一接口上的多个子网。 pfSense将响应IP别名上的ping,防火墙上绑定到所有接口的服务也将响应IP别名VIP,除非使用VIP将这些端口转发到其他设备(例如1:1 NAT)。

IP别名VIP可以使用本地主机作为其接口,使用路由地址块中的IP地址绑定服务,而无需专门将IP地址分配给接口。这对HA和CARP场景是非常有用的,这样当子网只存在于防火墙内时(例如NAT或防火墙),IP地址不需要由CARP设置消耗(每个节点一个IP,其余则为CARP VIP)诸如***之类的服务)。

IP别名本身不会同步到XMLRPC配置同步对等体,因为这会导致IP地址冲突。 IP 别名 VIP使用CARP VIP“接口”作为例外。那些不会导致冲突,所以他们会同步。另一个例外是绑定到本地主机的IP别名VIP作为其接口。因为这些在防火墙本身以外是不活跃的,所以不会有冲突的机会,所以它们也会同步。

代理ARP

代理ARP VIP功能严格在第2层,为指定的IP地址或IP地址的CIDR范围提供ARP应答。 这允许pfSense接受针对共享子网内这些地址的流量。 例如,pfSense可以根据其NAT配置将流量发送到WAN子网内的其他地址。 地址或地址范围未分配给pfSense上的任何接口,因为它们不需要。 这意味着pfSense本身没有任何服务可以响应这些IP地址。

代理ARP VIP不会同步到XML-RPC配置同步对等点,因为这样做会导致IP地址冲突。

CARP

CARP VIP主要用于利用CARP的高可用性冗余部署。 每个CARP VIP都有自己独特的MAC地址,这些MAC地址来源于他们的VHID,即使在高可用性部署之外,这也是有用的。

提示:CARP VIP也可以用于单个防火墙。 这通常是在pfSense部署最终转换为HA群集节点或具有唯一MAC地址的情况下完成的。 在极少数情况下,供应商要求广域网段上的每个唯一IP地址具有不同的MAC地址,而CARP VIP则提供这些地址。

其他

其他类型的VIP定义了额外的IP地址,以便在ARP请求IP地址不需要时使用。 添加其他类型VIP的唯一功能是使该地址在NAT配置下拉选择器中可用。 当防火墙具有路由到其WAN IP地址,IP别名或CARP VIP的公共IP模块时,这很方便。

基于时间的规则

基于时间的规则允许防火墙规则在指定的日期和/或时间范围内激活。 基于时间的规则与任何其他规则的功能相同,除非它们在计划时间以外的规则集中不存在。

基于时间的规则逻辑

在处理基于时间的规则时,计划会确定何时应用防火墙规则中指定的操作。 如果当前时间或日期未被计划覆盖,则防火墙的行为就好像规则不存在一样。 例如,如果在其下面存在单独的阻止规则,则在星期六通过流量的规则将仅在其他日期阻止。 规则从上到下进行处理,与其他防火墙规则相同。 使用第一个匹配项,一旦找到匹配项,如果规则在计划中,则执行该操作,并且不执行其他规则。

提示

请记住,在使用时间表时,规则在预定时间以外无效。 由于当前时间不在预定时间内,因此规则将不会颠倒过来。 此行为可能会导致客户在计划中超出定义的时间范围之外的意外访问。

为基于时间的规则配置时间表

时间表必须先定义,然后才能用于防火墙规则。 时间表在防火墙>时间表下定义,每个时间表可以包含多个时间范围。 在下面的例子中,一个公司想要在工作时间拒绝对HTTP的访问,其他时间则可以正常访问网络。

定义时间表

添加时间表:

  • 导航到防火墙 >时间计划
  • 单击 调出时间表编辑页面,如下图添加时间范围。
  • 输入一个时间表名称。 这是出现在选择列表中用于防火墙规则的名称。 就像别名一样,这个名字只能包含字母和数字,不能包含空格。 例如:BusinessHours输入此时间表的说明,例如  Normal Business Hours
  • 定义一个或多个时间范围:
    • 通过选择特定月份和日期来设置月份,或者通过单击每周重复计划的星期几标题来设置月份。
    • 选择一个开始时间和停止时间,控制在选定日期内该规则处于活动状态。 时间不能在任何一天过午夜。 一整天是0点到23点59分。
    • 为此特定范围输入可选的时间范围说明,例如 Work Week
    • 单击  添加时间以将选项添加为范围
    • 重复月份,时间,   单击添加另外的时间范围
  • 单击保存

时间安排可以适用于特定日期,例如2016年9月2日,或周一至周三的某几天。 要选择下一年的任何一天,请从下拉列表中选择月份,然后点击日历上的特定日期或日期编号。 要选择星期几,请在列标题中单击其名称。

对于这个例子,点击星期一,星期二,星期三,星期四和星期五。 这将使计划在任何周一到周五都有效,无论月份如何。 现在选择时间表为24小时制。 这个例子的业务时间是9点到17点(下午5点)。 所有时间都以当地时区为准。

添加一个时间范围

一旦定义了时间范围,它将出现在时间表编辑页面底部的列表中,如下图所示。

添加时间范围

为了扩大这个设置,星期六可能会有半天的时间来定义,或者商店周一晚些时候开放。 在这种情况下,请为相同的天数定义一个时间范围,然后为每天的另一个范围定义不同的时间范围。 这个时间范围的集合将是完整的时间表。

一旦时间表条目被保存,浏览器将返回到时间计划列表,如下图所示。 此时间表现在可用于防火墙规则。

添加后的时间表

在防火墙规则中使用时间表

要使用此时间表创建防火墙规则,请在所需的接口上创建新规则。对于此示例,添加一个规则,以拒绝局域网接口上的TCP通信从LAN子网到HTTP端口上的任何目标。 在规则的高级选项中,找到“时间计划”设置,然后选择“BusinessHours”计划,如图选择防火墙规则的计划。

在防火墙规则中使用时间表

保存规则后,日程安排将显示在防火墙规则列表中,同时显示日程安排的活动状态。 如下图所示,这是一个拒绝规则,调度列指示规则当前处于活动阻止状态,因为它在排定范围内的某个时间正在被查看。 如果鼠标光标悬停在日程安排状态指示器上,则防火墙会显示一个工具提示,显示当前规则将如何运行。 由于这是在BusinessHours时间表中定义的时间内查看的,因此将会显示“匹配此规则的流量正在被拒绝”。 如果在这个规则之后有一个通行规则将匹配从LAN网络的端口80上的通信量,那么它将被允许在规定的时间之外。

防火墙规则列表与时间表

现在规则已经定义,在计划时间的内部和外部进行测试,以确保所需的管理行为已经生效。

提示

默认情况下,当时间表到期时,状态将被清除,以进行预定规则允许的活动连接。 这将关闭规则允许的任何人在活动时的访问权限。 要使这些连接保持打开状态,请选中“系统”>“高级设置”>”附带组件”下的“当时间计划表到期时不要终止连接”。

查看防火墙日志

防火墙为配置为记录的每个规则以及默认拒绝规则创建日志条目。 有几种方法可以查看这些日志条目,每个日志条目具有不同级别的细节。 没有“最佳”方法,因为它取决于防火墙管理员的偏好和技能水平,尽管使用GUI是最简单的方法。

提示

默认拒绝规则和其他内部规则的记录行为可以使用系统状态>系统日志下的设置标签进行控制。

像pfSense中的其他日志一样,防火墙日志只使用二进制循环日志格式clog保留一定数量的记录。 如果组织的需求需要长时间记录防火墙日志,请参阅系统日志章节以获取有关将这些日志条目复制到系统日志服务器的信息。

在WebGUI中查看

防火墙日志在WebGUI的“系统状态”>“系统日志”“防火墙”选项卡上显示。日志可以被看作是一个解析日志,这更容易阅读,或作为一个原始日志,其中包含更多的细节。 还有一个设置可以正向或反向显示这些条目。 如果显示的日志条目的顺序未知,请检查第一行和最后一行的时间戳,或者检查更改日志设置以获取有关如何查看和更改这些设置的信息。

解析后的WebGUI日志分为6个列:Action,Time,Interface,Source,Destination和Protocol。

Action: 显示产生日志条目的数据包(例如pass或block)
Time: 数据包到达的时间。
Interface: 数据包进入防火墙的地方。
Source: 源IP地址和端口。
Destination: 目标IP地址和端口。
Protocol: 分组的协议,例如 ICMP,TCP,UDP等

从WebGUI中查看日志条目

动作图标是一个链接,它将查找并显示导致日志条目的规则。 通常情况下,这是“默认拒绝规则”,但是在排除规则问题时,可以帮助缩小嫌疑人的范围。

提示:在“系统状态”>“系统日志”下的“设置”选项卡上,可以将此规则说明配置为直接显示在日志条目中。 防火墙可以在单独的列或单独的行中显示说明。

源和目标IP地址旁边是。 点击此图标后,防火墙将对IP地址执行DNS查找。 如果地址有一个有效的主机名,它将显示在页面上该地址的所有实例的IP地址下。

TCP数据包的日志条目将附加信息附加到显示数据包中存在TCP标志的协议字段。 这些标志表示各种连接状态或数据包属性。 常见的标志包括:

S – SYN: 同步序列号。 提示仅设置SYN时的新连接尝试。
A – ACK: 提示数据的确认。 这些是答复,让发件人知道数据收到OK。
F – FIN: 表示发件人没有更多的数据,关闭连接。
R – RST: 连接重置。 这个标志在响应没有监听守护进程的端口上打开一个连接的请求时被设置。 也可以通过防火墙软件来设置,以避免不良连接

可以过滤GUI中显示的日志输出以查找特定条目,只要它们存在于当前日志中即可。单击过滤器来显示过滤选项。

从日志视图添加防火墙规则(简单规则)

简单规则使得从防火墙日志视图快速添加防火墙规则变得简单。

源IP地址旁边的图标   会在该接口上添加该IP地址的阻止规则。 更确切地说,它会创建或添加一个包含从Easy Rule添加的IP地址的别名,并在选定的接口上阻止它们。

目标IP地址旁边的图标与阻止操作类似,但会添加更精确的传递规则。 此通过规则允许接口上的流量,但它必须匹配相同的协议,源IP地址,目标IP地址和目标端口。

在shell中使用easyrule命令添加防火墙简单规则

easyrule可用于从shell提示符添加防火墙规则。 当easyrule命令不带参数运行时,会打印一条用法消息来解释其语法。

它使用别名或指定协议,源和目标的精确传递规则添加阻止规则的方式与GUI版本类似。 例如,要添加阻止规则,请运行:

# easyrule block wan 1.2.3.4

通过规则必须更加精确:

# easyrule pass wan tcp 1.2.3.4 192.168.0.4 80

从控制台菜单查看

可以使用控制台菜单中的选项10从filter.log文件实时查看和跟踪原始日志。 一个简单的例子就是如上图所示的日志条目:从WebGUI中查看的示例日志条目:

Aug  3 08:59:02 master filterlog: 5,16777216,,1000000103,igb1,match,block,in,4,0x10,,128,0,0,none,17,udp,328,198.51.100.1,198.51.100.2,67,68,308

这显示规则ID 1000000103被匹配,导致对igb1接口的阻止动作。 源和目标IP地址显示在日志条目末尾附近,其后是源和目标端口。 来自其他协议的数据包可能会显示更多的数据。

从Shell查看

从SSH或从控制台使用shell时,有许多选项可用于查看过滤器日志。

直接查看clog文件的内容时,日志条目可能相当复杂且冗长。

查看日志文件的当前内容

过滤日志包含在二进制循环日志中,因此传统工具(如cat,grep等)不能直接在文件上使用。 日志必须与阻止程序一起读回,然后可以通过另一个程序传送。

要查看日志文件的全部内容,请运行以下命令:

# clog /var/log/filter.log

要限制日志输出到最后几行,通过尾部管道:

#  clog /var/log/filter.log | tail

在实时日志输出之后

要“跟随”日志文件的输出,使用-f参数来阻止。 对于在UNIX系统上用于正常日志文件的用户,这相当于tail -f:

# clog -f /var/log/filter.log

这将输出日志文件的全部内容,但不会在之后退出。 它将等待更多的条目,并在发生时进行打印。 这个输出也可以根据需要传送给其他命令。

在shell中查看解析的日志输出

有一个用PHP编写的简单日志解析器,可以从shell中使用它来生成减少的输出,而不是完整的原始日志。 要查看当前日志的解析内容,请运行:

# clog /var/log/filter.log | filterparser.php

日志条目每行输出一个:

Aug  3 08:59:02 block igb1 UDP 198.51.100.1:67 198.51.100.2:68

找到导致日志条目的规则

查看其中一种原始日志格式时,显示条目的ID号码。 这个规则号可以用来找到引起匹配的规则。 在以下示例中,标识为1000000103的规则是:

# pfctl -vvsr | grep 1000000103
@5(1000000103) block drop in log inet all label "Default deny rule IPv4"

如上面的输出所示,这是IPv4的默认拒绝规则。

为什么会阻止合法连接的日志条目?

有时日志条目存在,虽然标有“默认拒绝”规则,但看起来好像它们属于合法连接。最常见的例子是看到一个涉及Web服务器的连接被阻止。

当连接的状态被移除或者在可接受的窗口时间之外收到ACK时,通常关闭连接的TCP FIN数据包到达时,可能会发生这种情况。发生这种情况的原因是,有时数据包将丢失或延迟,因为防火墙已关闭连接,所以重新传输将被阻止。

这些日志条目是无害的,并不表示实际阻止的连接。所有有状态的防火墙都这样做,尽管有些日志消息不会为被阻止的流量生成日志消息,即使所有被阻止的流量都被记录了。

即使所有防火墙接口上都存在“全部允许”样式规则,此行为也会出现,因为TCP连接的规则设置为“全部允许”仅允许TCP SYN数据包创建状态。所有其他的TCP流量将是状态表中现有状态的一部分,或者是具有欺骗性或其他无效的TCP标志的数据包。

当网络上存在非对称路由时,可以指出问题的一个特殊变化。在这些情况下,日志条目将显示TCP:SA(SYN + ACK)数据包被阻止,而不是FIN或RST。

如何阻止访问网站?

我们经常被问到的问题是“如何阻止对网站的访问?”,或者更准确地说:“如何阻止访问Facebook?”并不总是一个容易回答的问题。 有几种可能的策略来完成这个目标,有些在本书的其他地方讨论过。

使用DNS

如果内置的DNS解析器或转发器处于活动状态,则可以在该处输入覆盖,以将不需要的网站解析为无效的IP地址,如127.0.0.1。

使用防火墙规则

如果网站很少更改IP地址,则可以使用包含其IP地址的别名来阻止访问,然后在防火墙规则中使用此别名。对于返回低TTL的站点,这不是一个可行的解决方案,并且将负载分散到许多服务器或数据中心,例如Google和类似的非常大的站点。大多数中小型网站可以使用这种方法有效阻止,因为它们很少更改IP地址。

主机名也可以在网络别名内。主机名将被定期解析并根据需要进行更新。这比手动查找IP地址更有效,但如果站点以快速变化的方式返回DNS记录,或者在每个查询的服务器池中出现随机化结果(这对于大型站点来说都是常见的),那么这种方法仍然不足。

另一个选择是找到所有网站的IP子网分配,为这些网络创建一个别名,并阻止到这些目的地的流量。这对传播大量IP空间的Facebook等网站特别有用,但被限制在几个网络块中。使用ARIN等区域注册网站可以帮助追踪这些网络。例如,在ARIN所覆盖的地区,Facebook所使用的所有网络都可以在http://whois.arin.net/rest/org/THEFA-3.html的“相关网络”下找到。公司可能在不同地区有其他地址,所以请检查其他地区网站,如RIPE,APNIC等。

作为手动查找IP块的替代方法,通过在其中一个IP地址上执行whois查找来找到目标公司的BGP自治系统(AS)编号,然后使用它查找所有的分配。例如,Facebook的AS号码是AS32934:

# whois -h whois.radb.net -- '-i origin AS32934' | awk '/^route:/ {print $2;}' | sort | uniq

将该命令的结果复制到一个新的别名中,它将覆盖当前分配的所有网络。 定期检查结果是否有更新。

pfBlocker软件包提供了在这方面很有用的机制,如DNSBL,地理IP地址阻止以及AS查找过程的自动化。

使用代理

如果网络流量通过代理服务器流动,那么该代理服务器很可能被用来阻止访问这些网站。 例如,Squid有一个名为SquidGuard的插件,允许通过URL或其他类似的标准阻止网站。

防止绕行限制

使用上述任何一种方法,都有很多方法来解决定义的块。 最容易和最普遍的是使用任何数量的代理网站。 查找和阻止所有这些单独和保持最新的名单是不可能的。 确保这些网站无法访问的最佳方法是使用能够按类别阻止的外部代理或内容过滤。

为了进一步保持控制,请使用限制性出口规则集,并仅允许将流量发送到特定的服务或主机。 例如,只允许DNS访问防火墙或专门用于LAN客户端的DNS服务器。 此外,如果网络上正在使用代理,请确保不允许通过防火墙直接访问HTTP和HTTPS,并且只允许代理服务器或来自代理服务器的通信。

防火墙故障排查

本节提供了有关解决防火墙规则问题的指导。

检查防火墙日志

排除可疑阻止通信的第一步是检查防火墙日志(系统状态>系统日志“防火墙”选项卡)。

默认情况下,pfSense将记录所有丢弃的流量,并不会记录任何通过的流量。 除非不使用日志记录的规则集中存在阻止或拒绝规则,否则所有阻止的流量都将被记录。 如果防火墙日志中没有与所讨论的流量匹配的日志条目为红色,则pfSense不太可能丢失流量。

检查状态表

尝试连接并立即在系统诊断>状态中检查状态表,并在源或目标上过滤以查看是否存在状态。 如果存在状态表项,则防火墙已通过流量。

如果所讨论的规则是通过规则,则状态表条目表示防火墙已经通过了通信,问题可能在其他地方,而不在防火墙上。

如果该规则是阻止规则并且存在状态表项,则打开的连接将不会被切断。 要从新的阻止规则中看到即时的效果,必须重置状态。

查看规则参数

编辑有问题的规则并查看每个字段的参数。 对于TCP和UDP通信,请记住源端口几乎不会与目标端口相同,通常应该设置为any

如果默认的拒绝规则是阻止,制定一个新的通行证规则,将匹配允许的流量。 如果流量仍然被阻止,则在规则配置中可能还有一些需要额外处理的特殊方面的数据包。 例如,某些多点传送流量可能需要启用“允许IP选项”,或者日志条目可能是由于非对称路由导致的,或者数据包可能具有无效的参数组合,例如内部设置了“Do not Fragment”的分段数据包。

审查规则排序

请记住,对于接口选项卡规则,第一个匹配的规则会胜出 – 不会对更多规则进行评估。

规则和接口

确保规则在正确的接口上按预期运行。 流量只能通过在启动流量的接口上配置的规则集进行过滤。 从局域网上的系统发往任何其他接口上的系统的流量仅通过LAN规则进行过滤。 所有其他接口也是如此。

启用规则日志

确定哪个规则与所讨论的流量相匹配。 规则列表中的命中计数器可以在一定程度上帮助解决这个问题。 通过启用通过规则登录,防火墙日志将显示一个单独的条目,以确定哪个规则通过连接。

使用数据包捕获进行故障排除

数据包捕获对于故障排除和调试流量问题是非常宝贵的。 通过数据包捕获,很容易判断流量是否到达外部接口或离开内部接口以及许多其他用途。

新规则不适用

如果新的规则似乎不适用,有几个可能的解释。

首先,如果规则是阻止规则,并且有一个状态表项,打开的连接将不会被切断。

其次,规则集可能无法正确重新加载。 检查系统状态>过滤器重新加载以查看是否显示错误。 点击页面上的重置过滤按钮来强制重新加载一个新的过滤器。 如果显示错误,请根据需要解决问题。

如果上述原因都不能解决问题,则可能是规则不匹配,所以请重新检查流量和规则。

其他原因

防火墙规则,NAT,路由和网络设计中还有其他一些缺陷可能会干扰连接。