我更熟悉 Linux 工具来阻止暴力攻击,因此我很难找到适用于 Windows 的工具。我正在运行带有终端服务器的 Windows Server 2008 R2,我想在多次尝试通过 RDP 登录后阻止 IP。有什么提示吗?
答案1
要停止 rdp 登录尝试,如前所述,您需要控制防火墙以隔离特定 ip。您可以在管理工具 -> 终端服务管理器中进行一些设置,但无法通过这种方式停止一个 ip。也许您必须考虑使用批处理脚本来监听 rdp 端口并控制登录失败,因此如果同一 ip 进行了 tot 次尝试(您选择次数...),那么在已知时间范围内就无法进行其他尝试。我不确定这是否可行,但可能是一种方法...
答案2
您确实应该在边缘防火墙上阻止这些尝试,即使只有速率限制。如果您没有能力做到这一点,请继续阅读。
如果您无法在边缘防火墙处进行阻止,并且只需要对 Internet 的子集开放 RDP,请使用内置的 Windows 防火墙功能来锁定传入连接。
最后,如果你真的必须让 RDP 向整个互联网开放,你可以看看修改后的版本我的 Windows 版 SSH 暴力破解拦截程序我有一个 Github 仓库。此脚本 ts_block 阻止在 Windows Server 2003、2008 和 2008 R2 上进行暴力终端服务登录尝试。不幸的是,由于在使用 RDP 的 TLS/SSL 安全层时 Windows 记录的事件发生变化这个脚本变得越来越无效(为什么微软选择省略尝试进行身份验证的主机的 IP 地址,这让我无法理解。这似乎是一件需要记录的重要事情,不是吗?)
答案3
我有一个 C# 程序可以做到这一点。我在 Server 2008 R2 上遇到了一个问题,事件日志并不总是列出用户的 IP 地址(如果他们从较新的远程桌面客户端连接)。某些服务实现了自己的凭据检查提供程序,但无法提供您想要的所有信息。
然而,对于远程桌面,我发现进入“远程桌面会话主机配置”并更改 RDP-TCP 连接以获得“RDP 安全层”而不是“协商”或“SSL(TLS 1.0)”的安全层会恢复 IP 地址。
您是否真的想这样做是另一个问题,“如果选择 RDP 安全层,则不能使用网络级别身份验证。”
我发现http://www.windowsecurity.com/articles/logon-types.html有帮助。我使用了 EventLogWatcher 并绑定到“*[System/EventID=4625 或 System/EventID=4624]”,这样如果用户确实只是输错了密码,我就可以成功重置错误计数。我还将 ::1、0.0.0.0、127.0.0.1 和“-”列入白名单。您可能希望或不希望将 LAN/管理 IP 列入白名单。
我使用 Forefront TMG,因此我使用 API 以此方式将不良 IP 地址添加到一组 IP 中,并且我已要求 Cisco 将 API 访问权限添加到他们的一个 SMB 路由器(他们向我保证他们可能会这样做!)
如果您想使用本机 Windows 防火墙来阻止它们,请查看其 API(“netsh advfirewall”)。
在禁止之前我允许 x 次尝试,成功后将重置计数。
答案4
如果您想要一个基于 GUI 的解决方案,并为不同的事件创建不同的规则集,那么还有其他一些解决方案。最简单的方法是 RDPGuard ( hxxp://www.rdpguard.com ),但在公司环境中,您可能需要更多报告,例如攻击来自何处(国家、来源)以及使用的用户名,以便您可以快速确定是您自己的用户之一意外阻止了自己,还是试图从您知道他们不在的地方登录。
我个人比较喜欢 Syspeace ( hxxp://www.syspeace.com ),因为它可以帮我们做这些事情,不过我还是想提一下它们