给Cisco的AP配置RADIUS认证

Cisco的AP是非常牛逼的,最大的特点就是稳定,连续开几个一两百天是不会有问题。另外,负载能力也是一级棒,一个AP带个几十个设备是没有丝毫压力的。再有一个优点就是,虽然新品的价格很贵,但是二手货的价格非常便宜。一两百一个。而且淘宝一搜一大把,非常适合装逼,也很实用。

在企业内部部署wlan的时候呢,平时家里的那种WPA/WPA2这样的认证模式就明显有问题了。 因为企业内部人多,WPA/WPA2认证模式只能设置一个密码,这样的密码在内部分享的话,自然是不好的。于是WPA/WPA2还有企业模式。这里我们用WPA2 Enterprise方式来配置。这种方式呢,是可以开用户,一人一个账号,各自用各自的账号链接wlan,还能给用户做审计,功能相对更加完善。

Cisco的AP12xx系列自然是支持WPA2 Enterprise这样的认证。他的用户开设认证都是通过后台接radius服务器来实现的,下面我们就尝试用linux下的freeradius来搭建一个支持Cisco AP12xx系列设备的账号认证审计服务。

关键字:cisco,aironet, ap, access point, 802.1x, peap, radius , freeradius

安装CentOS

第一步自然是安装操作系统,我们选用目前用的比较多的centos 7来进行搭建。 为了让系统足够的干净,最小化安装,打好补丁,关闭selinux,增加好epel和remi,官方mysql的源,安装好mysql-community-server。

安装freeradius

废话少说,直接用yum,过程比较愉快:

[root@v-radius ~]# yum install freeradius freeradius-utils freeradius-mysql -y

初始化数据库

freeradius里面附带了用mysql做后台时候需要创建的一些表,这些东西默认放在 /etc/raddb/mods-config/sql/main/mysql 目录下面,我们就直接在mysql里面创建一个库,然后把相应的sql导入一下,即可把相应的数据表建好:

[root@v-radius ~]# mysql -u root 
mysql> create database radiusdb charset utf8;
mysql> \q

[root@v-radius ~]# mysql -u root radiusdb < /etc/raddb/mods-config/sql/main/mysql 
[root@v-radius ~]# 

配置radius

radius的配置主要集中在/etc/raddb 下面。centos7的系统已经将相关配置分了类,将不同方面的配置,分散在mods-enabled 和sites-enable 目录下:

《给Cisco的AP配置RADIUS认证》 image.png

sites-enabled里面主要是关于virtual server的配置(freeradius 2.x开始支持virtual server,相当于httpd里面的虚拟主机)

mods-enabled里面主要是关于各个模块的配置信息。 从管理的角度出发,一般我们的配置是在 mods-available里面配置好相应的模块,然后通过符号连接,连接到mods-enable目录中去。 本文需要用到的几个mod是 mschap, sql和eap。下面分别讲讲这三个配置:

sql

[root@v-radius ~] vi /etc/raddb/mods-available/sql

