pfSense book之防火墙(一)

防火墙

  • 防火墙基础
  • 入口过滤
  • 出口过滤
  • 简介防火墙规则
  • 别名
  • 防火墙规则配置实例
  • 规则方法
  • 配置防火墙规则
  • 浮动规则
  • 使用其他公网IP地址的方法
  • 虚拟IP地址
  • 基于时间的规则
  • 查看防火墙日志
  • 如何封锁访问一个网站?
  • 故障排除防火墙规则

pfSense执行的主要功能之一是过滤流量。本章包括防火墙基本原理,最佳实践以及配置防火墙规则所需的必要信息。

防火墙基础知识

本节主要介绍防火墙概念,为理解、使用pfSense配置防火墙规则奠定基础。

基本术语

规则和规则集是本章通篇使用的两个术语:

规则:   指防火墙>规则策略上的单个条目。规则将引导防火墙如何匹配或处理网络流量。
规则集:   统称为一组规则。 要么是整个防火墙规则,要么是特定上下文中的一组规则,例如接口选项卡上的规则。 完整的防火墙规则集是所有用户配置和自动添加规则的总和,本章将进一步讨论。

“接口”选项卡上的规则集是由pfSense优先匹配执行的。 这意味着从上到下执行接口的规则集,匹配的第一个规则将是防火墙使用的规则。 匹配后即停止,然后防火墙采取该规则指定的操作。 创建新规则时,请始终牢记这一点,特别是在制定限制流量的规则时。 最宽松的规则应该放在列表的底部,以便可以在上面制定限制或例外规则。

注意

“浮动”选项卡是此规则处理逻辑的唯一例外。 在本章的后面部分将会介绍。

状态过滤

pfSense是一个有状态的防火墙,这意味着它会记住有关流经防火墙连接的信息,以便自动应答 流量。 这些数据保留在状态表中。 状态表中的连接信息包括源、目标、协议、端口等,足以唯一标识特定的连接。

使用这种机制,只需在进入防火墙的接口上允许通信。 当连接符合传递规则时,防火墙会在状态表中创建一个条目。 通过防火墙自动应答流量到连接,是通过将其与状态表进行匹配而不是在两个方向上检查规则。 这包括使用不同协议的任何相关流量,例如响应于TCP,UDP或其他连接可能提供的ICMP控制消息。

参考

有关状态选项类型的更多信息,请参阅防火墙高级设置和状态类型。

状态表大小

防火墙状态表必须限定大小以防止内存耗尽。 每个状态需要大约1 KB的RAM。 pfSense中的默认状态表大小是通过默认情况下占用防火墙中可用RAM的10%来计算的。 在1GB RAM的防火墙上,默认状态表大小可容纳大约100,000个条目。

参考

有关状态表大小和RAM使用情况的更多信息,请参阅防火墙最大状态表。

每个用户连接通常由两个状态组成:一个是在进入防火墙时创建的,一个是在离开防火墙时创建的。 因此,在状态表大小为1,000,000的情况下,防火墙可以处理大约50万个正在穿越防火墙的用户会话,之后将会丢弃任何额外的连接。 只要不超过防火墙内可用的RAM数量,就可以根据需要增加此限制。

增加状态表大小:

  • 导航到系统 >高级选项、防火墙和NAT选项卡;
  • 在防火墙最大状态栏输入所需的数字,或保留默认计算值。 如下图增加状态表大小到2,000,000;
  • 点击保存。

修改防火墙最大状态为2,000,000

历史状态表使用情况由防火墙跟踪。 要查看图表:

  • 导航到系统状态 > Monitoring
  • 单击  扩展图表选项
  • 将左轴的类别设置为系统
  • 将左轴的图形设置为状态
  • 单击  更新图表

阻止与拒绝

有两种方式可以禁止在pfSense上使用防火墙规则的流量:阻止和拒绝。

设置为阻止的规则将悄悄丢弃流量, 被阻止的客户端不会收到任何响应,因此将等待连接尝试超时。 这是pfSense中默认拒绝规则的行为。

规则设置为拒绝将回应客户端拒绝TCP和UDP的流量,让发件人知道连接被拒绝。 拒绝的TCP流量接收到TCP RST(重置)作为响应,拒绝的UDP流量接收到ICMP不可达消息作为响应。 虽然拒绝是任何防火墙规则的有效选择,但TCP和UDP以外的IP协议不能被拒绝; 这些规则会默默地放弃其他IP协议,因为没有拒绝其他协议的标准。

采用阻止或拒绝?

多年来,安全专业人士就阻止拒绝的价值进行了多次辩论。有人认为,使用阻止更有意义,声称它“放慢”攻击者者扫描互联网。当一个规则被设置为拒绝时,立即返回一个响应端口被关闭,而阻止悄悄地丢弃流量,导致攻击者的端口扫描器等待响应。这个说法并不成立,因为每个好的端口扫描器都可以同时扫描数百或数千个主机,扫描器不会停滞,等待来自封闭端口的响应。资源消耗和扫描速度之间的差异很小,但是如此轻微,以至于不应该将其考虑在内。

