Linux强化-Web服务器


31

设置Linux Web服务器时,您的清单/例程是什么?

您建议如何获得最大的安全性?

有什么首选的方法可以执行重复维护?

Answers:


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

  • 如果服务器与多个用户共享,则您可能要考虑使用suexec(-或ITK MPM - David Schmitt建议),因此并非每个脚本都以同一apache用户身份运行。

  • 虚拟化或chroot apache,以便任何妥协至少都包含在附加安全层中。请注意,当您使用chroot apache时,维护工作可能会变得更加困难,因为最终您将库移到了jail等地方。如果您使用的是FreeBSD,则可以改用jail进行维护,因为您只需安装apache就可以了。从端口运行,然后从其中运行portaudit,而不必担心任何库依赖关系和手动移动文件,这总是很麻烦。使用BSD监狱,您可以简单地继续使用软件包管理系统(端口)。(在GNU / Linux上,您也可以使用VServer进行虚拟化。- David Schmitt建议

  • (显然)不但要了解Apache的更新和补丁,还要了解PHP,ruby,perl等的更新和补丁……不仅要信任您的OS来为您提供所有更新。一些发行版的补丁程序非常慢。尽可能将暴露时间限制为0天漏洞。将milw0rm feed 粘贴到RSS阅读器中,订阅insecure.org邮件列表,等等。。。它不仅可以帮助您在操作系统发行补丁之前了解漏洞,而且还可以了解某些php中的漏洞。例如cms应用程序,它们甚至可能根本无法由您的操作系统进行管理或打补丁。

  • 使用Tripwire / aide,audit或mtree(在BSD上)之类的东西来跟踪文件系统上的更改。这一点真的很重要。定期将任何更改发送给您,每天手动进行检查。如果有文件更改不应该更改,请调查原因。如果以某种方式通过某种方法将某些恶意javascript插入您的网页,则将以这种方式捕获它。这不仅可以节省您的服务器,还可以节省您的用户,因为您自己的网页可能被滥用来感染您的访问者。(这是非常非常常见的策略,攻击者通常甚至不关心您的服务器,他们只想感染尽可能多的访问者,直到被发现为止。这些攻击者通常也不会费心隐藏自己的踪迹。尽快找到这样的妥协非常重要。)

  • 使用诸如suhosin之类的东西来保护php 会有帮助。但也要学习理解它,将其配置调整为应用程序的预期参数。

  • 使用PaX之类的内核补丁可以帮助您避免许多缓冲区溢出漏洞。即使您的软件容易受到攻击。(这不会使您无懈可击,只是另一个较小的层次。)

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

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

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

  • 在Apache中,设置非常严格的默认规则(选项None,全部拒绝等),并根据需要覆盖特定的VirtualHosts。

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

  • 在任何类型的密码身份验证中,始终使用https。

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

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

  • 让服务器向您发送有关上次登录用户,活动连接,使用的带宽等的每日报告。

  • 对Suid二进制文件,世界可写文件以及类似的东西进行cron扫描,然后将它们邮寄给您。

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

  • 拥有良好的固态分层冗余备份策略。并且不要仅仅假设制作图像或复制所有内容都可以。例如,如果在备份期间MySQL正在写表,则还原备份时MySQL二进制文件可能已损坏。因此,您将需要一个cron,以便mysqldump在常规映像或夜间tarball或版本控制或任何其他已设置的数据之上存储数据库。考虑一下您的备份策略。我的意思是,请认真考虑。

  • 不要为了安全而依赖这样的列表:)认真!您会在互联网上找到很多此类内容,阅读所有内容,研究每个建议,并使用常识和经验来下定决心。最后,经验和常识是唯一可以挽救您的东西。不是列表,也不是工具。一定要阅读,但不要只是在没有理解的情况下进行复制。


+1,很棒的清单!我建议您查看ITK MPM(mpm-itk.sesse.net)而不是suexec和Linux VServer(linux-vserver.org)而不是chroots。另外,对于文件系统扫描,还有tripwire或aide和chkrootkit。
David Schmitt,2009年

因此,最后,保护Web服务器几乎要花费一生。看来您准备得不够充分,所以有关奇怪事件的定期更新要比您在软件包管理器中找到的第一个安全工具要好得多。:)很棒的清单,但我会花点时间。这个答案很有可能就是那个答案。:)
pestaa

@David:是的,我想暗示一下助手那条绊索,我会添加一个助手链接以防万一。我还将添加虚拟服务器建议。是的,虚拟化和/或半虚拟化将比chroot更好,这也是我提到FreeBSD监狱的原因。虚拟机的一件事是,必须为每个虚拟机复制userland +所需的工具,这将占用很多额外的磁盘空间,这可能是一个问题
jns

如果您需要虚拟化很多东西,或者现金/硬件短缺。Jails + nullfs坐骑可以避免该问题。而且由于没有对监狱进行虚拟化或仿真,因此完全没有开销。我猜vserver是GNU / Linux上的下一个优点。
jns

哇!这真的很棒。也可以在sans.org上查看清单。确实有很大帮助。sans.org/score/checklists
LalakaJ '18

5

我建议从SAN 获得Linux安全清单。我用它,再加上另一个内部程序。该清单可能有些过时,但是许多关键点仍然成立。


5
  • 我设置了防火墙,仅戳了一下孔以分别添加每个服务
  • 对于任何服务,我都会阅读应用程序的帮助文档以获取其配置文件,并确保至少浏览了所有设置。
  • 我订阅安全邮件列表
  • 我每晚都在做rkhunter和lynis的cron工作
  • 我有超过一定门限的所有错误邮件
  • 我已经通过电子邮件发送了与日志记录有关的所有更改(重新启动日志记录服务等)
  • 我保持颠覆

4

编辑您的〜/ .ssh / config

permit_root_login no

这使得

ssh root@server

没有回应,但

ssh user@server
user$ su

如果您想以root身份登录,将可以使用。


1

总是会有无数的权限来检查,无数的清单,永无休止地发现新的错误/漏洞。安全性我认为不会开启或关闭安全性,而是您会不断进行的安全性。

鉴于软件的“不可避免的失败”,SELinux帮助消除了一些担忧(再次没有安全的灵丹妙药)。假设一个用户空间应用程序遭到破坏,正确的SELinux策略将阻止它以其通常的特权(即,如果SELinux被禁用或允许)执行操作。当然,这将需要您监视审核日志并分析已安装的策略,并在必要时对其进行修改以使应用程序正常运行。

不说默认策略无济于事,但我个人想知道它允许什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.