Linux 强化 - Web 服务器

Linux 强化 - Web 服务器

设置 Linux 网络服务器时,您的检查清单/例行程序是什么?

您有何建议来实现最高程度的安全?

是否有任何优选的方法来进行重复维护?

答案1

  • 首先,请注意 Apache 中的任何脚本能力(php、cgi、ruby 等)都可能等同于具有运行脚本的用户权限的 shell 帐户。

  • 如果服务器由多个用户共享,您可能需要考虑使用 suexec (-或信息技术有限公司 -建议来自戴维·施密特)因此并非每个脚本都以相同的 Apache 用户身份运行。

  • 虚拟化或 chroot apache,这样任何妥协至少都会被额外的安全层所遏制。请注意,当您 chroot apache 时,维护可能会变得更加困难,因为您最终会将库移动到 jail 等。如果您使用的是 FreeBSD,则可以改用 jail,这更容易维护,因为您只需从 ports 安装 apache,并从其中运行 portaudit,而不必担心任何库依赖关系和手动移动文件,这总是会变得一团糟。使用 BSD jail,您可以继续使用包管理系统 (ports)。(在 GNU/Linux 上,您还可以使用虚拟服务器用于虚拟化。-建议来自戴维·施密特

  • (显然)要跟上更新和补丁,不仅要针对 Apache,还要针对 PHP、ruby、perl 等...不要只相信你的操作系统会给你提供所有更新。有些发行版的补丁更新速度非常慢。尽可能限制零日漏洞的暴露时间。坚持milworm在您的 RSS 阅读器中订阅不安全网邮件列表等...它不仅可以帮助您在操作系统发布补丁之前了解漏洞,还可以了解某些 php cms 应用程序中的漏洞,这些漏洞甚至可能不受操作系统管理或修补。

  • 使用 tripwire/aide、audit 或 mtree(在 BSD 上)来跟踪文件系统的变化。这一点非常重要。定期将任何更改邮寄给您,每天手动检查。如果任何文件更改了而不应该更改,请调查原因。如果某些恶意 javascript 以某种方式插入到您的页面中,您将通过这种方式捕获它。这不仅可以保护您的服务器,还可以保护您的用户,因为您自己的网页可能会被滥用来感染您的访问者。(这是一种非常常见的策略,攻击者通常甚至不关心您的服务器,他们只是想感染尽可能多的访问者,直到被发现。这些攻击者通常甚至懒得隐藏他们的踪迹。尽快发现这样的妥协非常重要。)

  • 使用类似的东西苏霍辛保护 php 很有帮助。但也要学会理解它,并根据应用程序的预期参数调整它的配置。

  • 使用内核补丁,例如帕克斯可能有助于保护您免受许多缓冲区溢出漏洞的侵害。即使您的软件存在漏洞。(这并不能使您无懈可击,它只是又一个次要的保护层。)

  • 使用某些安全工具时不要过于自信。了解您使用的工具,并运用常识。尽可能多地阅读、学习和跟进。

  • 考虑使用强制访问控制(例如:SELinux)。它允许您详细指定每个应用程序允许执行的操作。它允许访问哪些文件。它允许进行哪些内核调用,等等。这是一个非常复杂的过程,需要大量的理解。一些发行版为其软件包提供了预制的 SELinux 策略(例如:Gentoo)。这个建议和下面的建议有点矛盾,但仍然有效。

  • 保持简单。复杂的安全策略可能会对你不利。

  • 在 Apache 中,设置非常严格的默认规则(选项无、全部拒绝等...)并根据特定虚拟主机的需要进行覆盖。

  • 拒绝访问所有点文件(也立即覆盖 .htaccess 文件)

  • 在任何类型的密码验证的地方始终使用 https。

  • 防火墙应采用默认拒绝策略。在防火墙中建立一些特定规则来记录特定流量。

  • 设置日志解析脚本来扫描日志是否存在异常。(前奏入侵检测系统套件可以做到这一点,但老实说,我建议您随着时间的推移建立自己的脚本,因为它将帮助您更好地理解自己的工具和规则。)

  • 让服务器通过电子邮件向您发送有关最后登录的用户、活动连接、使用的带宽等的每日报告...

  • 运行 cron 扫描来查找 suid 二进制文件、世界可写文件以及诸如此类的东西,然后将它们邮寄给您。

  • 对于您设置的、会邮寄给您的任何内容,您都应该随着时间的推移建立一个例外列表。(忽略文件系统更改的文件夹、允许的 777 个文件、允许的 suid 二进制文件)。重要的是,您只收到不应该发生的事情的通知。如果您每天都收到一封包含琐碎内容的邮件,您将开始忽略它们,它们将变得毫无意义。

  • 制定一个良好、可靠的分层冗余备份策略。不要以为制作映像或复制所有内容就可以了。例如,如果 MySQL 在备份期间正在写入表,则在恢复备份时,MySQL 二进制文件可能会损坏。因此,您需要一个 cron,在常规映像或夜间 tarball 或版本控制或您设置的其他任何内容之上 mysqldump 您的数据库。考虑您的备份策略。我的意思是,认真考虑一下。

  • 不要依赖这样的列表来保证安全 :) 认真点!您会在互联网上找到很多这样的列表,请阅读它们,研究每一条建议,并运用常识和经验来做出自己的决定。最终,经验和常识是唯一能拯救您的东西。不是列表,也不是工具。请阅读,但不要不加理解就照搬。

答案2

我建议Linux 安全检查表,来自 SAN。我使用它,加上另一个内部程序。清单可能有点过时,但许多关键点仍然适用。

答案3

  • 我设置了防火墙,只在添加每个服务时发现了漏洞
  • 对于任何服务,我都会阅读应用程序的帮助文档以了解其配置文件,并确保至少浏览过每个设置。
  • 我订阅了安全邮件列表
  • 我每晚都会在 cron 任务中运行 rkhunter 和 lynis
  • 所有超过一定阈值的错误都会通过邮件发送给我
  • 我已通过电子邮件收到与日志相关的所有更改(重新启动日志服务等)
  • 我将 etc 保留在 subversion 中

答案4

总是会有无数的权限需要检查,无数的检查表,新的错误/漏洞也层出不穷。我认为安全不是你打开或关闭的东西,而是你不断做的事情。

鉴于软件“不可避免地会出现故障”,SELinux 有助于消除一些担忧(同样,这不是解决安全问题的灵丹妙药)。假设用户空间应用程序受到威胁,正确的 SELinux 策略将阻止它以其通常的权限(即,如果 SELinux 被禁用或宽容)运行。当然,这需要您监视审计日志并分析已安装的策略,并在必要时对其进行修改,以允许应用程序正常运行。

并不是说默认策略没有帮助,但我个人想知道它允许什么。

相关内容