我有一台 Windows Server 2012 R2 IIS Web 服务器,运行在 VMWare esxi 5.5 上,托管多个具有不同 IP 地址的网站。该服务器最近一直在随机拒绝所有网站的连接。当服务器停止接受连接时,netstat 中会出现大量 SYN_RECEIVED 条目。有时来自所有托管 IP 地址的同一 IP 地址,有时来自不同的 IP 地址,但数量要多得多。这些条目会停留一段时间,然后会消失(假设已达到超时期限)。
我读到过这可能是 SYN 洪水攻击,但 Windows 应该有内置方法来处理这些攻击。我看了这篇文章,https://blogs.technet.microsoft.com/nettracer/2010/06/01/syn-attack-protection-on-windows-vista-windows-2008-windows-7-windows-2008-r2-windows-88-1-windows-2012-and-windows-2012-r2/,并进行了 netsh 跟踪,但日志中没有任何内容表明已启动 SYN 攻击保护。这让我怀疑 SYN 攻击保护是否有效。Web 服务器确实禁用了内置的 Windows 防火墙。这会导致 SYN 攻击保护被禁用吗?
我还看到增加服务器资源可能会有所帮助。我将虚拟机的 CPU 和 RAM 增加了一倍,但这个问题仍然每周都会出现。通常持续一天,然后恢复正常。当服务器停止响应连接时,netstat 将充满一堆 SYN_RECEIVED 条目,需要几分钟才能完成。此时 CPU 使用率非常低,约为 5-10%,RAM 使用率是可用量的一半。在疑似攻击发生后,netstat 将在几秒钟内返回所有结果。
我该如何阻止这种连接被拒绝的情况发生?有什么技巧或窍门吗?禁用 Windows 防火墙是否与缓解攻击有关。
答案1
我认为这在你的 Windows 机器上很难停止。
您应该确保您有一个防火墙,如果不在 Windows 主机上,那么肯定在边界上。
我已经成功监控了 Linux 机器上的连接,以识别诸如 SYN 洪水之类的非常规行为(Linux 内核有一些应对选项,从不寻常的端口连接(例如从端口 80/443 而不是到它建立连接)等,然后标记这些并在防火墙中对有问题的地址实施阻止。
在 Windows 机器上,您可能可以监视事件日志以获取有关此信息,然后操作系统防火墙,但我认为使用 Linux 来执行此操作会更加困难且不太可靠,因为 Linux 符合内核设计。
如果您想尝试在内核中执行此操作,则需要编写内核模式驱动程序来检查数据包,这可能会很困难且耗时。
如果您需要在 Windows 下运行主机,您可能需要调查是否可以设置一台可以过滤流量并充当网络边界的 Linux 机器。
并确保某处有防火墙!