在 Ubuntu 12.04 上配置 Radius 和 LDAP 服务
2012年07月20日 | 标签: freeradius, ldap, linksys, ubuntu
上次提到了我们实验室的 Wi-Fi 更改了认证方式,不再使用 WPA2/PSK 通用密码,而是通过 LDAP 把 Wi-Fi 上网密码和个人帐号联系起来,大家只需要用自己平时的 Unix/Linux/Mail/GroupWise 帐号就可以登陆 Wi-Fi,那么如何配置这样一个系统呢?涉及到的东西有点多,首先需要一个支持 Radius 的无线路由器,然后需要一台装有 Radius 的服务器,这台服务器还需要作为 LDAP 客户端和 LDAP 服务器连起来。
准备工作
- Linksys WRT 54GS 无线路由器,可以替换开源固件的 hacker-friendly 路由器;
- DD-WRT 固件,刷固件的过程可以参考:把 Linksys WRT54GL 路由器当作交换机用;
- FreeRadius 服务,安装在一台 Ubuntu 服务器上;
- LDAP 客户端,安装在同一台 Ubuntu 服务器上;
- LDAP 服务器,一般安装在另一台服务器上,也可以和上面的 FreeRadius/LDAP client 装在一起,LDAP 服务器的配置和安装过程超出本文范围,这里不介绍。
配置 Wi-Fi
刷固件以后按照下图配置 Linksys WRT 54GS,指定 Radius 服务器的 IP 和端口、安全模式、WPA 算法、WPA Shared Key 等,这个 WPA Shared Key 由下面的 FreeRadius 配置指定:
安装和配置 LDAP
这里只是安装 LDAP 客户端,不包括 LDAP 服务器的安装,所以需要事先知道 LDAP 服务器的 IP 或域名等相关信息。
$ sudo apt-get install ldap-auth-client ldap-auth-config libpam-ldap
填入 LDAP 服务器地址 host, base 等:
$ sudo vi /etc/ldap.conf host ldap.vpsee.com base dc=vpsee,dc=com pam_password exop pam_lookup_policy yes nss_initgroups_ignoreusers Debian-exim,backup,bin,daemon,dhcp,games,gnats,irc,klog,libuuid ,list,lp,mail,man,news,ntpd,proxy,root,snmp,sshd,statd,sync,sys,syslog,uucp,www-data
确认 nsswitch.conf 先搜索本地文件,用户登陆的时候先检索本地 /etc/passwd 找不到相关用户名再检索 ldap 服务器上的用户数据库:
$ sudo vi /etc/nsswitch.conf passwd: files ldap group: files ldap shadow: files ldap automount: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files
安装和配置 FreeRadius
安装 FreeRadius:
$ sudo apt-get install freeradius freeradius-utils freeradius-ldap openssl
编辑 clients.conf,确定哪个 IP 范围可以访问 Radius 服务,这里 secret 一行的 testing123 就是上面 DD-WRT 要用到的 WPA Shared Key:
$ sudo vi /etc/freeradius/clients.conf ... client 192.168.2.0/24 { require_message_authenticator = no secret = testing123 shortname = vpsee-network } ...
配置 default,确定 pam 一行没有被注释掉:
$ sudo vi /etc/freeradius/sites-available/default ... authorize { preprocess chap mschap suffix eap { ok = return } unix files expiration logintime pap } ... authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } pam unix eap } ...
同样的确定 inner-tunnel 配置文件里面的 pam 一行没有被注释掉:
$ sudo vi /etc/freeradius/sites-available/inner-tunnel ... authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } pam unix eap } ...
在 users 加入下面认证类型:
$ sudo vi /etc/freeradius/users ... DEFAULT Auth-Type = PAM Fall-Through = 1 ...
测试
配置完毕后重启 freeradius:
$ sudo /etc/init.d/freeradius restart
如果要 debug 的话这样启动 freeradius:
$ sudo /etc/init.d/freeradius stop $ sudo freeradius -X
先测试使用 LDAP 方式登陆系统是否正确,使用 LDAP 用户名和密码从另一台电脑 ssh 登陆到这台 Radius 服务器,如果不用本地帐号而用 LDAP 帐号顺利登陆的话就说明这台服务器已经能顺利使用 LDAP 登陆了:
$ ssh [email protected]
测试 Radius 服务是否能正确从 LDAP 那里得到验证信息,使用 ldap 用户名和密码测试 Radius 服务是否反馈正确消息 Access-Accept:
$ radtest vpsee "password" 192.168.2.65 1 testing123 Sending Access-Request of id 233 to 192.168.2.65 port 1812 User-Name = "vpsee" User-Password = "password" NAS-IP-Address = 192.168.2.65 NAS-Port = 1 rad_recv: Access-Accept packet from host 192.168.2.65 port 1812, id=233, length=20
另一种办法
另外有个办法是不用 pam 的方式,直接用 freeradius-ldap 模块和 LDAP 服务器连接,这种办法不适合我们实验室的应用场景,不过配置要简单一些。简单说一下就是利用 freeadius 的 ldap 模块直接连接 LDAP 服务器验证用户。先安装 freeradius-ldap 模块:
$ sudo apt-get install freeradius-ldap
然后配置 clients.conf
$ sudo vi /etc/freeradius/module/ldap ... ldap { server = "ldap.vpsee.com" identity = "cn=admin,o=My Org,c=UA" password = mypass basedn = "o=My Org,c=UA" filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})" ...
然后取消下面2个文件里面关于 ldap 的相关注释:
$ sudo vi /etc/freeradius/sites-available/default $ sudo vi /etc/freeradius/sites-available/inner-tunnel
重启 freeradius 让配置生效:
$ sudo /etc/init.d/freeradius restart