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