介绍
设置一个好的防火墙是保护任何现代操作系统的重要步骤。 大多数 Linux 发行版都附带了一些不同的防火墙工具,我们可以使用它们来配置我们的防火墙。 在本指南中,我们将介绍 iptables
防火墙。
iptables 是大多数 Linux 发行版默认包含的标准防火墙(称为 nftables
的现代变体将开始取代它)。 它实际上是可以操纵 Linux 网络堆栈的内核级 netfilter 钩子的前端。 它通过将通过网络接口的每个数据包与一组规则进行匹配来决定要做什么来工作。
在本指南中,我们将讨论 iptables 的工作原理。 在本系列的下一篇文章中,我们将向您展示 如何配置一组基本规则来保护您的 Ubuntu 14.04 服务器 。
iptables 是如何工作的
在我们开始讨论控制 iptables 和构建防火墙策略所需的实际命令之前,让我们回顾一些术语并讨论 iptables 的工作原理。
iptables 防火墙通过将网络流量与一组 规则 进行比较来运行。 规则定义了数据包与规则匹配所必须具备的特征,以及为匹配数据包应采取的操作。
有许多选项可以确定哪些数据包与特定规则匹配。 您可以匹配数据包协议类型、源或目标地址或端口、正在使用的接口、它与先前数据包的关系等。
当定义的模式匹配时,发生的动作称为 target。 目标可以是数据包的最终策略决策,例如接受或丢弃。 它也可以将数据包移动到不同的链进行处理,或者简单地记录遭遇。 有很多选择。
这些规则被组织成称为 chains 的组。 链是按顺序检查数据包的一组规则。 当数据包匹配其中一个规则时,它会执行相关操作,并且不会针对链中的其余规则进行检查。
用户可以根据需要创建链。 默认定义了三个链。 他们是:
- INPUT:这个链处理所有发往你服务器的数据包。
- OUTPUT:此链包含服务器创建的流量规则。
- FORWARD:此链用于处理发往未在您的服务器上创建的其他服务器的流量。 该链基本上是一种配置服务器以将请求路由到其他机器的方法。
每个链可以包含零个或多个规则,并具有默认的 policy。 该策略确定当数据包通过链中的所有规则丢弃并且不匹配任何规则时会发生什么。 如果没有规则匹配,您可以丢弃数据包或接受数据包。
通过可以通过规则加载的模块,iptables 还可以跟踪连接。 这意味着您可以创建规则,根据数据包与先前数据包的关系来定义数据包会发生什么。 我们将此功能称为“状态跟踪”、“连接跟踪”或配置“状态机”。
对于本指南,我们将主要介绍 INPUT 链的配置,因为它包含一组规则,可以帮助我们拒绝指向我们服务器的不需要的流量。
IPv4 与 IPv6
Linux 内核中包含的 netfilter 防火墙使 IPv4 和 IPv6 流量完全分离。 同样,用于操作包含防火墙规则集的表的工具也是不同的。 如果您在服务器上启用了 IPv6,则必须配置这两个表以解决您的服务器所承受的流量。
常规的 iptables
命令用于操作包含管理 IPv4 流量的规则的表。 对于 IPv6 流量,使用名为 ip6tables
的伴随命令。 这是内部化的重要一点,因为这意味着您使用 iptables
设置的任何规则都不会影响使用协议版本 6 的数据包。
这些孪生命令之间的语法是相同的,因此为这些表中的每一个创建一个规则集并不会过于繁琐。 只要记住在进行更改时修改这两个表即可。 iptables
命令将制定适用于 IPv4 流量的规则,而 ip6tables
命令将制定适用于 IPv6 流量的规则。
您必须确保使用服务器的适当 IPv6 地址来制定 ip6tables
规则。
要记住的事情
现在我们知道 iptables 如何引导通过其接口的数据包(将数据包引导到适当的链,根据每个规则检查它直到匹配,如果没有找到匹配则发出链的默认策略),我们可以开始看到在制定规则时需要注意一些陷阱。
首先,如果我们实施默认丢弃策略,我们需要确保我们有规则来保持当前连接处于活动状态。 如果您通过 SSH 连接到服务器,这一点尤其重要。 如果您不小心实施了断开当前连接的规则或策略,您始终可以使用 Web 控制台登录您的 DigitalOcean VPS,该控制台提供带外访问。
要记住的另一件事是每个链中规则的顺序 很重要 。 如果数据包旨在匹配更具体的规则,则它不能遇到它匹配的更一般的规则。
因此,靠近链顶部的规则应该比底部的规则具有更高的特异性。 您应该首先匹配特定情况,然后提供更通用的规则来匹配更广泛的模式。 如果一个数据包穿过整个链(不匹配任何规则),它将命中 most 通用规则,默认策略。
出于这个原因,链的默认策略非常强烈地规定了将包含在链中的规则类型。 具有默认策略 ACCEPT 的链将包含明确丢弃数据包的规则。 默认为 DROP 的链将包含应明确接受的数据包的异常。
结论
此时,了解 iptables 工作原理的最简单方法是使用它来实现自己的防火墙。
在下一个指南中,我们将展示 如何在 Ubuntu 14.04 上创建基本的 iptables 防火墙。 除了您要允许的少数服务外,这将锁定您的服务器。