sql {
  driver = "rlm_sql_mysql"
  dialect = "mysql"

  server = "localhost"
  port = 3306
  login = "root"
  password = ""

  radius_db = "radiusdb"

以上配置,还是容易看懂的。我这是测试环境,所以就直接root连mysql了。 配置完了,别忘了把sql连接到mods-enabled目录下:

[root@v-radius ~] cd /etc/raddb/mods-available
[root@v-radius ~] ln -s sql ../mods-enabled/

eap

EAP是 Extensible Authentication Protocol的缩写,中文翻译成 扩展认证协议,在RFC3748中定义,取代了旧版本的RFC2284。他主要被应用在无线认证环境中。当然这个协议其实现在已经被更新的标准取代了,但是因为历史的原因,配置项还是叫这个名字。 现在主要使用的是 PEAP协议:

PEAP是Protected Extensible Authentication Protocol的缩写,现在各主流操作系统,各大wlan设备制造商都是支持PEAP的。 具体配置项如下:

[root@v-radius ~] cd /etc/raddb/mods-available
[root@v-radius ~] vi eap

eap {

  default_eap_type = peap
  timer_expire = 60

  peap {
    tls = tls-common
    default_eap_type = mschapv2

mschap

mschap这个东西比较熟悉了,windows下的各种PPP, PPPoE,PPTP等,都要用这个东西来认证。

[root@v-radius ~] cd /etc/raddb/mods-available
[root@v-radius ~] vi eap
mschap {
  use_mppe = yes
  require_encryption = yes
  require_strong = yes
...

添加账号信息

帐号信息是添加在 radiusdb库的radcheck表里面:

mysql> insert into radcheck set username='guest', attribute='Cleartext-Password', op=':=', value='testpassword';
mysql> 

《给Cisco的AP配置RADIUS认证》 初始化数据

配置客户端信息

客户端信息在/etc/raddb/clients.conf 中配置,主要有客户端的IP,连接上来的密码等信息:

[root@v-radius ~] cd /etc/raddb/
[root@v-radius ~] vi clients.conf

client localhost {
  ipaddr = 127.0.0.1
  proto = *
  secret = testing123
...
}

client cisco_ap {
  ipaddr = 10.23.0.0/16
  secret = hehehe12345
  shortname = "Cisco AP12xx"
}

这里定义了两个客户,一个是Localhost,用于测试用的,另一个是cisco_ap,用于无线ap连接用的。

启动freeradius

可以用 -f -X的参数,让radius运行在前台,并且打印出足够多的调试信息,用来找错调试用。
生产环境,可以用 systemctl start radiusd 启动服务。

测试认证

用radtest来测试radius服务是否正常:

[root@v-radius raddb]# radtest guest testpassword localhost 0 testing123
Sent Access-Request Id 71 from 0.0.0.0:37814 to 127.0.0.1:1812 length 75
        User-Name = "guest"
        User-Password = "testpassword"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 0
        Message-Authenticator = 0x00
        Cleartext-Password = "testpassword"
Received Access-Accept Id 71 from 127.0.0.1:1812 to 0.0.0.0:0 length 20

这就表示测试通过。

《给Cisco的AP配置RADIUS认证》 image.png

Cisco AP1240的配置

这个配置可以在web中进行,具体见截图。

《给Cisco的AP配置RADIUS认证》 image.png

测试

操起手机,打开设置,选择 无线局域网,选择我们的SSID,认证的对话框如约而至。输入账号密码,出现了一个界面:

《给Cisco的AP配置RADIUS认证》 join_cz0011_example_cert.jpg

这Example Server Certificate是什么鬼? 定是默认的配置。要是直接这么弄也能用,但是太low了。

发现证书都在 /etc/raddb/certs 里面,我先把里面的东西做个备份。然后清理了一下:

[root@v-radius ~]# cd /etc/raddb/certs
[root@v-radius certs]# rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*

然后分别配置好ca.cnf, server.cnf, client.cnf :

ca.cnf

[root@v-radius certs]# vi ca.cnf
...
[ req ]                                                          
prompt                  = no                                     
distinguished_name      = certificate_authority                  
default_bits            = 2048                                   
input_password          = hehepass1234                                
output_password         = hehepass1234                                
x509_extensions         = v3_ca                                  
                                                                 
[certificate_authority]                                          
countryName             = CN                                     
stateOrProvinceName     = JS                                     
localityName            = Changzhou                              
organizationName        = Internet News Center                   
emailAddress            = hefish@qq.com                          
commonName              = "CZ001 Radius Certificate Authority"   
...

server.cnf

[root@v-radius certs]# vi server.cnf
...
[ req ]
prompt                  = no
distinguished_name      = server
default_bits            = 2048
input_password          = hehe12345
output_password         = hehe12345

[server]
countryName             = CN
stateOrProvinceName     = JS
localityName            = Changzhou
organizationName        = Internet News Center
emailAddress            = hefish@qq.com
commonName              = "CZ001 Radius Server Certificate"
...

client.conf

[root@v-radius certs]# vi client.cnf
...
[ req ]
prompt                  = no
distinguished_name      = client
default_bits            = 2048
input_password          = keke123123
output_password         = keke123123

[client]
countryName             = CN
stateOrProvinceName     = JS
localityName            = Changzhou
organizationName        = Internet News Center
emailAddress            = hefish@qq.com
commonName              = sample@cziic.cn
...

证书有效期在ca.cnf里面控制, [CA_default]里面 default_days,默认是60天,可以改的长点,比如36500天。

之后,我们用bootstrap脚本来生成ca, server, client的证书:

[root@v-radius certs]# ./bootstrap 

证书生成好,记得要修改eap配置里面的服务器证书密码:

[root@v-radius certs]# vi ../mods-enabled/eap
...
tls-config  tls-common {
    private_key_password = hehe12345
    private_key_file = ${certdir}/server.pem
...

然后重启radius服务。再次连接WLAN:

《给Cisco的AP配置RADIUS认证》 join_cz0011_cz001_cert.jpg

不错不错。很好,很强大!

    原文作者:贺鱼
    原文地址: https://www.jianshu.com/p/10ab6946b14f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