云计算百科
云计算领域专业知识百科平台

【无线AP企业级认证之搭建FreeRadius服务器(一)】

无线AP企业级认证之搭建FreeRadius服务器(一)

阐述一次搭建FreeRadius服务器经历(2024/03/13)(freeradius2.2.8)

1、环境组网:虚拟机——华为AP- – – – -终端

(无数据库) 虚拟机:VMware Workstation 17Pro,17.5.0(ubuntu-16.04.7-desktop-amd64.iso)在这里插入图片描述 华为AP:型号AirEngine5762-12,胖模式(支持企业认证就可) 手机: 荣耀magic3 elz-an00(当前手机基本都可)

2、安装freeradius

安装软件包命令
$ sudo apt-get install openssl libssl-dev
$ sudo apt-get install freeradius //安装(版本默认2.2.8)

$ sudo dpkg -l | grep radius//检查命令

正常情况下应该显示安装了如下的软件包: freeradius freeradius-common freeradius-utils libfreeradius2 如果缺少其中的文件, 可以使用 apt-get 单独安装

安装freeradius成功后, 执行如下的命令来测试

$ sudo service freeradius stop//停止
$ sudo freeradius -X//启动

如果看到有如下Ready to process requests的输出: 在这里插入图片描述 则说明freeradius启动正常

3、freeradius-utils中的测试工具

freeradius-utils 软件包包含一系列的测试工具用于测试不同的认证方式(都是知识,记录下) radclient //用于向radius server发送radius packet并接收回复 raddebug //用于显示radius server的debug信息 radeapclient //用于向radius server发送EAP packet radlast //从wtmp 文件中获取最后的accounting log并显示 radmin //freeradius demo的管理工具 radsniff //wrapp libpcap, 用于dump radius协议消息 radsqlrelay //传递SQL查询到一个集中的数据库服务器 radtest //radclient的前端, 用于向radius server发送访问请求并接收回复 radwatch //用于启动和监控radius server, 当radius server退出时, 负责重启 radwho //显示当前在线的user radzap //radwho从数据库或者文件中获取当前在线的user的信息, 有时候这些信息没有同步,radzap 用于同步这些信息

4. 安装eapol_test

在测试eap认证时, 还需要安装 eapol_test 工具, eapol_test 是 wpa_supplicant 中的一个测试工具,在wpa_supplicant 官网 可下载wpa_supplicant 源码,自行编译,例如

$ wget http://w1.fi/releases/wpa_supplicant-2.5.tar.gz

wpa_supplicant 默认使用netlink, 因此, 需要先安装netlink的lib库,以使用的ubuntu 16.04为例

$ sudo apt-get install libnl-3-200
$ sudo apt-get install libnl-3-dev
$ sudo apt-get install libnl-genl-3-200
$ sudo apt-get install libnl-genl-3-dev

然后, 进入wpa_supplicant 的源码目录进行编译

$ apt install vim//后面修改文件需要vim工具
$ tar xzvf wpa_supplicant-2.5.tar.gz
$ cd wpa_supplicant-2.5/wpa_supplicant
$ cp defconfig .config
$ vim .config

//去掉 “#CONFIG_EAPOL_TEST=y” 前的注释 //去掉 “#CONFIG_LIBNL32=y” 前的注释

$ make eapol_test//编译

然后安装编译出的 eapol_test

$ sudo cp eapol_test /usr/local/bin
$ sudo chmod a+x /usr/local/bin/eapol_test

freeradius的配置文件为存放在 “/etc/freeradius/” 目录下的 *.conf, 不同的配置文件有着不同的作用, 其中常用的有

clients.conf : 对radius client进行配置 eap.conf : 对eap认证方式进行配置 radiusd.conf : 对radius server进行配置 users : freeradius可以使用文件和数据库来保存user信息, 当使用文件来保存user信息时, 在此文件中保存

5.1 radiusd.conf

radiusd.conf 中的内容基本上保持默认值就可以使用, 需要注意如下几个部分

listen{
type = auth #可取值有 auth, acct, proxy, detail, status, coa
ipaddr = * #可以是域名,或者ip, 或者*代表通配
port = 0 #端口号, 0代表从 /etc/services 中读取 (默认为1812)
}