如果防火墙阻止来自Internet的所有流量,阻止拒绝之间存在显着差异:没有人知道防火墙在线。如果即使单个端口是开放的,那么这个能力的价值也是最小的,因为***者可以很容易地确定主机在线并且也知道什么端口是开放的,不管被阻止的连接是否被防火墙拒绝。虽然在阻止拒绝方面没有显着的价值,但我们仍建议在WAN规则上使用阻止。在不主动将信息传递给潜在的攻击者方面存在一些价值,并且不必要地自动响应外部请求也是不好的做法。

对于内部接口规则,我们建议在大多数情况下使用拒绝。当主机尝试访问防火墙规则不允许的资源时,访问它的应用程序可能会挂起,直到连接超时或客户端程序停止尝试访问该服务。拒绝连接立即被拒绝,客户避免这些挂起。这通常只是一个烦恼,但我们通常仍然建议使用拒绝,以避免由于在网络中静静地丢弃流量而导致潜在的应用程序问题。

入口过滤

入口过滤是指从外部源(如Internet)进入网络的防火墙流量的概念。 在使用多WAN的部署中,防火墙具有多个入口点。 pfSense上的默认入口策略是阻止所有流量,因为在默认规则集中,WAN上没有允许的规则。 自动允许从本地网络内部发起的流量应答由状态表通过防火墙返回。

出口过滤

出口过滤是指在本地网络内发起的防火墙流量的概念,其目的地是远程网络,例如因特网。 与几乎所有类似的商业和开源解决方案一样,pfSense也带有LAN规则,允许从LAN到Internet的所有通信。 但是,这不是最好的操作方式。 但它已成为大多数人所期望的多数防火墙解决方案中事实上的默认设置。 常见的误解是“内部网络上的任何东西都是’值得信赖的’,那为什么要去过滤呢?

为什么使用出口过滤?

根据我们与许多不同厂商的众多供应商合作的无数防火墙的经验,大多数小公司和家庭网络都不采用出口过滤。 由于每个新的应用程序或服务可能需要在防火墙中打开额外的端口或协议,因此会增加管理负担。 在某些环境中,这很困难,因为管理员不完全知道网络上发生了什么,而且他们不愿意破坏事情。 在其他环境下,工作场所政治的原因是不可避免的。 最佳做法是管理员将防火墙配置为只允许所需的最小流量在可能的情况下离开网络。 严格的出口过滤很重要,原因如下:

限制受损系统的影响

出口过滤限制了受损系统的影响。恶意软件通常使用大多数商业网络不需要的端口和协议。一些漫游者依靠IRC连接打电话回家并接收指令。有些会使用更多的通用端口,例如TCP端口80(通常是HTTP)来逃避出口过滤,但是许多端口不会。如果防火墙不允许访问通常的IRC端口6667的TCP端口6667,那么依赖于IRC的机器人可能会被过滤损坏。

另一个例子是我们参与的情况,pfSense安装的内部接口看到50-60 Mbps的流量,而WAN的吞吐量低于1 Mbps。防火墙上没有其他接口。一些调查显示,原因是运行僵尸程序的局域网上的受害系统参与了针对中国赌博网站分布式拒绝服务(DDoS)攻击。攻击使用UDP端口80,在这个网络中,UDP端口80不被出口规则集允许,因此所有的DDoS正在完成的是强调防火墙的内部接口与被丢弃的流量。在这种情况下,防火墙一路高歌猛进,没有任何性能下降,网络管理员不知道发生了什么事,直到意外发现。

以上段落中描述的攻击可能使用UDP端口80有两个主要原因:

  • UDP允许客户端发送大数据包,而不需要完成TCP握手。 由于状态防火墙是常态,因此在握手成功完成之前,大型TCP数据包将不会通过,这限制了DDoS的有效性。
  • 那些采用出口过滤技术的用户通常过于宽容,只允许需要TCP的TCP和UDP,就像HTTP一样。

这些类型的攻击通常是从受感染的Web服务器发起的。如果有一个广泛的开放出口规则集,流量将流出到互联网,并有可能溢出防火墙上的状态表,造成带宽使用的损失,并且/或者降低互联网连接的所有性能。

出站SMTP是另一个例子。只允许SMTP(TCP端口25)离开邮件服务器的任何网络。或者,如果邮件服务器是外部托管的,则只允许内部系统在TCP端口25上与特定的外部系统进行通信。这样可以防止本地网络中的每个其他系统都被用作垃圾邮件机器人,因为它们的SMTP通信将被丢弃。许多邮件提供商已经转向使用仅使用TCP端口587的客户端的身份验证提交,因此客户端不需要访问端口25。这是限制垃圾邮件的好办法,并且还可以防止将网络添加到整个互联网将阻止该网站向更多邮件服务器发送合法的电子邮件。这也可能阻止该网站的ISP由于滥用而关闭其互联网连接。

理想的解决方案是首先防止这些类型的事情发生,但出口过滤提供了另一个方法 ,如果其他措施失败,出口过滤可以帮助进行限制。

防止妥协

