Skip to content

29.1 防火墙概论

防火墙部署于两个网络之间。它依据预设规则,对所有跨网数据流进行管控与过滤,从而保护特定网络或局部网段免受未经授权的访问。具体来说,防火墙使用一到多个“规则”集检查网络数据包,在数据包进入或离开网络连接时决定允许通过还是阻止。规则可检查数据包的一个或多个特征,如协议类型、源地址与目标地址、源端口与目标端口。因此可以看出,防火墙主要由服务访问规则、验证工具、包过滤和应用网关(连接两个不同的计算机网络)四个部分组成。

防火墙可以增强主机或网络的安全性。它们可以执行以下一项或多项操作:

  • 保护并隔离内部网络的应用程序、服务和主机,使其免受公共互联网不良流量的侵扰。
  • 限制或禁用内部网络的主机访问公共互联网服务。
  • 支持网络地址转换(NAT),内部网络可使用私有 IP 地址,并通过单一 IP 地址或共享地址池中的公共地址连接公共互联网。

FreeBSD 内置三种防火墙:PF、IPFW 和 IPFILTER(也称 IPF)。此外还提供两种流量整形工具以控制带宽:altq(4) 和 dummynet(4)。

流量整形(Traffic Shaping)旨在优化或保障网络性能,其核心是对网络数据流的特征进行主动调节。具体而言,它通过对部分数据包进行限速和缓冲延迟,将原本不规则的流量重塑为平滑的输出流,从而确保网络传输严格符合预设应用在速率、延迟及抖动等方面的服务质量(QoS)标准。

服务质量(QoS)标准是计算机网络对数据包传输质量的一种承诺,通常通过带宽、延迟及丢包率等性能指标来衡量。然而,现代互联网在架构设计上采用的是“尽力而为(Best-Effort)”的传输模式。这意味着网络节点会竭尽全力去转发每一个数据包,但在机制上并不提供任何绝对的送达或性能担保。

交替队列(Alternate Queuing,ALTQ)通常与 PF 紧密关联,dummynet 则与 IPFW 紧密关联。三种防火墙均通过规则控制进出 FreeBSD 系统的数据包访问,但实现方式各异,规则语法也不相同。

FreeBSD 提供多种防火墙,用户应根据自身需求选择。

注意

所有防火墙均通过检查数据包控制字段的值来工作,因此规则集的编写者需要了解 TCP/IP 的工作原理、数据包控制字段中各值的含义,以及这些值在正常会话中的使用方式。

规则集包含一组规则,依据数据包中所含值决定允许通过还是阻止。主机之间的双向数据包交换构成一次会话。防火墙规则集既处理来自公共互联网的数据包,也处理系统对这些数据包作出的响应数据包。每个 TCP/IP 服务由其协议和监听端口定义。指向特定服务的数据包源自非特权端口,目标为特定地址上的服务端口。上述参数均可作为选择标准来创建规则,从而允许或阻止服务。

要查找未知的端口号,请参阅 /etc/services(源代码位于 usr.sbin/services_mkdb/services)。此外,特洛伊木马也可能使用未知端口,需要额外留意。

防火墙规则集可分为“排他性”与“包容性”两类。除非流量与规则集匹配,排他性防火墙对所有流量一律允许通过。包容性防火墙则反之:仅允许匹配规则的流量通过,阻止其余所有流量。

包容性防火墙能更好地控制出站流量,对提供公共互联网服务的系统是更合适的选择。它同时控制来自公共互联网的流量,决定哪些流量可以访问私有网络。所有不匹配规则的流量均被阻止并记录。包容性防火墙因降低了允许不良流量通过的风险,通常比排他性防火墙更安全。

注意

除非另有说明,本章中的所有配置和示例规则集均采用包容性防火墙规则集。

有状态防火墙可增强安全性。有状态防火墙会跟踪打开的连接,仅允许与现有连接匹配的流量,或用于建立新连接的数据包。

有状态过滤将流量视作一次双向数据包交换的会话。规则中指定状态后,防火墙会动态生成每个预期数据包的内部规则,能够匹配并判定数据包是否属于该会话。如果数据包不符合会话模板,即自动拒绝。

会话完成后,即从动态状态表中移除该会话。

有状态过滤使用户专注于阻止或允许新的会话。新会话一旦允许,所有后续数据包自动放行,任何伪造的数据包均自动拒绝;若阻止新会话,则任何后续数据包均不会允许通过。有状态过滤具备强大的匹配能力,可防御各种攻击方法。

sh
新会话请求

  匹配规则?
   ├── ──► 拒绝



创建动态状态表条目

  后续数据包

检查动态状态表

   ├── 匹配会话?── ──► 放行



拒绝(伪造数据包)

  会话完成

移除动态状态表条目

NAT(网络地址转换)是一项核心的网络路由技术,其主要功能是在局域网的私有 IP 地址与互联网的公网 IP 地址之间,执行动态的映射与报文头部替换。NAT 使防火墙后的私有局域网可以共享 ISP( the Internet service provider,互联网服务提供方)分配的单一 IP 地址(即便该地址是动态分配的)。NAT 使局域网中每台计算机均能访问互联网,无需为多个互联网账户或 IP 地址支付额外费用。

数据包经防火墙发往公共互联网时,NAT 自动将各系统的私有局域网 IP 地址转换为单一公共 IP 地址。返回的数据包则执行反向转换。

sh
内网主机(私有 IP)

  出站数据包

NAT 转换

 IP:私有 公网

公共互联网

  返回数据包

NAT 反向转换

  目标 IP:公网 私有

内网主机(私有 IP)

根据 RFC 1918,以下 IP 地址范围保留供私有网络使用,这些地址永远不会直接路由到公共互联网,因此可与 NAT 配合使用:

地址范围备注
10.0.0.0/8RFC 1918 私有地址
172.16.0.0/12RFC 1918 私有地址
192.168.0.0/16RFC 1918 私有地址

警告

使用防火墙规则时,务必 小心谨慎。某些配置可能会导致管理员无法登录服务器。为了安全起见,建议通过本地控制台执行初始防火墙配置,而不是通过 SSH 远程配置。