在 Ubuntu 上为 WPA2 设置 RADIUS + LDAP

Mor*_*uhr 16 ubuntu openldap wpa radius

我正在为大约 150 个用户设置无线网络。简而言之,我正在寻找设置 RADIUS 服务器以针对 LDAP 对 WPA2 进行身份验证的指南。在 Ubuntu 上。

  • 我有一个可用的 LDAP,但由于它不在生产环境中使用,因此它可以很容易地适应该项目可能需要的任何更改。
  • 我一直在研究 FreeRADIUS,但任何 RADIUS 服务器都可以。
  • 我们为 WiFi 提供了一个单独的物理网络,因此不必担心这方面的安全性。
  • 我们的 AP 是 HP 的低端企业产品 - 它们似乎支持您能想到的任何东西。
  • 所有 Ubuntu 服务器,宝贝!

还有一个坏消息:

  • 我现在知识比我少的人最终会接管管理,因此设置必须尽可能“琐碎”。
  • 到目前为止,我们的设置仅基于 Ubuntu 存储库中的软件,除了我们的 LDAP 管理 Web 应用程序和一些小的特殊脚本。因此,如果可以避免的话,就没有“获取包 X、解压缩、./configure”之类的东西。

更新 2009-08-18:

虽然我找到了几个有用的资源,但有一个严重的障碍:

Ignoring EAP-Type/tls because we do not have OpenSSL support.
Ignoring EAP-Type/ttls because we do not have OpenSSL support.
Ignoring EAP-Type/peap because we do not have OpenSSL support.
Run Code Online (Sandbox Code Playgroud)

基本上,FreeRADIUS 的 Ubuntu 版本不支持 SSL(错误 183840),这使得所有安全 EAP 类型都无用。无赖。

但是对于任何感兴趣的人来说,一些有用的文档:

更新 2009-08-19:

昨天晚上我最终编译了我自己的 FreeRADIUS 包 - http://www.linuxinsight.com/building-debian-freeradius-package-with-eap-tls-ttls-peap-support.html有一个非常好的食谱(见对帖子的评论以获取更新说明)。

我从http://CACert.org获得了证书(如果可能,您可能应该获得“真实”证书)

然后我按照http://vuksan.com/linux/dot1x/802-1x-LDAP.html 上的说明进行操作。这个链接到http://tldp.org/HOWTO/html_single/8021X-HOWTO/,如果你想知道 WiFi 安全是如何工作的,这是非常值得一读的。

更新 2009-08-27:

遵循上述指南后,我设法让 FreeRADIUS 与 LDAP 通信:

我在 LDAP 中创建了一个带有密码的测试用户mr2Yx36M- 这给出了一个大致的 LDAP 条目:

uid: testuser
sambaLMPassword: CF3D6F8A92967E0FE72C57EF50F76A05
sambaNTPassword: DA44187ECA97B7C14A22F29F52BEBD90
userPassword: {SSHA}Z0SwaKO5tuGxgxtceRDjiDGFy6bRL6ja
Run Code Online (Sandbox Code Playgroud)

使用时radtest,我可以正常连接:

> radtest testuser "mr2Yx36N" sbhr.dk 0 radius-private-password
Sending Access-Request of id 215 to 130.225.235.6 port 1812
    User-Name = "msiebuhr"
    User-Password = "mr2Yx36N"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 0
rad_recv: Access-Accept packet from host 130.225.235.6 port 1812, id=215, length=20
> 
Run Code Online (Sandbox Code Playgroud)

但是当我尝试通过 AP 时,它不会飞 - 虽然它确实确认它找出了 NT 和 LM 密码:

...
rlm_ldap: sambaNTPassword -> NT-Password == 0x4441343431383745434139374237433134413232463239463532424542443930
rlm_ldap: sambaLMPassword -> LM-Password == 0x4346334436463841393239363745304645373243353745463530463736413035
[ldap] looking for reply items in directory...
WARNING: No "known good" password was found in LDAP.  Are you sure that the user is configured correctly?
[ldap] user testuser authorized to use remote access
rlm_ldap: ldap_release_conn: Release Id: 0
++[ldap] returns ok
++[expiration] returns noop
++[logintime] returns noop
[pap] Normalizing NT-Password from hex encoding
[pap] Normalizing LM-Password from hex encoding
...
Run Code Online (Sandbox Code Playgroud)

很明显,NT 和 LM 密码与上述不同,但消息[ldap] user testuser authorized to use remote access- 并且用户后来被拒绝......

Min*_*ark 12

我将在这里尝试回答 LDAP 问题。