出口过滤可以防止在某些情况下的妥协。 一些漏洞和蠕虫需要出站访问才能成功。 一个较老的但是很好的例子是从2001年开始的红色代码蠕虫病毒。这个漏洞通过TFTP(Trivial File Transfer Protocol,普通文件传输协议)使得受影响的系统能够执行一个可执行文件,然后执行它。 Web服务器几乎可以肯定不需要使用TFTP协议,并且通过出口过滤阻止TFTP即使在未打补丁的服务器上也可以防止感染红色代码。 这在很大程度上只对停止完全自动化的攻击和蠕虫有用,因为真正的人类攻击者会发现在出口过滤中存在的任何漏洞并将它用于他们的攻击目标。 同样,防止这种问题的正确解决方案是修复用作攻击媒介的网络漏洞,但是出口过滤也可以提供帮助。

限制未经授权的应用程序使用

许多应用程序(如VPN客户端,对等软件,即时通讯软件等)都依赖非典型端口或协议来运行。 虽然越来越多的点对点和即时通讯应用程序将端口跳转,直到找到一个被允许离开本地网络的端口,许多端口被限制性的出口规则集阻止运行,对更多类型的***连接这也是一个有效的限制手段。

防止IP欺骗

这是使用出口过滤的一个常见原因,但pfSense通过pf的抗欺骗功能自动阻止欺骗性流量,所以在这里不适用。 防止IP欺骗意味着恶意客户端不能发送明显被伪造的源地址的流量。

防止信息泄露

决不允许某些协议离开本地网络。这种协议的具体例子因环境而异,但是一些常见的例子是:

TCP端口135上的Microsoft RPC(远程过程调用)

TCP和UDP端口137到139上的NetBIOS

TCP和UDP端口445上的SMB / CIFS(服务器消息块/通用Internet文件系统)。

停止这些协议可以防止有关内部网络的信息泄漏到Internet上,并阻止本地系统启动与Internet主机的身份验证尝试。由于许多蠕虫都依赖这些协议来运行,所以这些协议也属于前面所讨论的限制受损系统的影响。其他可能相关的协议是syslog,SNMP和SNMP陷阱。限制此流量将防止错误配置的网络设备将日志记录和其他可能敏感的信息发送到Internet。与其担心哪些协议可能将信息泄露到本地网络外并需要被阻止,最佳做法是仅允许所需的通信。

实现出口过滤的方法

在历史上没有采用出口过滤的网络上,很难知道什么流量是绝对必要的。 本节介绍一些识别流量和实施出口过滤的方法。

允许所知的,阻止其余的,并通过后果工作

一种方法是为允许的已知所需流量添加防火墙规则。 首先列出已知需要的东西,例如下表出口流量的要求。

需要出口流量
描述 目标 目标端口
HTTP and HTTPS from all hosts LAN Network Any TCP 80 and 443
SMTP from mail server Mail Server Any TCP 25
DNS queries from internal DNS servers DNS Servers Any TCP and UDP 53

做出列表后,配置防火墙规则只传递该流量,并让所有其他命中默认的拒绝规则。

记录流量和分析日志

另一种方法是启用所有传递规则的日志记录,并将日志发送到系统日志服务器。 系统日志服务器可以分析日志,以查看哪些流量正在离开网络。 pfSense使用自定义日志格式,因此通常需要通过自定义脚本来解析日志,除非服务器具有一些pfSense过滤器日志格式的知识。 对日志的分析将有助于构建所需的规则集,从而更好地了解本地网络上需要的流量。

防火墙规则简介

本节提供防火墙>规则策略中防火墙规则页面的介绍和概述。 此页面列出了启动的WAN规则集,默认情况下,如果在WAN接口上激活了这些选项,则默认情况下没有其他条目用于阻止专用网络和Block bogon网络的条目,如下图所示。

提示:单击“阻止专用网络”或“阻止bogon网络规则”右则的,可以进入启用或禁用这些选项的WAN接口配置页面。

默认WAN规则

单击LAN选项卡查看LAN规则。 默认情况下,唯一的条目是默认允许LAN为IPv4和IPv6的任意规则,(如下图所示)以及反锁定规则(如果处于活动状态)。 反锁定规则旨在防止管理员意外地将自己锁定在GUI之外。 在防锁定规则旁边单击 可以访问禁用此规则的页面。

参考:有关防锁定规则如何工作以及如何禁用规则的更多信息,请参阅防锁定规则和反锁定

默认LAN规则

要显示其他接口的规则,请单击其各自的选项卡。 OPT接口将以其描述性名称出现,所以如果OPT1接口被重命名为DMZ,则其规则的选项卡也将表示DMZ。

每条规则的左边是一个指示器图标,显示规则的操作:通过 (),阻止 (),或拒绝()。如果规则启用了日志记录, 显示在相同的区域。 如果规则启用了任何高级选项, 图标也会显示。 将鼠标悬停在任何这些图标上,将显示解释其含义的文本。 对于禁用的规则,会显示相同的图标,但图标和规则的颜色较浅。

添加防火墙规则

要将规则添加到列表顶部,请单击  添加。

要将规则添加到列表的底部,请单击  添加。

