New*_*Guy 8 radius windows-authentication nps
我正在通过 RADIUS 将身份验证设置为 Acme Packet Net-Net 3820 (SBC)。会计方面的工作正常,没有任何问题。身份验证方面是另一回事。我可以从数据包捕获中看到访问请求消息实际上正在到达 RADIUS 服务器,此时 RADIUS 服务器开始与域控制器通信。然后我看到通信链返回到 RADIUS,最后返回到 SBC。问题是我得到的响应始终是一条原因代码为 16 的访问拒绝消息(由于用户凭据不匹配导致身份验证失败。提供的用户名与现有用户帐户不匹配或密码不正确)。通过查看安全事件日志可以确认这一点,我可以在其中看到事件 4625 和 6273。
事件 ID:6273
Network Policy Server denied access to a user.
Contact the Network Policy Server administrator for more information.
User:
Security ID: NULL SID
Account Name: real_username
Account Domain: real_domain
Fully Qualified Account Name: real_domain\real_username
Client Machine:
Security ID: NULL SID
Account Name: -
Fully Qualified Account Name: -
OS-Version: -
Called Station Identifier: -
Calling Station Identifier: -
NAS:
NAS IPv4 Address: 10.0.0.10
NAS IPv6 Address: -
NAS Identifier: radius1.real_domain
NAS Port-Type: -
NAS Port: 101451540
RADIUS Client:
Client Friendly Name: sbc1mgmt
Client IP Address: 10.0.0.10
Authentication Details:
Connection Request Policy Name: SBC Authentication
Network Policy Name: -
Authentication Provider: Windows
Authentication Server: RADIUS1.real_domain
Authentication Type: MS-CHAPv2
EAP Type: -
Account Session Identifier: -
Logging Results: Accounting information was written to the SQL data store and the local log file.
Reason Code: 16
Reason: Authentication failed due to a user credentials mismatch. Either the user name provided does not map to an existing user account or the password was incorrect.
Run Code Online (Sandbox Code Playgroud)
事件 ID:4625
An account failed to log on.
Subject:
Security ID: SYSTEM
Account Name: RADIUS1$
Account Domain: REAL_DOMAIN
Logon ID: 0x3E7
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name: real_username
Account Domain: REAL_DOMAIN
Failure Information:
Failure Reason: Unknown user name or bad password.
Status: 0xC000006D
Sub Status: 0xC000006A
Process Information:
Caller Process ID: 0x2cc
Caller Process Name: C:\Windows\System32\svchost.exe
Network Information:
Workstation Name:
Source Network Address: -
Source Port: -
Detailed Authentication Information:
Logon Process: IAS
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Transited Services: -
Package Name (NTLM only): -
Key Length: 0
This event is generated when a logon request fails. It is generated on the computer where access was attempted.
The Subject fields indicate the account on the local system which requested the logon. This is most commonly a service such as the Server service, or a local process such as Winlogon.exe or Services.exe.
The Logon Type field indicates the kind of logon that was requested. The most common types are 2 (interactive) and 3 (network).
The Process Information fields indicate which account and process on the system requested the logon.
The Network Information fields indicate where a remote logon request originated. Workstation name is not always available and may be left blank in some cases.
The authentication information fields provide detailed information about this specific logon request.
- Transited services indicate which intermediate services have participated in this logon request.
- Package name indicates which sub-protocol was used among the NTLM protocols.
- Key length indicates the length of the generated session key. This will be 0 if no session key was requested.
Run Code Online (Sandbox Code Playgroud)
因此,乍一看,问题似乎只是用户名无效或密码不匹配的情况。这在数据包捕获中得到进一步证实,我可以看到 MSCHAPv2 响应的错误代码为 691(访问被拒绝,因为用户名或密码或两者在域中无效)。问题是我知道我使用的是有效的用户名,并且我尝试了许多用户名,包括我为故障排除而创建的新用户名。我不知道我重设了多少次密码以确保它不是不匹配的密码。我什至确保使用相当短且仅包含字母的密码,以确保没有终端编码问题(我们通过 SSH 客户端连接到 SBC)。我也对 SBC 和 RADIUS 服务器之间通信期间使用的共享秘密做了同样的事情。我曾尝试在登录时为用户名添加域名前缀(尽管我认为这不是必要的)。我也尝试使用用户的完整 UPN 登录。我尝试了几个 RADIUS 测试客户端(NTRAdPing、RadiusTest 等),但它们要么不支持 MSCHAPv2,要么只支持 EAP-MSCHAPv2。我什至使用 PHP 的 PECL RADIUS 模块创建了自己的客户端。MSCHAPv2 身份验证似乎总是失败,错误代码为 691。有没有人知道为什么我在尽一切可能确保不是这种情况时总是收到无效的用户名或错误的密码响应?我尝试了几个 RADIUS 测试客户端(NTRAdPing、RadiusTest 等),但它们要么不支持 MSCHAPv2,要么只支持 EAP-MSCHAPv2。我什至使用 PHP 的 PECL RADIUS 模块创建了自己的客户端。MSCHAPv2 身份验证似乎总是失败,错误代码为 691。有没有人知道为什么我在尽一切可能确保不是这种情况时总是收到无效的用户名或错误的密码响应?我尝试了几个 RADIUS 测试客户端(NTRAdPing、RadiusTest 等),但它们要么不支持 MSCHAPv2,要么只支持 EAP-MSCHAPv2。我什至使用 PHP 的 PECL RADIUS 模块创建了自己的客户端。MSCHAPv2 身份验证似乎总是失败,错误代码为 691。有没有人知道为什么我在尽一切可能确保不是这种情况时总是收到无效的用户名或错误的密码响应?
以下是我们的 RADIUS 配置规范:
唯一需要考虑的其他事项是,在上述事件中,您可以看到安全 ID 为“NULL SID”。现在我知道这很常见,尤其是在失败的登录中,但鉴于此问题表明用户名无效或密码错误,在这种情况下可能很重要。此外,此服务器已使用 Active Directory 中的相同计算机帐户重建。我不知道在重建之前它是否会起作用。本质上,我们构建了这个服务器,并且在我们决定将 SQL 角色分离到另一台服务器上时,才将服务器授权到域并添加 SQL。我们只是重建了机器,而不是卸载 SQL。但是,在重新安装 Windows 之前,我确实对计算机帐户进行了重置。我不
总而言之,这是一个相当基本的设置,希望我已经提供了足够的信息,让人们了解可能发生的事情。抱歉,如果我对此的理解似乎有点基础,毕竟,当谈到 RADIUS 服务器时,我想您可能会说我是这里的新人。
编辑1:
为了进一步解决此问题,我尝试启动其他服务器进行测试。以下是我执行的其他测试。
多个域
我现在已经在 3 个不同的隔离域中尝试了这个。我们的测试域和生产域以及我的私人家庭域,除了为 Exchange 和 ConfigMgr 所做的修改之外,几乎没有自定义方式。都具有与上述相同的结果。
VPN服务
使用 Windows Server 2012 R2,我们启动了一个单独的服务器来运行标准的 VPN 设置。目的是看看我们是否可以将 RADIUS 身份验证与 VPN 一起使用,如果可行,我们就会知道问题出在 SBC 上。但是,在我们甚至可以将其配置为使用 RADIUS 之前,我们只是尝试确保它与本地 VPN 服务器上的标准 Windows 身份验证一起使用。有趣的是,它也失败了,记录的事件与 RADIUS 服务器相同。客户端计算机是 Windows 8.1 工作站。我再次指出,我们有专门用于我们的无线环境的工作 RADIUS 服务器。这些 RADIUS 服务器与我遇到问题的服务器之间的唯一区别是,工作中的无线服务器使用的是 PEAP 而不是 MSCHAPv2。
自由半径
现在我不是 Linux 大师,但我相信我已经启动并运行了。登录到控制台时,我可以使用 ntlm_auth 对用户进行身份验证。但是,当 radiusd 服务尝试使用 ntlm_auth 来做本质上相同的事情时,它会失败并返回我在 Windows 服务器上收到的相同消息 (E=691)。我有在调试模式下运行的 radiusd 服务,所以我可以看到更多正在发生的事情。如果需要,我可以发布我获得的调试信息。然而,我看到的特别感兴趣的线路如下:
(1) ERROR: mschap : Program returned code (1) and output 'Logon failure (0xc000006d)'
(1) mschap : External script failed.
(1) ERROR: mschap : External script says: Logon Failure (0xc000006d)
(1) ERROR: mschap : MS-CHAP2-Response is incorrect
Run Code Online (Sandbox Code Playgroud)
这里要注意的是,虽然我们基本上仍然收到“错误密码”消息,但实际状态代码 (0xc000006d) 与我在 Windows 服务器上得到的 (0xc000006a) 略有不同。从本文档中您可以看到这些代码的含义:NTSTATUS values。这个 FreeRADIUS 服务器的好处是,当它处于调试模式时,我可以看到所有的质询响应。因此,如果我可以了解 MSCHAPv2 响应是如何计算的,我可以比较它以查看这是否只是计算错误的质询响应。更新刚刚注意到 6a 代码只是 6d 代码的子状态代码。所以与 Windows 服务器没有什么不同,我仍然想知道挑战响应是否存在计算错误。
目前,我正在努力启动 RADIUS 服务器的 Windows Server 2008 R2 实例,看看这是否有帮助。但是,如果 W2K8 R2 和 W2K12 R2 之间的服务出现问题而直到现在没有人注意到,我会感到惊讶。如果这不起作用,我可能不得不向 Microsoft 开一个案例。更新:与 W2K8 R2 的结果相同。
更新 2
我向微软开了一个案例,他们为此工作了几个星期。第一周我花时间只是想让他们了解这与无线无关,并且我们尝试连接的设备不支持使用任何形式的 EAP 对 RADIUS 服务器进行身份验证。一旦他们最终明白我们正在尝试将身份验证方法设置为仅 MSCHAPv2,他的最初反应就是“你不能那样做”。他说,无论您总是需要在顶部框中设置某种形式的 EAP 或 PEAP(即使对于 PAP 和该身份验证方法窗口中的其他“不太安全的方法”)。这对我来说似乎不太可能,所以我要求提供一些文件说明这一点,然后他改变了主题并且从未提供任何文件。当他们告诉我问题似乎出在用户名和密码上时,很明显我对微软一无所知。因此,当我的首映票的主题行中有 E691 错误代码时,他们花了 2 周的时间才得出这个结论,这意味着用户名和密码不匹配,尽管我用很长的一段话解释说我已尽一切可能确保它是一个不错的用户名和密码。
不幸的是,我的项目负责人不想再浪费首映支持时间,所以我们已经结束了这个案例。我们可能只会处理 SBC 本地共享登录并设置一些其他方式来强制执行问责制(我们中只有 4 人可以访问)。
我要指出的是,在我被告知放弃该项目之前,我确实让 FreeRADIUS 服务器仅使用 MSCHAPv2 工作,但只能使用 FreeRADIUS 服务器的本地帐户来执行此操作。那是存储在某个 FreeRADIUS 配置文件中的纯文本密码。所以显然不是一个解决方案,但它至少表明 SBC 正在通过 MSCHAPv2 正确地与 RADIUS 服务器通信。这和我上面提到的其他事情让我相信问题在于 RADIUS 服务器和域控制器之间。虽然 NTLM 身份验证在本地登录到服务器时在 Windows RADIUS 和 FreeRADIUS 服务器上都可以正常工作(可以通过测试帐户登录到 Windows RADIUS,并且可以在使用 ntlm_auth 命令时仅通过用户名和密码在 FreeRADIUS 服务器上成功进行身份验证) ,
所以我会在这里结束这个帖子,但我会密切关注这一点,如果有人发帖,它会通知我。如果有人发布解决方案或有评论,我会回复。
解决方案
您是否不知道,在我们放弃使用 RADIUS 服务器来控制对 SBC 访问的这种方法大约一个月后,我们找到了一个可能的解决方案。当然,目前我们正忙于其他项目,无法回去尝试这个解决方案,所以我不能说 100% 这是否能解决问题,但一旦我解释过,您可能会同意这就是答案。
我的一位同事在参加 Microsoft 会议进行各种讨论时,突然意识到 MSCHAPv2 依赖 NTLM 来生成密码挑战和响应。现在,在 Windows RAS 服务中使用普通旧版 MSCHAP 和 MSCHAPv2(即不是 EAP-MSCHAPv2 或 PEAP)时,默认情况下将使用 NTLMv1。
由于你们中的许多人已经开始了解,我们像许多管理员一样,在我们的 DC 上禁用了 NTLMv1,因此 DC 将只接受 NTLMv2 请求。这解释了为什么我继续遇到的失败是“密码错误”错误。发送到 DC 的密码采用 NTLMv1 格式,并且被忽略。
一旦我们意识到这一点,我就能够进行更多研究,并发现了以下文章:
http://support.microsoft.com/kb/2811487
本文描述了我遇到的相同行为,包括我提到的 E=691 错误代码。本文还提供了一种解决方法,可在构建 MSCHAPv2 响应时强制 RAS 服务使用 NTMLv2。有趣的是,在您准确了解问题所在后,找到这些文章是多么容易。
再说一遍,我还没有验证这就是问题所在,因为我没有时间重建我已经退役的 RADIUS 服务器,但如果有机会,我确实计划尝试一下。我只是想发布这个可能的解决方案,以防其他人偶然发现这个问题。如果有人可以在我之前确认这一点,请告诉我。
编辑-确认
我们被要求在这些 SBC 中发挥更大的作用,因此我们回到这个项目并再次推出 Windows RADIUS 服务器。这次我们应用了上面链接中描述的注册表项。在对 RADIUS 服务器和 SBC 之间的通信进行数据包捕获之后,我实际上现在可以看到“访问接受”消息被 SBC 回击。因此,我现在至少可以在我们的场景中确认我们遇到的问题如上所述。
长话短说
NTLMv1 在 DC 上被禁用。设置注册表项以强制 RADIUS 服务器使用 NTLMv2 修复了该问题。
归档时间: |
|
查看次数: |
38023 次 |
最近记录: |