什么是防火墙,它是如何工作的?
介绍
防火墙是一种通过根据一组用户定义的规则过滤传入和传出网络流量来提供网络安全的系统。 一般来说,防火墙的目的是减少或消除不需要的网络通信的发生,同时允许所有合法通信自由流动。 在大多数服务器基础架构中,防火墙提供了重要的安全层,结合其他措施,防止攻击者以恶意方式访问您的服务器。
本指南将讨论防火墙的工作原理,重点介绍与云服务器相关的 有状态 软件防火墙,例如 iptables 和 FirewallD。 我们将从 TCP 数据包和不同类型的防火墙的简要说明开始。 然后我们将讨论与状态防火墙相关的各种主题。 最后,我们将提供其他教程的链接,这些教程将帮助您在自己的服务器上设置防火墙。
TCP 网络数据包
在讨论不同类型的防火墙之前,让我们快速了解一下传输控制协议 (TCP) 网络流量的样子。
TCP 网络流量以 数据包 的形式在网络中移动,这些数据包是由数据包头组成的容器——它包含控制信息,如源地址和目标地址,以及数据包序列信息——以及数据(也称为有效载荷)。 虽然每个数据包中的控制信息有助于确保其相关数据得到正确传递,但它包含的元素还为防火墙提供了多种方式来匹配数据包与防火墙规则。
需要注意的是,成功接收传入的 TCP 数据包需要接收方将传出的确认数据包发送回发送方。 传入和传出数据包中的控制信息的组合可用于确定连接状态(例如 发送者和接收者之间的新的,建立的,相关的)。
防火墙类型
让我们快速讨论三种基本类型的网络防火墙:包过滤(无状态)、有状态和应用层。
包过滤或无状态防火墙通过隔离检查单个数据包来工作。 因此,它们不知道连接状态,只能根据单个数据包头允许或拒绝数据包。
有状态防火墙能够确定数据包的连接状态,这使得它们比无状态防火墙更加灵活。 它们通过收集相关数据包来工作,直到可以在将任何防火墙规则应用于流量之前确定连接状态。
应用程序防火墙通过分析正在传输的数据更进一步,允许将网络流量与特定于单个服务或应用程序的防火墙规则进行匹配。 这些也称为基于代理的防火墙。
除了在所有现代操作系统上都可用的防火墙软件外,防火墙功能还可以由硬件设备提供,例如路由器或防火墙设备。 同样,我们的讨论将集中在 有状态 软件防火墙上,这些防火墙在它们打算保护的服务器上运行。
防火墙规则
如上所述,穿越防火墙的网络流量与规则相匹配,以确定是否应允许通过。 解释防火墙规则是什么样子的一种简单方法是展示几个示例,所以我们现在就这样做。
假设您的服务器具有适用于传入流量的防火墙规则列表:
- 在端口 80 和 443 上接受到公共网络接口的新的和已建立的传入流量(HTTP 和 HTTPS 网络流量)
- 将来自办公室非技术员工 IP 地址的传入流量丢弃到端口 22 (SSH)
- 接受从您的办公室 IP 范围到端口 22 (SSH) 上的专用网络接口的新的和已建立的传入流量
请注意,每个示例中的第一个单词是“accept”、“reject”或“drop”。 这指定了在网络流量与规则匹配的情况下防火墙应执行的操作。 Accept 表示允许流量通过,reject 表示阻止流量但回复“无法访问”错误,drop 表示阻止流量并发送无回复。 每个规则的其余部分由每个数据包匹配的条件组成。
事实证明,网络流量与防火墙规则列表按顺序或链从头到尾进行匹配。 更具体地说,一旦匹配了规则,相关的操作就会应用于所讨论的网络流量。 在我们的示例中,如果会计员工试图建立与服务器的 SSH 连接,他们将根据规则 2 被拒绝,甚至在规则 3 被检查之前。 但是,系统管理员会被接受,因为他们只匹配规则 3。
默认策略
防火墙规则链通常不会明确涵盖所有可能的条件。 因此,防火墙链必须始终指定一个默认策略,该策略仅包含一个操作(接受、拒绝或丢弃)。
假设上述示例链的默认策略设置为 drop。 如果您办公室外的任何计算机尝试与服务器建立 SSH 连接,则流量将被丢弃,因为它不符合任何规则的条件。
如果默认策略设置为 accept,那么除了您自己的非技术员工之外,任何人都可以与您服务器上的任何开放服务建立连接。 这将是一个配置非常差的防火墙的示例,因为它只会将您的一部分员工拒之门外。
传入和传出流量
由于从服务器的角度来看,网络流量可以是传入或传出的,因此防火墙为这两种情况维护一组不同的规则。 源自其他地方的流量(传入流量)的处理方式与服务器发送的传出流量不同。 服务器通常允许大多数传出流量,因为服务器通常对自己来说是可信赖的。 尽管如此,在服务器被攻击者或恶意可执行文件破坏的情况下,传出规则集仍可用于防止不需要的通信。
为了最大限度地发挥防火墙的安全优势,您应该确定您希望其他系统与您的服务器交互的所有方式,创建明确允许它们的规则,然后丢弃所有其他流量。 请记住,必须制定适当的传出规则,以便服务器允许自己向任何适当的传入连接发送传出确认。 此外,由于服务器通常出于各种原因需要启动自己的传出流量(例如,下载更新或连接到数据库),因此将这些情况也包括在传出规则集中也很重要。
编写传出规则
假设我们的示例防火墙默认设置为 drop 传出流量。 这意味着如果没有互补的传出规则,我们传入的 accept 规则将毫无用处。
为了补充示例传入防火墙规则(1 和 3),来自 Firewall Rules 部分,并允许在这些地址和端口上进行正确通信,我们可以使用这些传出防火墙规则:
- 在端口 80 和 443(HTTP 和 HTTPS)上接受到公共网络接口的已建立的传出流量
- 在端口 22 (SSH) 上接受到专用网络接口的已建立传出流量
请注意,我们不需要为丢弃的传入流量(传入规则 2)显式编写规则,因为服务器不需要建立或确认该连接。
防火墙软件和工具
现在我们已经了解了防火墙的工作原理,让我们来看看可以帮助我们设置有效防火墙的常用软件包。 虽然还有许多其他与防火墙相关的软件包,但这些都是有效的,并且是您遇到最多的。
iptables
iptables 是默认情况下包含在大多数 Linux 发行版中的标准防火墙(称为 nftables 的现代变体将开始取代它)。 它实际上是可以操纵 Linux 网络堆栈的内核级 netfilter 钩子的前端。 它通过将通过网络接口的每个数据包与一组规则进行匹配来决定要做什么来工作。
要了解如何使用 iptables 实现防火墙,请查看以下链接:
- 如何在 Ubuntu 14.04 上使用 IPTables 设置防火墙
- 如何在 Ubuntu 14.04 上使用 Iptables 实现基本防火墙模板
- 如何设置 iptables 防火墙来保护服务器之间的流量
UFW
UFW 代表 Uncomplicated Firewall,是 iptables 的一个接口,旨在简化配置防火墙的过程。
要了解有关使用 UFW 的更多信息,请查看本教程:如何在 Ubuntu 和 Debian 云服务器 上使用 UFW 设置防火墙。
防火墙D
FirewallD 是 CentOS 7 服务器上默认可用的完整防火墙解决方案。 顺便说一下,FirewallD 使用 iptables 来配置 netfilter。
要了解有关使用 FirewallD 的更多信息,请查看本教程:如何配置 FirewallD 以保护您的 CentOS 7 服务器。
如果您正在运行 CentOS 7 但更喜欢使用 iptables,请遵循本教程:How To Migrate from FirewallD to Iptables on CentOS 7。
Fail2ban
Fail2ban 是一款入侵防御软件,可以自动配置您的防火墙以阻止暴力登录尝试和 DDOS 攻击。
要了解有关 Fail2ban 的更多信息,请查看以下链接:
- Fail2ban 如何保护 Linux 服务器上的服务
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 SSH
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Nginx 服务器
- 如何在 Ubuntu 14.04 上使用 Fail2Ban 保护 Apache 服务器
结论
既然您了解了防火墙的工作原理,您应该考虑使用上面的教程来实现一个防火墙,以提高您的服务器设置的安全性。
如果您想了解有关防火墙如何工作的更多信息,请查看以下链接: