防火墙是什么以及它是如何工作的?

介绍

A firewall is a system that provides network security by filtering incoming and outgoing network traffic based on a set of user-defined rules. In general, the purpose of a firewall is to reduce or eliminate the occurrence of unwanted network communications while allowing all legitimate communication to flow freely. In most server infrastructures, firewalls provide an essential layer of security that, combined with other measures, prevent attackers from accessing your servers in malicious ways.

本指南将讨论防火墙的工作原理,重点放在云服务器相关的状态型软件防火墙,如iptables和FirewallD。我们将从简要解释TCP数据包和不同类型的防火墙开始。然后我们将讨论一系列与状态型防火墙相关的主题。最后,我们将提供链接到其他教程,帮助您在自己的服务器上设置防火墙。

TCP网络数据包

在讨论不同类型的防火墙之前,让我们快速了解一下传输控制协议(TCP)网络流量的外观。

TCP网络流量在网络中以数据包的形式传输,这些数据包是一种容器,包含数据包头部 – 包含控制信息,如源地址和目标地址,以及数据包序列信息 – 和数据(也称为有效负载)。虽然每个数据包中的控制信息有助于确保其关联的数据得到正确传输,但它所包含的元素也为防火墙提供了各种匹配数据包与防火墙规则的方式。

重要的是要注意,成功接收传入的TCP数据包需要接收方向发送方发送回应数据包。传入和传出数据包中的控制信息的组合可以用于确定发送方和接收方之间的连接状态(例如,新建立,已建立,相关)。

防火墙的类型

让我们快速讨论网络防火墙的三种基本类型:数据包过滤(无状态),有状态和应用层。

数据包过滤,或无状态,防火墙通过独立检查单个数据包来工作。因此,它们不了解连接状态,只能根据单个数据包的头部允许或拒绝数据包。

有状态防火墙能够确定数据包的连接状态,这使它们比无状态防火墙更灵活。它们通过收集相关数据包直到连接状态可以确定之前,才对流量应用任何防火墙规则。

应用层防火墙更进一步通过分析正在传输的数据,这使得网络流量可以与针对个别服务或应用程序的防火墙规则匹配。这些也被称为基于代理的防火墙。

除了防火墙软件,现代操作系统都提供了,防火墙功能也可以由硬件设备提供,例如路由器或防火墙设备。再次强调,我们的讨论将集中在运行在它们所保护的服务器上的有状态软件防火墙。

防火墙规则

如上所述,穿过防火墙的网络流量会与规则进行匹配,以确定是否允许通过。解释防火墙规则的简单方法是展示一些例子,所以我们现在来做。

假设您有一台服务器,并有以下适用于传入流量的防火墙规则列表:

  1. 允许到公共网络接口上的端口80和443(HTTP和HTTPS Web流量)的新建立的传入流量
  2. 阻止来自办公室非技术员工IP地址到端口22(SSH)的传入流量
  3. 允许来自您办公室IP范围到私有网络接口上的端口22(SSH)的新建立的传入流量

注意,这些示例中的每个第一个词要么是“接受”,“拒绝”或“丢弃”。这指定了防火墙在网络流量匹配规则时应执行的操作。接受表示允许流量通过,拒绝表示阻止流量并回复“不可达”错误,丢弃表示阻止流量并不发送回复。每个规则的其余部分都由每个数据包匹配的条件组成。

事实证明,网络流量是根据防火墙规则列表中的顺序或链进行匹配的,从第一个到最后一个。更具体地说,一旦匹配到规则,就会将相关操作应用于相关的网络流量。在我们的例子中,如果会计员尝试建立到服务器的SSH连接,则会根据规则2被拒绝,甚至在检查规则3之前。然而,系统管理员会被接受,因为他们只匹配规则3。

默认策略

典型的防火墙规则链通常不能明确涵盖每种可能的条件。因此,防火墙链必须始终指定默认策略,该策略仅包括一个操作(接受、拒绝或丢弃)。

假设以上示例链的默认策略设置为drop。 如果您办公室外的任何计算机尝试与服务器建立SSH连接,则流量将被丢弃,因为它不符合任何规则的条件。

如果默认策略设置为accept,除了您自己的非技术员工之外,任何人都可以与服务器上的任何开放服务建立连接。这将是一个非常糟糕的配置防火墙的示例,因为它只阻止了您员工的一个子集。

入站和出站流量

从服务器的角度来看,作为网络流量的流量可以是入站或出站的,防火墙为每种情况维护一组明确的规则。起源于其他地方的流量,即入站流量,与服务器发送的出站流量处理方式不同。通常,服务器允许大多数出站流量,因为服务器通常对自己是可信的。但是,在服务器被攻击者或恶意可执行文件入侵的情况下,出站规则集可以用于阻止不必要的通信。

为了最大限度地提高防火墙的安全性能,您应该确定其他系统与您的服务器交互的所有方式,创建明确允许它们的规则,然后丢弃所有其他流量。请记住,必须设置适当的出站规则,以便服务器允许自己向任何适当的传入连接发送出站确认。另外,由于服务器通常需要为各种原因启动自己的出站流量,例如下载更新或连接数据库,因此在出站规则集中包含这些情况非常重要。

编写出站规则

假设我们的示例防火墙被设置为默认情况下丢弃出站流量。这意味着我们的传入接受规则将没有用处,除非有相应的出站规则。

为了补充示例传入防火墙规则(1和3),从防火墙规则部分,并允许在那些地址和端口上进行适当的通信,我们可以使用以下出站防火墙规则:

  1. 接受已建立的对公共网络接口上端口80和443(HTTP和HTTPS)的出站流量
  2. 接受已建立的对私有网络接口上端口22(SSH)的出站流量

请注意,我们不需要为被丢弃的传入流量明确编写规则(传入规则2),因为服务器不需要建立或确认该连接。

防火墙软件和工具

现在我们已经了解了防火墙的工作原理,让我们来看看可以帮助我们建立有效防火墙的常见软件包。虽然还有许多其他与防火墙相关的软件包,但这些是有效的,也是您最常遇到的。

Iptables

Iptables是大多数Linux发行版默认包含的标准防火墙(一个称为nftables的现代变体将开始替代它)。它实际上是一个前端,用于操作Linux网络堆栈的内核级netfilter钩子。它通过将通过网络接口传输的每个数据包与一组规则进行匹配,以决定要执行什么操作。

要学习如何使用iptables实现防火墙,请查看以下链接:

UFW

UFW,全称Uncomplicated Firewall,是一个针对简化配置防火墙过程的iptables接口。

要了解更多关于使用UFW的信息,请查阅本教程:如何在Ubuntu和Debian云服务器上使用UFW设置防火墙

FirewallD

FirewallD是默认情况下在CentOS 7服务器上提供的完整防火墙解决方案。恰巧地,FirewallD使用iptables来配置netfilter。

要了解更多关于使用FirewallD的信息,请查阅本教程:如何配置FirewallD以保护您的CentOS 7服务器

如果您正在运行 CentOS 7 但更喜欢使用 iptables,请按照这个教程:如何在 CentOS 7 上从 FirewallD 迁移到 Iptables

Fail2ban

Fail2ban 是一款入侵防御软件,可以自动配置防火墙来阻止暴力登录尝试和 DDOS 攻击。

要了解更多关于 Fail2ban 的信息,请查看以下链接:

总结

现在您了解了防火墙的工作原理,您应该查看上述教程,实施一个能够提高服务器设置安全性的防火墙。

如果您想了解更多关于防火墙的工作原理,请查看以下链接:

Source:
https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work