为什么我需要为服务器设置防火墙?

为什么我需要为服务器设置防火墙?

请注意:我不想把这变成一场口水战!我知道很多人对这个问题有坚定的信念,这在很大程度上是因为他们为防火墙解决方案付出了很多努力,也因为他们被灌输了相信防火墙的必要性。

然而,我正在寻找这样的人来回答专家安全方面。我认为这是一个重要的问题,答案将不仅仅惠及我自己和我所在的公司。我已经运行我们的服务器网络好几年了,没有任何妥协,没有任何防火墙。我们面临的安全妥协都没有可以通过防火墙来预防。

我想我在这里工作的时间太长了,因为当我说“服务器”时,我总是指“向公众提供的服务”,而不是“秘密的内部计费数据库”。因此,我们制定的任何规则任何防火墙都必须允许访问整个互联网。此外,我们的公共访问服务器都位于独立于我们办公室的专用数据中心。

其他人问了一个类似的问题,我的答案被投票为负数。这让我相信,要么投票反对的人并没有真正理解我的答案,要么我对安全性的了解还不足以做我现在正在做的事情。

这是我对服务器安全的方法:

  1. 关注我的操作系统安全指南 将我的服务器连接到互联网。

  2. 使用 TCP 包装器将对 SSH(和其他管理服务)的访问限制到少数 IP 地址。

  3. 使用以下方式监视此服务器的状态穆宁并修复了 Munin-node 在其默认配置中固有的严重安全问题。

  4. 使用 Nmap 映射我的新服务器(在将服务器连接到互联网之前)。如果我要为该服务器设置防火墙,则这应该是限制传入连接的确切端口集。

  5. 在服务器机房安装服务器,并赋予其公网IP地址。

  6. 使用我的操作系统的安全更新功能来保证系统安全。

我的理念(也是问题的基础)是,强大的基于主机的安全性消除了防火墙的必要性。总体安全理念认为,即使有防火墙,仍然需要强大的基于主机的安全性(请参阅安全指南)。原因是,将公共服务转发到服务器的防火墙与没有防火墙一样,为攻击者提供了便利。服务本身容易受到攻击,而且由于向整个互联网提供该服务是其运行的必要条件,因此限制对它的访问并不是重点。

如果有如果服务器上有不需要整个互联网访问的可用端口,则需要在步骤 1 中关闭该软件,并在步骤 4 中验证该软件。如果攻击者通过易受攻击的软件成功闯入服务器并自己打开端口,攻击者可以(并且确实)通过在随机端口上建立出站连接同样轻松地击败任何防火墙。安全的重点不是在成功攻击后保护自己 - 这已被证明是不可能的 - 而是首先阻止攻击者。

有人提出,除了开放端口之外,还有其他安全考虑因素 - 但在我看来,这听起来就像是在捍卫自己的信仰。无论是否存在防火墙,任何操作系统/TCP 堆栈漏洞都应该同样容易受到攻击 - 因为端口直接转发到该操作系统/TCP 堆栈。同样,在服务器本身上运行防火墙而不是在路由器上运行防火墙(或者更糟的是,在两个地方都运行防火墙)似乎会增加不必要的复杂性。我理解“安全是分层的”这一理念,但到了一定程度,它就像是通过将 X 层胶合板堆叠在一起然后在所有胶合板上钻孔来建造屋顶。另一层胶合板无法阻止你故意制造的那个洞漏水。

说实话,我认为防火墙对服务器的唯一用处是它有动态规则,阻止已知攻击者连接到所有服务器 - 比如垃圾邮件的 RBL(巧合的是,这几乎就是我们的邮件服务器所做的)。不幸的是,我找不到任何能做到这一点的防火墙。下一个最好的选择是 IDS 服务器,但这假设攻击者不会首先攻击您的真实服务器,并且攻击者会费心探测您的整个网络攻击。此外,已知这些攻击会产生大量误报。

答案1

防火墙的优点:

  1. 您可以过滤出站流量。
  2. 第 7 层防火墙 (IPS) 可以防御已知的应用程序漏洞。
  3. 您可以集中阻止某个 IP 地址范围和/或端口,而不是尝试确保每台计算机上没有服务侦听该端口或使用以下方式拒绝访问TCP 包装器
  4. 如果您必须处理不太注重安全的用户/管理员,防火墙可以提供帮助,因为它们可以提供第二道防线。如果没有它们,您必须绝对确保主机是安全的,这需要所有管理员都具有良好的安全意识。
  5. 防火墙日志将提供集中日志并帮助检测垂直扫描。防火墙日志可以帮助确定某个用户/客户端是否定期尝试连接到所有服务器的同一端口。若要在不使用防火墙的情况下做到这一点,必须结合来自各个服务器/主机的日志才能获得集中视图。
  6. 防火墙还配有反垃圾邮件/反病毒模块,也增强了保护作用。
  7. 独立于操作系统的安全性。根据主机操作系统,需要使用不同的技术/方法来确保主机安全。例如,TCP Wrappers 可能不适用于 Windows 计算机。

最重要的是,如果您没有防火墙,并且系统受到威胁,那么您将如何检测它?尝试在本地系统上运行某些命令“ps”、“netstat”等是不可信任的,因为这些二进制文件可以被替换。来自远程系统的“nmap”不能保证保护,因为攻击者可以确保 root-kit 只在选定的时间接受来自选定源 IP 地址的连接。

