这是我第一次设置 IIS 安装,我想确保提供最大程度的安全性。设置过程中,我突然想到了一些问题:
请注意,该服务器托管外部网站,这些网站同时有大约 50 个用户,每天有大约 1000 个用户,但也托管仅用于内部目的的内部网站(在这种情况下,内部是指我们公司用户在网络外部使用的网站,但没有客户使用这些网站)
应用程序池标识:
我读到过,使用内置帐户 ApplicationPoolIdentity 作为应用程序池标识是最佳安全做法。我的问题是,我是否可以对我拥有的每个应用程序池使用这个内置帐户,因为我将部署 Wep 应用程序隔离 - 这意味着我将为我拥有的每个 Web 应用程序设置一个不同的 AppPool。即使我为每个 Web 应用程序部署了不同的 Apppools,在每个 AppPool 上使用相同的帐户,这难道不矛盾吗?
服务器强化:
我想安装尽可能少的功能和服务,以尽可能强化服务器。有没有办法检查我安装的功能是否被使用,或者根本不需要这些功能?(是的,我知道。有点菜鸟的问题)
身份验证:
有外部访问者的网站是否需要匿名身份验证?www.mycompany.com
哪些网站需要每个人都可以访问?我还没有找到一种方法来禁用匿名身份验证,但仍然让每个人都可以访问网站。
常规网络问题:
我一直认为 IIS 的最佳做法是将服务器放入 DMZ,因为如果服务器遭到黑客攻击,入侵者将无法访问我们域网络中的所有其他服务器。由于存在新的身份验证方法,例如Digestauthentification
需要与域控制器通信,并且服务器本身也需要位于域中,所以我问自己,将服务器放入域网络并使用其他安全措施(代理等)保护对它的访问是否更好,或者 DMZ 仍然是最佳安全做法吗?
提前感谢您的每一份意见。
答案1
1. 应用程序池标识
为每个应用程序使用单独的帐户 - 每个应用程序池都会产生一个单独的 w3wp 进程,该进程在指定的用户上下文中运行。有了文件和其他资源(如数据库身份验证),您就可以利用默认操作系统、文件系统和其他安全子系统(如 kerberos)来提高安全性。
显然,分配的帐户应该尽可能少地访问您的主机(除非应用程序绝对需要,否则切勿对网站使用高权限帐户[实际上不应该如此])。
如果可能的话,我强烈建议将托管面向公众的网站的服务器与托管内部内容的服务器分开。可访问公众的服务器也应放置在单独的网段中。
2. 服务器强化
您的主要攻击面是 IIS(我假设您在服务器前面有一个防火墙)——需要通过禁用服务来加强防御,以防止本地攻击。本地意味着在这种情况下您的本地网络(网络相关服务)以及您自己的操作系统,甚至您的本地硬件(如缓存溢出做)。
所以,是的 - 禁用您不需要的服务。不要禁用保护您的服务。您可以在网上找到一些有关此内容的资源。
为了防止坏人启动最终可能构成服务器更多部分的自定义应用程序,我建议使用软件限制策略:
- 您的应用程序池使用的是弱帐户(如工作站上的用户),无法在被视为“应用程序路径”的路径上安装/修改应用程序
- 限制在这些路径下执行的软件
这会导致互相排斥,并防止一些简单的攻击,如打开 shell 并下载最终打开服务器大门的实际应用程序。
当使用 SSL/TLS 时,我建议也在这里强化服务器。完成这项工作的一个好工具是加密和Ssl实验室进行验证。如果有空余时间,您可以深入研究使用 NGINX 作为反向代理,这在传输安全方面提供了一些额外的优势。
3. 身份验证
匿名身份验证或多或少就是“无需身份验证”。所以没问题。
4. 网络分段
我已经看到许多网络应用了 DMZ 的概念,通过在那里放置一大堆服务器并打开通往主网络的门户来支持由 DMZ 中托管的服务器提供的服务的后端连接。
由此可以得出这样的结论:你的网络分段并没有带来任何好处。
因此:是的,绝对需要 DMZ。但不要把所有东西都放进去,也不要打开你不需要的门。如果同一个 DMZ 中有太多不相关的服务,请考虑创建一个单独的区域,将提供的服务分成相互关联且具有依赖关系的服务组。
答案2
IIS 最佳安全实践是一门完整的学科,您可能需要花费数月时间阅读和学习。而且您肯定问了正确的问题。
我会详细讨论你的每个具体主题并做出解释,但我只是在重复已经有据可查的信息。
简而言之,如果您希望遵循 IIS 的最佳实践配置,请遵循 CIS II8 基准。您需要了解和配置的所有内容都在这里。 https://benchmarks.cisecurity.org/tools2/iis/CIS_Microsoft_IIS_8_Benchmark_v1.4.0.pdf