33.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)。此外,特洛伊木马也可能使用未知端口,需要额外留意。
防火墙规则集可分为“排他性”与“包容性”两类。除非流量与规则集匹配,排他性防火墙对所有流量一律允许通过。包容性防火墙则反之:仅允许匹配规则的流量通过,阻止其余所有流量。
包容性防火墙能更好地控制出站流量,对提供公共互联网服务的系统是更合适的选择。它同时控制来自公共互联网的流量,决定哪些流量可以访问私有网络。所有不匹配规则的流量均被阻止并记录。包容性防火墙因降低了允许不良流量通过的风险,通常比排他性防火墙更安全。
注意
除非另有说明,本章中的所有配置和示例规则集均采用包容性防火墙规则集。
有状态防火墙可增强安全性。有状态防火墙会跟踪打开的连接,仅允许与现有连接匹配的流量,或用于建立新连接的数据包。
有状态过滤将流量视作一次双向数据包交换的会话。规则中指定状态后,防火墙会动态生成每个预期数据包的内部规则,能够匹配并判定数据包是否属于该会话。如果数据包不符合会话模板,即自动拒绝。
会话完成后,即从动态状态表中移除该会话。
有状态过滤使用户专注于阻止或允许新的会话。新会话一旦允许,所有后续数据包自动放行,任何伪造的数据包均自动拒绝;若阻止新会话,则任何后续数据包均不会允许通过。有状态过滤具备强大的匹配能力,可防御各种攻击方法。
NAT(网络地址转换)是一项核心的网络路由技术,其主要功能是在局域网的私有 IP 地址与互联网的公网 IP 地址之间,执行动态的映射与报文头部替换。NAT 使防火墙后的私有局域网可以共享 ISP( the Internet service provider,互联网服务提供方)分配的单一 IP 地址(即便该地址是动态分配的)。NAT 使局域网中每台计算机均能访问互联网,无需为多个互联网账户或 IP 地址支付额外费用。
数据包经防火墙发往公共互联网时,NAT 自动将各系统的私有局域网 IP 地址转换为单一公共 IP 地址。返回的数据包则执行反向转换。
根据 RFC 1918,以下 IP 地址范围保留供私有网络使用,这些地址永远不会直接路由到公共互联网,因此可与 NAT 配合使用:
| 地址范围 | 备注 |
|---|---|
10.0.0.0/8 | RFC 1918 私有地址 |
172.16.0.0/12 | RFC 1918 私有地址 |
192.168.0.0/16 | RFC 1918 私有地址 |
警告
使用防火墙规则时,务必 小心谨慎。某些配置可能会导致管理员无法登录服务器。为了安全起见,建议通过本地控制台执行初始防火墙配置,而不是通过 SSH 远程配置。