在 Ubuntu 12.04 上配置 Radius 和 LDAP 服务

上次提到了我们实验室的 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 配置指定:

dd-wrt and radius

安装和配置 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

评论 (2 Comments)

  1. 博主,是否可写个关于LDAP 服务器的搭建和部署文档呢?网络上能找到的,1来内容非常零散,2来质量实在差强人意。

  2. ubuntu 10和12,ldap客户端可以直接安装 “ nslcd “ 即可。而且在软件安装过程即可设置ldap服务器等信息,不需要再去更改配置文件。

发表评论