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 目录下:
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>
配置客户端信息
客户端信息在/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 AP1240的配置
这个配置可以在web中进行,具体见截图。
测试
操起手机,打开设置,选择 无线局域网,选择我们的SSID,认证的对话框如约而至。输入账号密码,出现了一个界面:
这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:
不错不错。很好,很强大!