为了制定与现有规则类似的新规则, 在现有规则的右边单击 。 编辑页面将显示预先填写的现有规则设置,随时可以进行调整。 在复制现有规则时,新规则将直接添加到原始规则的下方。

编辑防火墙规则

要编辑防火墙规则, 单击该规则右侧的,或双击该行上的任意位置。

该规则的编辑页面将加载,并可以进行编辑。

移动防火墙规则

规则可以通过两种不同的方式重新排序:拖放和使用“选择并单击”。

使用拖放方法移动规则:

将鼠标移动到防火墙规则上移动,光标将改变提示可以移动,点击并按住鼠标按钮,将鼠标拖到所需位置,释放鼠标按钮,单击  保存来存储新的规则顺序。

注意:在移动规则之后,但在保存规则之前试图离开页面,会导致浏览器出现错误,确认是否退出页面。 如果浏览器在不保存的情况下离开页面,则规则将仍然在原始位置。

要按组移动列表中的规则,请先选择它们,请使用选中再单击的方法:

选中需要移动的规则左侧旁边的框,或单击规则。 当选择规则时,它将改变颜色。

在规则要移动到的地方,单击  。

提示:按住Shift键,然后在上单击鼠标将规则移动到所选规则的下方而不是上方。

使用“选择并点击”方法移动规则时,新规则将自动存储。

删除防火墙规则

要删除单个规则, 在规则右侧单击  。在删除规则之前,防火墙会显示确认提示。

要删除多个规则,请选中应删除的行的开始处的框,然后点击列表底部的删除按钮。 规则也可以通过在他们的行上的任何地方单击来选择。

禁用或启用防火墙规则

禁用规则, 在规则的右侧单击 。图标外观将变成较浅的阴影以提示它被禁用, 图标会变为

要启用以前禁用的规则, 在规则右侧单击 。 规则的外观将恢复正常,启用/禁用图标将返回到原始状态

通过编辑规则并切换“禁用”复选框,也可以禁用或启用规则。

规则分隔符

防火墙规则分隔符是规则集中包含一小段文本的彩条,他不对网络流量进行任何操作。 它们对于从视觉上分离或向规则集的特殊部分添加注释非常有用。下 图防火墙规则分隔符示例显示了如何利用这些规则对规则集进行分组和记录。

防火墙规则分隔符示例

创建一个新的防火墙规则分隔符:

  • 打开规则分隔符所在的防火墙规则选项卡
  • 单击  添加分隔符
  • 输入规则分隔符的说明文字
  • 通过单击所需颜色图标来选择规则分隔符的颜色
  • 点击并拖动规则分隔符到它的新位置
  • 单击  保存规则分隔符内容
  • 在规则列表的底部单击  保存

移动规则分隔符:

  • 打开包含规则分隔符的防火墙规则选项卡
  • 点击并拖动规则分隔符到它的新位置
  • 在规则列表的底部单击  保存

删除规则分隔符:

  • 打开包含规则分隔符的防火墙规则选项卡
  • 在右侧的规则分隔符内部单击
  • 在规则列表的底部单击  保存

防火墙规则分隔符不能被编辑。 如果需要更改文本或颜色,请创建新的防火墙规则分隔符并删除现有的条目。

跟踪防火墙规则应用

在创建或更新规则时,防火墙会在规则上记录用户的登录名、IP地址和时间时间戳,以跟踪谁添加和/或上次更改了相关规则。 如果防火墙自动创建了该规则,同样会被记录。 这是针对防火墙规则以及端口转发和出站NAT规则完成的。 如下图所示,在防火墙规则时间戳中,在编辑规则页面最底部的防火墙规则时可以看见。

防火墙规则时间戳

别名

别名定义了组端口,主机或网络。 别名可以通过防火墙规则、端口转发、出站NAT规则以及防火墙GUI中的其他位置引用。 使用别名有利于减少管理工作量,创建更易于管理的规则集。

注意:不要将防火墙别名与接口IP别名混淆,接口IP别名是向网络接口添加额外的IP地址的手段。

别名基本知识

别名位于防火墙>别名管理。 该页面分为不同类型的别名标签:IP、端口、URL和全部选项卡。 创建别名时,将其添加到任何选项卡,并根据所选类型将其分类到正确的位置。

可以创建以下类型的别名:

主机:  包含单个IP地址或主机名的别名
网络:  含有CIDR掩码的网络、主机名、IP地址范围或单个IP地址的别名
端口:  这些别名包含TCP或UDP端口号或端口范围的列表
URL:  从指定的URL中的文件构建的,但是只读一次,然后成为正常的网络或端口类型别名
URL表:  从指定URL处的文件构建的,但是通过定期从URL中获取列表进行更新

在本节中我们会更详细地描述每个别名类型。

嵌套别名

大多数别名可以嵌套在其他别名中,只要它们是相同的类型即可。 例如,一个别名可以嵌套一个包含Web服务器的别名,一个包含邮件服务器的别名,以及一个包含Web和邮件服务器别名的服务器别名,这些别名都集中在一个较大的Servers别名中。 这里要注意:URL表别名不能嵌套

在别名中使用主机名