这是简短的回答:确保ldap模块已从该authenticate部分中移除,并确保该mschap模块同时存在于authorizeauthenticate部分中。只需忽略“没有“已知好的”密码”。

现在这是(非常)长的答案。

ldap 模块如何工作?

当您激活本节中的ldap模块时authorize,当 FreeRADIUS 接收到 RADIUS 数据包时,它会执行以下操作:

  1. 它尝试绑定到 LDAP 服务器(作为访客用户,或者使用给定的身份,如果在 中配置ldap.conf
  2. 它使用基本 DN(在 中配置ldap.conf)下的过滤器搜索用户的 DN 条目。
  3. 它从 中配置的那些中获取它可以获得的所有 LDAP 属性ldap.attrmap,并将它们转换为 RADIUS 属性。
  4. 它将这些属性添加到 RADIUS 数据包的检查项目列表中。

当您激活该部分中的ldap模块时authenticate,这就是 FreeRADIUS 所做的:

  1. 它尝试以用户身份绑定到 LDAP 服务器。
  2. 如果能绑定,则认证成功,Radius-Accept发包给客户端,否则为失败,导致Radius-Reject发包。

那么如何配置 FreeRADIUS 以使 PEAP/MS-CHAP-v2 与 LDAP 一起使用?

这里重要的一点是,只有当 FreeRADIUS 服务器可以从它收到的 RADIUS 数据包中检索到用户的明文密码时,才能绑定为用户。仅当使用 PAP 或 TTLS/PAP 身份验证方法(也可能还使用 EAP/GTC)时才会出现这种情况。只有 TTLS/PAP 方法才是真正安全的,并且在 Windows 中默认不可用。如果您希望您的用户与 TTLS/PAP 连接,您需要让他们安装 TTLS 请求者软件,这很少是一个选项。大多数情况下,在使用 WPA Enterprise securiy 部署 WiFi 时,PEAP/MS-CHAP-v2 是唯一合理的选择。

所以底线是:除非您使用 PAP 或 TTLS/PAP,否则您可以安全地ldap从该authenticate部分中删除该模块,实际上,您应该: 绑定用户将不起作用。

如果您的测试在使用时有效radtest,则可能意味着该ldap模块在该authenticate部分中被激活:它将尝试以用户身份绑定,并且由于 radtest 使用 PAP 身份验证,因此它会成功。但如果您尝试通过接入点连接,它将失败,因为您使用的是 PEAP/MS-CHAP-v2。

您应该做的是ldapauthenticate部分中删除模块,并确保mschapauthorizeauthenticate部分中激活模块。将会发生的是,mschap模块将使用NT-Password在该authorize阶段期间从 LDAP 服务器检索的属性来处理身份验证。

这是您的sites-enabled/default文件的外观(没有所有注释):

    ...
    authorize {
        preprocess
        suffix
        eap {
            ok = return
        }
        expiration
        logintime
    }
    authenticate {
        eap
    }
    ...
Run Code Online (Sandbox Code Playgroud)

您的sites-enabled/inner-tunnel文件应该如下所示:

    ...
    authorize {
        mschap
        suffix
        update control {
               Proxy-To-Realm := LOCAL
        }
        eap {
            ok = return
        }
        ldap
        expiration
        logintime
    }
    authenticate {
        Auth-Type MS-CHAP {
            mschap
        }
        eap
    }
    ...
Run Code Online (Sandbox Code Playgroud)

“没有“已知好的”密码”警告怎么样?

好吧,你可以放心地忽略它。之所以存在,是因为ldap模块UserPassword在该authorize阶段从 LDAP 服务器获取用户详细信息时找不到属性。在您的情况下,您拥有该NT-Password属性,这对于PEAP/MS-CHAP-v2身份验证来说非常好。

我猜这个警告存在是因为在ldap设计模块时PEAP/MS-CHAP-v2还不存在,所以当时唯一有意义的事情是从 LDAP 服务器检索 UserPassword 属性,以便使用 PAP、CHAP、EAP/ MD5 或此类身份验证方法。


kma*_*rsh 1

根据错误报告,简单重建 FreeRADIUS 应该可以解决 OpenSSH 支持问题。只需要做一次。

我不确定管理的便捷性与设置有什么关系。通常,设置越复杂、越详细,管理起来就越容易,因为设置涵盖了所有基础。您的意思是配置也必须轻松地删除到其他服务器上吗?您要设置多少个无线局域网?

配置完成后,管理应仅限于 LDAP 用户添加、删除和修改。这些应该很容易,可以使用 ldapmodify(等)编写脚本,或者找到一个像样的 LDAP 图形前端并用屏幕截图记录流程。