freeradius支持 认证/计费 等功能, 我们只关注认证功能, 因此只关注 auth 类型的 listen块即可

ipaddr和port用于指定freeradius绑定的IP地址和端口号, 有些系统上面支持在一个网络接口上设置多个ip, 此时需要详细指定 ipaddr 和 port, 一般情况下不需要修改

modules {
……
#$INCLUDE eap.conf
#$INCLUDE sql.conf
……
}

当需要使用eap认证的功能时, 则需要去掉 “INCLUDE eap.conf” 前的注释#, 当需要使用数据库来存储user信息时, 则需要去掉 “$INCLUDE sql.conf” 前的注释# 后续的测试将会只使用文件的方式来存储user信息;不使用数据库

5.2 clients.conf

clients.conf 文件中, 使用 client 块来配置一个 radius client

client Name { //Name 为client的名称, 自行定义
ipaddr = //client 的ip地址 或者主机名
#ipv6addr = //ipv6 地址

#netmask = //子网掩码, 和ipaddr 不在一个网段的ip的packet讲被忽略, 默认为32
secret = //client的密码

require_message_authenticator = //老式的client在Access-Request中不包含Message-Authenticator, 而 RFC 5080 强制要求包含这一项
//这一配置项定义client是否包含Message-Authenticator, 如果定义为yes, 但是实际上没有包含, 则请求会被忽略
nastype = //NAS type, 普通的路由设置为 other 即可
}

如下图: clients.conf 或者 在这里插入图片描述

clients.conf中预定义了一个client “localhost” 用于测试

client localhost{
ipaddr = 127.0.0.1
secret = testing123
require_message_authenticator = no
nastype = other
}

5.3 users

users文件用于添加user, 例如

testuser Cleartext-Password := "testpswd"

即添加了一个名为 testuser 的user, 其密码为 testpswd

还可以在users文件中指定某一个user的认证结果, 例如

lameuser Auth-Type := Reject
Reply-Message = "Your account has been disabled."

即针对user “lameuser”, 直接拒绝其认证请求

6. 生成EAP认证所需的证书

EAP认证最多需要3份证书(EAP-TLS):

CA 证书
server 端证书
client 端证书

在linux上可以使用 openssl 命令来生成这些证书,可以使用“make-certs.sh来协助生成所需的证书”(创建一个可执行+x的文件make-certs.sh,内容如下)

#!/bin/sh

rsa_bits=2048
pswd_in=123456
pswd_out=123456

dn_C=CN
dn_ST=JS
dn_L=SZ
dn_O=radius
dn_OU=freeradius
dn_EA="sven@xxx.com"
dn_CN_ca=ca
dn_CN_server=server
dn_CN_client=client

rm demoCA -rf
mkdir -p demoCA/newcerts/
touch demoCA/index.txt
echo 01 > demoCA/serial

#generate self signed CA cert
openssl req -new -x509 -passout pass:$pswd_out -subj /C=$dn_C/ST=$dn_ST/L=$dn_L/O=$dn_O/OU=$dn_OU/CN=$dn_CN_ca/emailAddress=$dn_EA -keyout ca.key -out ca.pem

#generate server and client cert request
openssl req -new -passout pass:$pswd_out -subj /C=$dn_C/ST=$dn_ST/L=$dn_L/O=$dn_O/OU=$dn_OU/CN=$dn_CN_server/emailAddress=$dn_EA -keyout server.key -out server.csr
openssl req -new -passout pass:$pswd_out -subj /C=$dn_C/ST=$dn_ST/L=$dn_L/O=$dn_O/OU=$dn_OU/CN=$dn_CN_client/emailAddress=$dn_EA -keyout client.key -out client.csr

#sign server and client request whith CA cert
openssl ca -in server.csr -out server.pem -cert ca.pem -keyfile ca.key -passin pass:$pswd_in
openssl ca -in client.csr -out client.pem -cert ca.pem -keyfile ca.key -passin pass:$pswd_in

运行过程中, 需要确认是否对server端证书和client端证书进行签名, 输入“y”即可 运行完成后, 生成的证书如下:

ca.key : CA证书的公私钥对 ca.pem : CA证书, PEM格式(终端用户安装CA根证书(WLAN-更多WLAN设置-安装证书)) server.key : server端证书的公私钥对 server.pem : server端证书, PEM格式 client.key : client端证书的公私钥对 client.pem : server端证书, PEM格式

在 “/etc/freeradius/certs/”下新建“test”目录, 然后将上述的 ca.pem, server.pem, server.key 拷贝到该目录中, 然后修改eap.conf 中的 tls 块(- :表示修改前; + :表示修改后):

– certdir = ${confdir}/certs
+ certdir = ${confdir}/certs/test

– cadir = ${confdir}/certs
+ cadir = ${confdir}/certs/test

– private_key_password = whatever
+ private_key_password = 123456

frreradius中 PEAP 和 TTLS 模块都依赖于 TLS, 因此只要使用证书认证时, 就需要配置好TLS

7. 本地测试环境

在 “/etc/freeradius/users” 中添加一个测试用户 testuser, 密码为 userpswd

testuser Cleartext-Password := "userpswd"

7.1 测试添加的 testuser

这一步目的是测试上一步中添加的 testuser 可用, 通过radtest命令, 使用预置的 client “localhost” 向radius server发送radius packet来进行测试, radtest的usage如下

$ radtest [OPTIONS] user passwd radius-server[:port] nas-port-number secret

其中, nas-port-number 没有用到时, 置0即可 首先, 在notebook上以调试模式启动freeradius

$ sudo service freeradius stop
$ sudo freeradius -X //启动freeradius,按照原链接这里可能会启动失败;看是否报错关于dh

freeradius启动失败dh问题解决方法:把/etc/freeradius/certs目录下的dh文件拷贝到test目录下

cp /etc/freeradius/certs/dh /etc/freeradius/certs/test/

重新启动FreeRadius; 然后新开一个终端, 执行测试程序

$ radtest testuser userpswd 127.0.0.1 0 testing123

返回如下的内容

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812 …..

说明认证请求被通过

8. 不同加密方式

测试不同加密方式前, 请确保 /etc/freeradius/radiusd.conf 中的 modules 块中的 “$INCLUDE eap.conf” 语句未被注释掉

1、EAP-MD5

修改 eap.conf , 指定默认的eap 方式为md5;

eap {
……
default_eap_type = md5
……
}

然后启动freeradius

$ sudo service freeradius stop
$ sudo freeradius -X

2、EAP-TLS

同理修改

eap {
……
default_eap_type = tls
……
}

然后启动freeradius (抓包未生效,只有第一个challenge包是tls,后面的challenge变回peap;后来采用了第二次安装freeradius3.0版本)

3、EAP-PEAP

同理修改

eap {
……
default_eap_type = peap
……
}

然后启动freeradius EAP-PEAP认证可以选择在client端使用根证书验证server端证书

EAP-TLS-Require-Client-Cert = Yes //eap.conf中必须校验TLS证书字段,我实际实验无效;可能是我的证书问题,导致我TLS使用第二次不同系统安装;待其他人尝试

终端用户安装CA证书(WLAN-更多WLAN设置-安装证书)

4、测试 EAP-TTLS

eap {
……
default_eap_type = ttls
……
}

支持PAP,CHAP,MSCHAPV2以及支持证书验证;截止2024/03/12 TLS认证失败

客户端侧配置radius服务器地址,认证端口号,共享密钥 服务器地址通过ifconfig&dhclient相关命令配置 认证端口号默认1812,在/etc/services中; 共享密钥配置在clients.conf 在这里插入图片描述 用户关联时出现常见报错: Ignoring request to authentication address * port 1812 from unknown client 192.168.66.73 port 48774 Ready to process requests.

客户端网段未配置进clients.conf

第二次无线AP/STA的TLS双向证书加密认证下个帖子

最后,感谢期待靓女帅哥以及老板们的打赏,祝您身体健康,万事如意,笑口常开 在这里插入图片描述

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【无线AP企业级认证之搭建FreeRadius服务器(一)】
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!