主机名也可以用于别名。 任何主机名都可以输入到主机或网络别名中,并且将由防火墙定期解析和更新。 如果主机名称返回多个IP地址,则所有返回的IP地址都将添加到别名中。 这对跟踪动态DNS条目以允许特定用户从动态IP地址转换为服务非常有用。

注意:此功能对于允许或禁止用户访问大型公共网站没有用处。 大型和繁忙的站点往往对DNS查询有不断的旋转或随机响应,所以别名的内容不一定与用户在尝试解析相同站点名称时收到的响应相匹配。 它可以适用于只有少量服务器的小型站点,并且在其DNS响应中不包含不完整的地址集。

在别名中混合使用IPv4和IPv6地址

IPv4和IPv6地址可以在别名内混合使用。 在特定规则中引用别名时,防火墙将使用适当类型的地址。

别名大小问题

所有表的总大小必须大致适合防火墙最大表条目的一半,默认值为200,000。 如果表项的最大数量不足以包含所有条目,则规则可能无法加载。 有关更改该值的信息,请参阅防火墙最大表条目。 由于别名被加载和重载的方式,别名必须在总区域中放入两次; 新列表与旧列表一起加载,然后旧列表被删除。

如果防火墙包含足够的RAM来保存条目,则可以根据需要增加此值。 RAM的使用情况与状态表类似但小于状态表,但假设每个条目的占用1K是保守和安全的。

配置别名

添加别名:

  • 导航到防火墙 > 别名管理
  • 单击  添加
  • 输入别名的名称,  名称可能只包含字符a-z,A-Z,0-9和_。
  • 输入别名的描述
  • 选择别名的类型。

根据需要输入特定于类型的信息。 每种类型都有一个数据字段和每个条目的描述字段。要将新成员添加到别名,单击条目列表底部的添加。要从别名中删除成员,在行的末尾单击  删除。别名完成后,单击“保存”存储别名内容。

每个手动输入的别名限制为5,000个成员,但是某些浏览器只能显示3,000个条目。 对于大量条目,请使用能够处理较大列表的URL表类型别名。

主机别名

主机类型别名包含IP地址组。 下图示例主机别名显示了一个用于包含公共Web服务器列表的主机类型别名。

主机别名示例

其他主机类型别名可嵌套在此条目内。 如前所述,主机名也可以用作条目。

网络别名

网络类型别名包含网络组或IP地址范围。 通过为IPv4地址选择/ 32网络掩码或为IPv6地址选择/ 128前缀长度,单个主机也可以包含在网络别名中。下 图显示了本章后面使用的网络别名示例。

网络别名示例

其他主机或网络别名可嵌套在此条目内。 如前所述,主机名也可以用作条目。

当别名条目包含IPv4范围时,防火墙将自动将其转换为等效的IPv4 CIDR网络集合,该集合将完全包含指定的范围。 如下图所示,保存别名时,指定范围将自动展开,得到的IPv4 CIDR网络列表将完全匹配所请求的范围。

IP范围示例

IP范围示例

端口别名

端口类型别名包含端口和端口范围组。 该协议没有在别名中指定; 使用别名的防火墙规则将协议定义为TCP,UDP或两者。 下图显示了一个端口类型别名的例子。

端口别名示例

在“端口”字段中输入另一个端口类型的别名,以将此别名内的其他端口类型别名嵌套。

网址别名

使用URL类型别名,将设置指向包含条目列表的文本文件的URL。 可以输入多个URL。 单击保存时,将从文件中读取最多3,000个来自每个URL的条目,并将其导入到网络类型别名中。

如果选择URL(IP),则URL必须包含IP地址或CIDR屏蔽的网络条目,并且防火墙从内容创建网络类型别名。

如果选择URL(端口),则URL必须仅包含端口号或范围,防火墙会从内容中创建端口类型别名。

URL表别名

URL表别名的行为与URL别名的行为明显不同。对于初学者来说,它不会将文件的内容导入到正常的别名中。它将文件的内容下载到防火墙的特定位置,并使用所谓的持久表(也称为基于文件的别名)的内容。别名的完整内容不能在GUI中直接编辑,但可以在表格查看器中查看。

对于URL表别名,在设置了更新周期后,别名内容将被重新获取数据的脚本隔夜更新。

URL表别名可能相当大,包含成千上万的条目。一些客户使用它们来保存特定国家或地区的所有IP blocks的列表,这些列表可轻松超过4万个条目。处理国家列表和其他类似行为时,pfBlocker插件使用这种别名。

注意:URL表别名不能被嵌套。

如果选择URL表(IP),则URL必须包含IP地址或CIDR掩码的网络条目,并且防火墙会根据内容创建网络类型别名。

如果选择URL表(端口),那么URL必须只包含端口号或范围,并且防火墙从内容创建一个端口类型别名。

批量导入网络别名

将多个条目导入别名的另一种方法是使用批量导入功能。

使用导入功能:

  • 导航到防火墙> 别名管理
  • 单击  导入
  • 填写别名描述
  • 将别名内容输入到别名中以导入文本区域,每行一个条目。
  • 点击保存

