# 33.2.防火墙的概念

规则集包含一组规则，这些规则根据数据包中包含的值来决定是否放行或阻止数据包。主机之间的双向数据包交换构成了一个会话对话。防火墙规则集处理来自公共互联网的数据包，以及系统响应这些数据包所产生的数据包。每个 TCP/IP 服务都由其协议和监听端口预定义。指向特定服务的数据包来自使用非特权端口的源地址，并且目标是目标地址上的特定服务端口。所有上述参数都可以用作选择标准来创建规则，从而放行或阻止服务。

要查找未知的端口号，请参阅 **/etc/services**。或者，访问 <https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers>，进行端口号查找，以找出特定端口号的用途。

查看这个链接了解 [特洛伊木马使用的端口](http://web.archive.org/web/20150803024617/http://www.sans.org/security-resources/idfaq/oddports.php)。

FTP 有两种模式：主动模式和被动模式。它们的区别在于如何获取数据通道。被动模式更安全，因为数据通道是由发起 FTP 会话的客户端获得的。要了解有关 FTP 和不同模式的详细解释，请参阅 <http://www.slacksite.com/other/ftp.html>。

防火墙规则集可以是“排他性”或“包容性”的。排他性防火墙允许所有流量通过，除非流量与规则集匹配。包容性防火墙则反之，它仅允许匹配规则的流量通过，阻止其他所有流量。

包容性防火墙提供了更好的控制出站流量的能力，因此对于提供公共互联网服务的系统来说，它是更好的选择。它还控制了来自公共互联网的流量，决定哪些流量可以访问私有网络。所有不匹配规则的流量都会被阻止并记录。包容性防火墙通常比排他性防火墙更安全，因为它们显著减少了允许不良流量的风险。

> **注意**
>
> 除非另有说明，本章中的所有配置和示例规则集都创建包容性防火墙规则集。

安全性可以通过使用“有状态防火墙”进一步加强。这种类型的防火墙会跟踪打开的连接，只允许与现有连接匹配或打开新的允许连接的流量。

有状态过滤将流量视为一个双向数据包交换的会话。当规则中指定了状态时，防火墙会动态生成每个预期数据包的内部规则。它具有足够的匹配能力来确定一个数据包是否适合会话。如果数据包不符合会话模板，它会被自动拒绝。

当会话完成时，它会从动态状态表中移除。

有状态过滤使得用户可以专注于阻止或放行新的会话。如果新的会话被放行，所有后续数据包将自动允许，任何伪造的数据包都会被自动拒绝。如果新的会话被阻止，则它的任何后续数据包都不会被允许。有状态过滤提供了先进的匹配能力，能够防御攻击者采用的各种攻击方法。

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 远程操作。