硬件防火墙在这种情况下很有帮助,因为与主机操作系统/文件相比,更改防火墙操作系统/文件极其困难。

防火墙的缺点:

  1. 人们认为防火墙会负责安全,不会定期更新系统并阻止不需要的服务。
  2. 它们是要花钱的。有时需要支付年度许可费。特别是如果防火墙有防病毒和反垃圾邮件模块。
  3. 额外的单点故障。如果所有流量都通过防火墙,而防火墙发生故障,那么网络就会停止。我们可以拥有冗余防火墙,但前一点的成本会进一步增加。
  4. 状态跟踪对于接受所有传入连接的面向公众的系统没有任何价值。
  5. 状态防火墙在 DDoS 攻击期间是一个巨大的瓶颈,并且通常是最先出现故障的,因为它们试图保持状态并检查所有传入的连接。
  6. 防火墙无法看到加密流量内部。由于所有流量应该端到端加密,大多数防火墙在公共服务器面前几乎没有什么价值。一些下一代防火墙可以赋予私钥来终止 TLS 并查看流量内部,但这会进一步增加防火墙对 DDoS 的敏感性,并破坏 TLS 的端到端安全模型。
  7. 操作系统和应用程序修补漏洞的速度比防火墙快得多。防火墙供应商通常对已知问题不闻不问。无需修补,而修补防火墙集群通常需要停机许多服务和出站连接。
  8. 防火墙远非完美,而且很多防火墙都存在漏洞。防火墙只是在某种操作系统上运行的软件,除了(通常很慢的)CPU 之外,可能还带有额外的 ASIC 或 FPGA。防火墙存在漏洞,但它们似乎没有提供解决漏洞的工具。因此,防火墙增加了复杂性,并为应用程序堆栈增加了难以诊断的错误来源。

答案2

TCP Wrappers 可以说是一种基于主机的防火墙实现;您正在过滤网络流量。

对于攻击者在任意端口上建立出站连接的情况,防火墙也会提供控制传出流量的方法;正确配置的防火墙会以适合与系统相关的风险的方式管理进出。

关于防火墙无法缓解 TCP 漏洞的问题,您不熟悉防火墙的工作原理。思科有一大堆可供下载的规则,这些规则可以识别以会导致特定操作系统问题的方式构建的数据包。如果您获取 Snort 并开始使用正确的规则集运行它,您也会收到此类警报。当然,Linux iptables 可以过滤掉恶意数据包。

防火墙基本上是一种主动保护。你越远离主动保护,你就越有可能发现自己处于一种对问题做出反应而不是预防问题的情况。将保护集中在边界,就像使用专用防火墙一样,可以让事情更容易管理,因为你有一个中央瓶颈,而不是到处重复规则。

但没有哪一件事一定是最终的解决方案。一个好的安全解决方案通常是多层的,在边界处有防火墙,在设备上有 TCP 包装器,在内部路由器上可能还有一些规则。您通常应该保护网络免受互联网的侵害,并保护节点免受彼此侵害。这种多层方法不像在多张胶合板上钻孔,它更像是安装一对门,这样入侵者就有两把锁可以打破,而不是只有一把;这在物理安全中被称为人为陷阱,几乎每栋建筑都有这种陷阱是有原因的。:)

答案3

(您可能想阅读“没有防火墙的生活“)

现在:如果有一个不再发布补丁的遗留系统怎么办?如果不能在需要时将补丁应用到 N 台机器上,同时又可以在网络中较少的节点(防火墙)上应用它们怎么办?

争论防火墙的存在或必要性毫无意义。真正重要的是你必须实施安全策略。为此,你将使用任何可以实施它并帮助你管理、扩展和发展它的工具。如果需要防火墙来做到这一点,那很好。如果不需要防火墙,那也很好。真正重要的是拥有一个可行且可验证的安全策略实施。

答案4

Should I firewall my server?好问题。在网络堆栈上加装防火墙似乎没有什么意义,因为网络堆栈已经拒绝了除少数合法开放端口之外的所有端口的连接尝试。如果操作系统中存在漏洞,允许恶意制作的数据包破坏/利用主机,那么防火墙会在同一主机上运行防止漏洞?好吧,或许...

这可能是在每个主机上运行防火墙的最重要原因:防火墙可能防止网络堆栈漏洞被利用。这个理由够充分吗?我不知道,但我想有人会说,“没有人会因为安装防火墙而被解雇。”

在服务器上运行防火墙的另一个原因是分离这两个原本高度相关的问题:

  1. 我可以从哪里、到哪些端口接受连接?
  2. 哪些服务正在运行并监听连接?

如果没有防火墙,运行的服务集(以及 tcpwrappers 等的配置)将完全决定服务器将打开的端口集以及将接受来自谁的连接。基于主机的防火墙为管理员提供了额外的灵活性,可以在更广泛地提供新服务之前以受控的方式安装和测试新服务。如果不需要这种灵活性,那么在服务器上安装防火墙的理由就更少了。

最后要说的是,安全检查清单中总会有一项未提及,但我总是会添加,那就是基于主机的入侵检测系统 (HIDS),例如助手或者萨温节。好的 HIDS 可以让入侵者很难对系统进行不必要的更改而不被发现。我认为所有服务器都应该运行某种 HIDS。

相关内容