此页面的常用用法示例包括IP地址、网络和黑名单列表。 该列表可能包含IP地址,CIDR屏蔽的网络,IP范围或端口号。 防火墙将尝试自动确定目标别名类型。

防火墙将项目导入到以后可以编辑的正常别名中。

使用别名

当一个字母输入到一个支持别名的输入框中时,会显示一个匹配的别名列表。 从列表中选择所需的别名,或完全键入其名称。

注意

别名自动完成不区分大小写,但受限于类型。 例如,网络或主机类型别名将在网络字段的自动完成中列出,但是端口别名不会; 端口别名可用于端口字段,但网络别名不在列表中。

如下图所示,在添加或编辑防火墙规则时,在“目标”字段中使用WebServers别名。

  • 编辑防火墙规则
  • 选择单个主机或别名
  • 然后键入所需别名的第一个字母:输入W,并显示别名,如图所示。

自动完成主机别名

如下图所示,配置的端口别名自动完成。 如果多个别名与输入的字母匹配,则列出所有相应类型的别名。 点击所需的别名来选择它。

自动完成端口别名

如下图所示,显示使用Web Servers和WebPorts别名创建的规则。 此规则位于WAN上,当使用WebPorts别名中定义的端口时,允许任何源访问Web Servers 别名中定义的IP地址。

使用别名的示例

将鼠标光标悬停在“防火墙”>“规则策略”页面的别名上,会显示一个提示,显示别名的内容以及别名中包含的说明。 如下图所示,一张悬停显示主机内容,一张悬停显示端口别名内容。

悬停显示主机内容

悬停显示端口内容

防火墙规则配置实例

本节介绍防火墙规则配置的一般实例。

默认拒绝

与访问控制有关的计算机安全有两个基本原理:默认允许和默认拒绝。防火墙规则的默认拒绝策略是最佳做法。防火墙管理员应该配置规则,只允许最低要求的流量满足网络的需求,并使剩余流量随着pfSense中内置的默认拒绝规则而下降。可以想像,规则集中拒绝规则的数量将是最小的。

在默认的双接口LAN和WAN配置中,pfSense使用WAN上的默认拒绝和LAN上的默认允许。从互联网入站的所有东西都被拒绝,所有从局域网到Internet的东西都是被允许的。所有家庭级路由器都使用这种方法,所有类似的开源项目和大多数类似的商业产品也是如此。这是大多数人所期待的,因此它是默认配置。这虽然这是一个方便的启动方式,但并不是推荐的长期操作方式。

pfSense的用户经常会问:“我应该阻止什么坏事?”但这是错误的问题,因为它适用于默认允许的方法。注意到的安全专业人员Marcus Ranum在他的“计算机安全的六个最愚蠢的想法”文件中包含默认许可证,这是任何安全专业人员的推荐读物。只允许网络需要,并避免在局域网上留下默认允许所有规则,并在允许规则之上添加阻止“坏事”的阻止规则。

保持简短

规则集越短,就越容易管理。 冗长的规则集很难管理,增加人为错误的机会,往往过于宽容,而且审查显然更加困难。 使用别名来保持规则集尽可能简短。

查看防火墙规则

我们建议定期手动检查防火墙规则和NAT配置,以确保它们仍符合当前网络环境的最低要求。 这种检查的频率因环境而异。 在不经常更换的网络中,只有少量的防火墙管理员,每季度或每半年通常就足够了。 对于快速变化的环境或变更控制不佳的人员以及多名防火墙访问人员,至少每月检查一次配置。

通常在与客户审查规则时,我们会询问具体的规则,他们会回答“我们在六个月前删除了该服务器”。如果其他内容会接管与之前的服务器相同的内部IP地址,则流量将被允许访问这个新的服务器,但这可能并不是有意的。

文档配置

在除了最小的网络之外的所有网络中,可能很难回想起配置在哪里以及为什么。 我们总是建议使用防火墙和NAT规则中的描述字段来记录规则的用途。 在更大或更复杂的部署中,创建并维护描述整个pfSense配置的更详细的配置文档。 在将来查看防火墙配置时,这将有助于确定哪些规则是必要的,以及为什么在那里。 这也适用于配置的其他任何区域。

保持这个文件是最新的也是很重要的。 在执行定期的配置审查时,还请查看此文档以确保其保持最新的当前配置。 确保在更改配置时更新这个文档。

减少日志噪声

默认情况下,pfSense将记录被默认拒绝规则阻止的数据包。这意味着从互联网上被阻止的所有噪声都将被记录下来。有时日志中不会有太多的噪音,但是在很多环境下,不可避免地会有东西不停地发送垃圾信息。

在使用大型广播域的网络上 – 有线ISP通常采用这种做法 – 这通常是NetBIOS从缺乏线索的人那里广播,他们将Windows机器直接连接到宽带连接。除此之外,这些机器将不断发出广播请求进行网络浏览。 ISP路由协议分组也可能是可见的,或路由器冗余协议(如VRRP或HSRP)。在诸如数据中心这样的协同定位环境中,可能存在所有这些事物的组合。

