问题描述
我正在为150个用户建立无线网络。简而言之,我正在寻找设置RADIUS服务器以针对LDAP验证WPA2的指南。在Ubuntu上。
-
我有一个可用的LDAP,但是由于它尚未投入生产,因此可以很容易地适应该项目可能需要的任何更改。
-
我一直在研究FreeRADIUS,但是任何RADIUS服务器都可以。
-
我们为WiFi提供了一个单独的物理网络,因此在这方面不必担心太多安全性。
-
我们的AP是HP的低端企业产品-它们似乎支持您能想到的一切。
-
所有Ubuntu服务器,宝贝!
和坏消息:
-
我现在所掌握的知识不如我本人,最终将接管管理工作,因此设置必须尽可能地为”trivial”。
-
到目前为止,我们的设置仅基于Ubuntu存储库中的软件,但我们的LDAP管理Web应用程序和一些小的特殊脚本除外。因此,没有“获取软件包X,untar,。/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.
基本上,Ubuntu版本的FreeRADIUS不支持SSL(bug 183840),这使所有安全的EAP-types无效。笨蛋
但是对任何感兴趣的人都有一些有用的文档:
更新2009-08-19:
我昨天晚上结束了自己的FreeRADIUS软件包的编译-http://www.linuxinsight.com/building-debian-freeradius-package-with-eap-tls-ttls-peap-support.html有一个非常好的食谱(有关更新的说明,请参阅帖子的注释)。
我从http://CACert.org获得了证书(如果可能,您可能应该获得”real”证书)
然后,我按照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
使用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
>
但是,当我尝试通过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
...
显然,NT和LM密码与上述密码不同,但是消息[ldap] user testuser authorized to use remote access
-以及该用户后来被拒绝…
最佳方案
我将在这里尝试回答LDAP问题。
简短的答案是:确保从authenticate
部分中删除了ldap
模块,并确保authorize
和authenticate
部分中都包含mschap
模块。只需忽略“否”known good”密码”。
现在,这是(很长)的答案。
ldap模块如何工作?
当您在authorize
部分中激活ldap
模块时,这是FreeRADIUS收到RADIUS数据包时的操作:
-
它尝试绑定到LDAP服务器(作为来宾用户,或者如果在
ldap.conf
中配置了一个身份,则使用给定的身份) -
它使用基本DN(在
ldap.conf
中配置)下的过滤器搜索用户的DN条目。 -
它从
ldap.attrmap
中配置的属性中获取所有可以获取的LDAP属性,并将其转换为RADIUS属性。 -
它将这些属性添加到RADIUS数据包的检查项目列表中。
当您在authenticate
部分中激活ldap
模块时,这是FreeRADIUS的作用:
-
它尝试以用户身份绑定到LDAP服务器。
-
如果它可以绑定,则表示身份验证成功,并且
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安全性部署WiFi时,PEAP /MS-CHAP-v2是唯一合理的选择。
因此,最重要的是:除非使用PAP或TTLS /PAP,否则可以安全地从authenticate
部分中删除ldap
模块,实际上,您应该:绑定,因为用户将无法使用。
如果使用radtest
时测试有效,则可能意味着authenticate
部分中的ldap
模块已激活:它将尝试以用户身份进行绑定,并且由于radtest使用PAP身份验证,因此它将成功。但是,由于您使用的是PEAP /MS-CHAP-v2,因此如果尝试通过访问点进行连接将失败。
您应该做的是从authenticate
部分中删除ldap
模块,并确保同时激活了authorize
和authenticate
部分中的mschap
模块。将会发生的是,mschap
模块将使用NT-Password
属性负责认证,该属性是在authorize
阶段从LDAP服务器检索的。
这是您的sites-enabled/default
文件的外观(不带所有注释):
...
authorize {
preprocess
suffix
eap {
ok = return
}
expiration
logintime
}
authenticate {
eap
}
...
这是您的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
}
...
“没有”known good”密码”警告怎么办?
好吧,您可以放心地忽略它。正是因为ldap
模块在authorize
阶段从LDAP服务器获取用户详细信息时找不到UserPassword
属性。在您的情况下,您具有NT-Password
属性,这对于PEAP/MS-CHAP-v2
身份验证来说是完美的。
我猜该警告存在,因为在设计ldap
模块时,PEAP/MS-CHAP-v2
尚不存在,因此当时唯一有意义的事情是从LDAP服务器中检索UserPassword属性,以便使用PAP,CHAP, EAP /MD5或此类身份验证方法。
次佳方案
我将在这里尝试回答OpenSSL问题:简短的答案是使用FreeRADIUS 2.1.8或更高版本,其中包括OpenSSL。它可以在Ubuntu Lucid和Debian Lenny backports中使用(也可能最终在Ubuntu Karmic backports中使用)。
这是一个很长的答案:
不幸的是,OpenSSL许可证曾经(在某种程度上)与FreeRADIUS许可证不兼容。因此,Ubuntu人们选择提供未与OpenSSL链接的FreeRADIUS二进制文件。如果要使用EAP /TLS,PEAP或TTLS,则必须获取源文件并使用--with-openssl
选项进行编译(如您使用的食谱所述)。
但是最近,the licensing problem has been fixed。可以使用OpenSSL编译和分发FreeRADIUS 2.1.8或更高版本。坏消息是,最新的稳定Ubuntu发行版(Karmic Koala)仅包含FreeRADIUS 2.1.0,而没有OpenSSL(Debian也是如此,因为Lenny仅包含FreeRADIUS 2.0.4)。我检查了Karmic-backports,但似乎尚未将FreeRADIUS 2.1.8或更高版本上载到那里(但可能很快会添加,check it out here)。因此,现在,您必须切换到Ubuntu Lucid(包括FreeRADIUS 2.1.8)或坚持进行编译。对于Debian用户来说,情况要好一些:Lenny backport包含FreeRADIUS 2.1.8。因此,如果您想要非常稳定,易于安装和维护的东西,建议您使用Debian Lenny部署服务器,并安装向后移植的FreeRADIUS软件包(它还使您可以免费编写python模块,而无需重新编译所有实验模块)。
I got a certificate from http://CACert.org (you should probably get a “real” cert if possible)
有一个”gotcha”带有”real”证书(与self-signed证书相对)。
我使用了Thawte签名的签名。它工作正常,用户会看到漂亮的”valid”证书,名称类似于www.my-web-site.com
。当用户接受证书时,他的计算机实际上了解到应该信任同一证书颁发机构颁发的所有证书(我在Windows Vista和MacOSX Snow Leopard上对此进行了测试)!因此,以我为例,如果黑客拥有Thawte签名的www.some-other-web-site.com
证书,那么他可以轻松进行一次Man-in-the中间攻击,而不会在用户计算机上显示任何警告!
解决方案在于用户’s computer’的网络配置中,以明确指定仅”www.my-web-site.com”应该是受信任的。这只需要一分钟,但是除非您给他们一个清晰的过程并确保每个用户都遵循它,否则大多数用户都不知道在哪里配置它。我仍然使用”valid”证书,但坦率地说,看到Windows和MacOSX共享此”bug”令人失望:信任证书颁发机构而不是特定证书。哎哟…