18.1 防火墙概论
防火墙用于过滤进出系统的流量。它使用一个或多个“规则”集检查网络数据包,在数据包进入或离开网络连接时决定允许通过还是阻止。规则可检查数据包的一个或多个特征,如协议类型、源地址或目标地址、源端口或目标端口。
防火墙可以增强主机或网络的安全性。它们可以执行以下一项或多项操作:
- 保护并隔离内部网络的应用程序、服务和主机,使其免受公共互联网不良流量的侵扰。
- 限制或禁用内部网络的主机访问公共互联网服务。
- 支持网络地址转换(NAT),内部网络可使用私有 IP 地址,并通过单一 IP 地址或共享地址池中的公共地址连接公共互联网。
FreeBSD 内置三种防火墙:PF、IPFW 和 IPFILTER(也称 IPF)。此外还提供两种流量整形工具以控制带宽:altq(4) 和 dummynet(4)。ALTQ 通常与 PF 紧密关联,dummynet 则与 IPFW 紧密关联。三种防火墙均通过规则控制进出 FreeBSD 系统的数据包访问,但实现方式各异,规则语法也不相同。
FreeBSD 提供多种防火墙,用户应根据自身需求选择。
注意
所有防火墙均通过检查数据包控制字段的值来工作,因此规则集的编写者需要了解 TCP/IP 的工作原理、数据包控制字段中各值的含义,以及这些值在正常会话中的使用方式。
规则集包含一组规则,依据数据包中所含值决定允许通过还是阻止。主机之间的双向数据包交换构成一次会话。防火墙规则集既处理来自公共互联网的数据包,也处理系统对这些数据包作出的响应数据包。每个 TCP/IP 服务由其协议和监听端口定义。指向特定服务的数据包源自非特权端口,目标为特定地址上的服务端口。上述参数均可作为选择标准来创建规则,从而允许或阻止服务。
要查找未知的端口号,请参阅 /etc/services。此外,特洛伊木马也可能使用未知端口,需要额外留意。
FTP 有两种模式:主动模式和被动模式,两者的区别在于如何获取数据通道。其中,因为数据通道是由发起 FTP 会话的客户端获得的,所以被动模式更安全。
防火墙规则集可分为“排他性”与“包容性”两类。除非流量与规则集匹配,排他性防火墙对所有流量一律允许通过。包容性防火墙则反之:仅允许匹配规则的流量通过,阻止其余所有流量。
包容性防火墙能更好地控制出站流量,对提供公共互联网服务的系统是更好的选择。它同时控制来自公共互联网的流量,决定哪些流量可以访问私有网络。所有不匹配规则的流量均被阻止并记录。包容性防火墙因显著降低了允许不良流量通过的风险,通常比排他性防火墙更安全。
注意
除非另有说明,本章中的所有配置和示例规则集均采用包容性防火墙规则集。
有状态防火墙可进一步加强安全性。有状态防火墙会跟踪打开的连接,仅允许与现有连接匹配的流量,或用于建立新连接的数据包。
有状态过滤将流量视作一次双向数据包交换的会话。规则中指定状态后,防火墙会动态生成每个预期数据包的内部规则,能够匹配并判定数据包是否属于该会话。若数据包不符合会话模板,即自动拒绝。
会话完成后,该会话即从动态状态表中移除。
有状态过滤使用户专注于阻止或允许新的会话。新会话一旦允许,所有后续数据包自动放行,任何伪造的数据包均自动拒绝;若阻止新会话,则任何后续数据包均不会允许通过。有状态过滤具备先进的匹配能力,可防御攻击者采用的各种攻击方法。
NAT(网络地址转换)功能使防火墙后的私有局域网可以共享 ISP 分配的单一 IP 地址(即便该地址是动态分配的)。NAT 使局域网中每台计算机均能访问互联网,无需为多个互联网账户或 IP 地址支付额外费用。
数据包经防火墙发往公共互联网时,NAT 自动将各系统的私有局域网 IP 地址转换为单一公共 IP 地址。返回的数据包则执行反向转换操作。
根据 RFC 1918,以下 IP 地址范围保留供私有网络使用,这些地址永远不会直接路由到公共互联网,故可与 NAT 配合使用:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
警告
使用防火墙规则时,务必 小心谨慎。某些配置可能会导致管理员无法登录服务器。为了安全起见,建议通过本地控制台执行初始防火墙配置,而不是通过 SSH 远程配置。
18.1.1 课后习题
- 在 FreeBSD 上分别安装 PF、IPFW 和 IPFILTER,阅读各自的默认规则文件,比较三种防火墙规则语法的差异。
- 编写一套包容性 PF 规则集:允许 SSH(端口 22)和 HTTP/HTTPS(端口 80/443),阻止其余所有入站流量,并在本地控制台测试规则是否生效。
- 使用 NAT 将一台 FreeBSD 主机配置为网关,使局域网内的其他设备通过该主机访问互联网,记录 /etc/pf.conf 中的 NAT 规则和
sysctl参数设置。 - 构造一个测试场景:在远程 SSH 会话中应用错误的防火墙规则,观察连接中断的现象,然后说明为何应在本地控制台执行防火墙配置。