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