由于防火墙在过去一天阻止了一千四百万个NetBIOS广播没有任何价值,而且噪声可能掩盖了重要的日志,所以在WAN接口上添加阻止规则以阻止噪声流量是个好主意。通过在WAN接口上添加未启用日志记录的阻止规则,该流量仍将被阻止,但不再填充日志。

下图中显示的规则是在“WAN”位于边缘防火墙后面的内部LAN上的测试系统上配置的。为了消除日志噪音以查看感兴趣的事情,我们添加了这个规则来阻止 – 但不记录 – 该子网的广播地址的目的地的任何内容。

阻止记录广播的防火墙规则

我们建议添加类似的规则,以匹配网络环境中观察到的任何日志噪声的细节。 在“系统状态”>“系统日志”,“防火墙”选项卡下检查防火墙日志,查看防火墙阻止的流量类型,并查看日志中出现的频率。 如果任何特定流量每分钟记录超过5次,并且流量不是恶意或值得注意的,请为其添加阻止规则以减少记录噪声。

日志分析

pfSense不记录任何通过的流量只记录所有丢弃的流量。 这是几乎所有开源和商业防火墙的典型默认行为。 这是最实际的,因为记录所有通过的流量很少需要,这只会增加负载,增加日志记录的数量。 然而,从安全角度来看,这种方法有些倒退。 被阻止的流量不会损害网络,因此其日志值是有限的,而通过接口的数据可能包含非常重要的日志信息,如果系统受到威胁。 在消除了上一节所述的任何无用的记录噪声之后,为了趋势分析的目的,其余部分是有价值的。 如果观察到明显多于或少于常规的日志数量,那么调查记录流量的性质可能更好。 OSSEC是一个开源的基于主机的***检测系统(IDS),它可以通过系统日志从pfSense收集日志,并根据日志记录的异常情况发出警报。

规则方法论

在pfSense中,接口选项卡上的规则在每个接口上应用,始终在该接口的入站方向上应用。这意味着从LAN发起的流量将使用LAN接口规则进行过滤。通过WAN接口规则过滤从Internet发起的流量。因为默认情况下pfSense中的所有规则都是有状态的,所以当流量匹配允许规则时将创建一个状态表条目。所有的应答流量都被这个状态表项自动允许。

浮动规则(浮动规则)是一个例外,浮动规则可以使用入站、出站或两个方向作用于任何接口。出站规则从不需要,因为在每个接口的入站方向上应用了过滤。在一些有限的情况下,例如具有众多内部接口的防火墙,设置浮动规则可以大大减少所需的防火墙规则的数量。在这种情况下,将互联网流量的出口规则应用为广域网上的出站规则,以避免在每个内部接口上复制出口规则。入站和出站过滤的使用使配置更加复杂,更容易出现用户错误,但在特定的应用程序中可能是需要的。

接口组

接口组是一种同时在多个接口上放置规则的方法。 这可以简化一些规则配置,如果相似的规则在许多接口上需要相同的方式。 接口组规则(如接口规则)仅在入站方向进行处理。 Open***,L2TP和PPPoE服务器的***选项卡都是在幕后自动创建的特殊接口组。

例如,一个组可以用于包括所有LAN或DMZ类型接口或一组VLAN的接口集合。

注意:接口组在多WAN中无效,因为组规则无法正确处理应答。 由于这个缺陷,在没有默认网关的广域网上匹配一个组规则的流量将会通过默认网关从广域网退出,而不是通过它所进入的接口。

规则处理顺序

到目前为止,我们已经谈到了如何在接口选项卡上处理规则,但是有三个主要的规则类:常规接口规则,浮动规则和接口组规则(包括VPN选项卡规则)。 这些类型的处理顺序不同,他们的排序如下:

  • 浮动规则
  • 接口组规则
  • 接口规则

规则在实际的规则集中以这种方式排序,在制定规则时要记住这一点。 例如,如果接口组包含阻止流量的规则,则该规则不能用接口选项卡规则覆盖,因为流量已由规则集中第一个匹配的接口组规则处理。

处理防火墙规则直到找到匹配才停止,但是,如果一个数据包在组规则中不匹配,仍然可以通过接口规则进行匹配。

另一个重要的地方就是分配OpenVPN接口。 如果在OpenVPN选项卡上有一个“全部允许”的规则,它将与接口组规则匹配。 这意味着接口选项卡上的规则将不适用。 这可能是一个问题,如果OpenVPN的规则需要应答,应确保流量通过VPN退出。。

自动添加防火墙规则

由于各种原因,pfSense会自动添加内部防火墙规则。 本节介绍自动添加的规则及其用途。

反锁定规则

为防止将管理员锁定在Web界面之外,pfSense默认启用防锁定规则。 这可以在系统> 高级设置页面上配置。 这个自动添加的规则允许来自包含该规则的网络内的任何源的流量监听LAN IP地址的任何防火墙管理协议。 例如,它允许访问WebGUI的TCP端口443,GUI重定向的TCP端口80以及启用SSH的端口22。 如果WebGUI端口已更改,则配置的端口是防锁定规则所允许的端口。

在具有安全意识的环境中,最佳做法是禁用此规则并配置LAN规则,以便只有可信主机的别名才能访问防火墙的管理界面。 更好的做法是不允许从局域网访问,只能从孤立的管理网络访问。

限制从局域网访问管理界面

首先,根据需要配置防火墙规则,以限制对所需管理界面的访问。 在下图中,SSH和HTTPS都用于管理,因此创建一个包含这些端口的管理端口别名(管理端口别名)。

管理端口的别名

然后为将有权访问管理界面的主机和/或网络创建一个别名(见下图)。

管理主机的别名

生成的别名显示在图形别名列表中。

别名列表

然后,LAN防火墙规则必须配置为允许以前定义的主机访问,并拒绝所有其他访问。 有很多方法可以实现这一点,具体取决于网络环境以及如何处理出口过滤。 下面为两个例子。 第一个允许DNS查询到局域网的IP地址,如果启用了DNS解析器或DNS转发器,这也是允许局域网主机ping局域网IP地址。 然后拒绝所有其他流量。 第二个示例允许从管理主机访问管理端口,然后拒绝所有其他流量到管理端口。 你可以选择最适合的管理办法。 请记住,源端口要设置成与目标端口不同。

示例受限管理LAN规则

受限管理LAN规则备用示例

一旦配置了防火墙规则,请禁用系统>高级设置页面上的webGUI反锁定规则。 选中该框并单击保存。

注意:如果在禁用防锁定规则之后,管理接口不能再被访问,则防火墙规则没有被适当地配置。 通过在控制台菜单中使用“设置接口IP地址”选项重新启用防锁定规则,然后选择重置LAN IP地址。 将其设置为当前的IP地址,规则将自动重新启用。

禁用防锁定规则

反欺骗规则

pfSense使用pf中的antispoof功能来阻止欺骗性流量。 这提供了RFC3704中定义的单播反向路径转发(uRPF)功能。防火墙根据其路由表检查每个分组,并且如果连接尝试来自防火墙已知的网络上不驻留接口上的源IP地址, 它将被丢弃。 例如,带有内部网络源IP地址的广域网包将被丢弃。 内部网络上发起的任何内容都不在内部网络上的源IP地址将被丢弃。

阻止专用网络

WAN接口上的“阻止专用网络”选项会自动为RFC 1918子网设置阻止规则。 除非在WAN上使用专用IP空间,否则启用此选项。 这只适用于WAN端发起的流量。 本地客户端仍可能从防火墙内部到达专用网络上的主机。 此选项可用于任何接口,但通常仅用于WAN类型接口。 可以手动创建一个类似的规则,通过创建一个包含RFC 1918子网的别名,并在接口规则的顶部添加一个防火墙规则来阻止与该别名匹配的源的流量,从而阻止接口上的专用网络。

阻止Bogon网络

Bogon网络是那些永远不应该在互联网上看到的网络,包括保留和未分配的IP地址空间。 来自这些网络的流量的存在可能表明欺骗性流量或未被使用的子网被劫持以供恶意使用。 pfSense提供了两个bogons列表,根据需要进行更新,一个用于IPv4 bogon网络,一个用于IPv6 bogon网络。 如果启用Block bogon网络,则防火墙将在每个月的第一天从files.pfsense.org获取更新的bogons列表。 该脚本在当地时间凌晨3点运行。 这个列表并不经常改变,新的IP地址分配在实际使用之前的几个月已从移动列表中删除,所以每月更新就足够了。 如果必须更频繁地更新列表,请在“系统>高级设置”的“防火墙和NAT”选项卡上更改更新频率。

注意:IPv6的列表非常庞大,如果系统中没有足够的内存,或者表项的最大数量不足以包含它,则可能无法加载。

确保防火墙可以解析DNS主机名,否则更新将失败。 要确保防火墙解析DNS,请浏览至系统诊断> DNS查找,然后尝试解析files.pfsense.org。 如果可行,则进入系统诊断>测试端口并尝试连接到files.pfsense.org的80端口,如下图所示。

测试Bogon更新的连接性

强制bogons更新

由于bogon名单变化相对较少,每月更新的bogon已经足够。 但是,可能会出现手动bogon更新的情况,例如,由于DNS配置不正确导致bogon更新失败。 在系统诊断> 表中通过防火墙Web界面执行更新,方法是选择bogons或bogonsv6,然后单击  更新。

IPsec

当启用站点到站点IPsec连接时,会自动添加规则,允许远程隧道端点IP地址访问UDP端口500和4500,以及用于连接的WAN IP地址上的ESP协议。 当启用移动客户端的IPsec时,允许相同的流量,但是来自任何来源,而不是特定的源地址。

由于策略路由的工作方式,任何匹配指定网关的规则的流量都将被强制传输到Internet,并绕过IPsec处理。 规则会自动添加以取消流向远程***子网流量的策略路由,但并不总是具有预期的效果。 要禁用自动否定规则,并在内部接口上的规则顶部添加防火墙规则,以将流量传递到没有网关集的***。

提示:自动添加的IPsec规则将在IPsec中进一步讨论。

默认拒绝规则

不符合任何用户定义的规则或其他自动添加的规则则将被默认拒绝规则拒绝。

此条目发表在pfSense分类目录。将固定链接加入收藏夹。