1、前置准备
安装Debian9.5系统的虚拟机
2、安装
安装freeradius最新版本与mysql、openssl。
apt update
apt install freeradius freeradius-mysql openssl
# 可选
apt install mysql
3、Freeradius基础配置
首先需要修改users文件,加入第一个测试用户,便于进行测试,测试完成后需要删除。
nano /etc/freeradius/3.0/users
在末尾添加以下内容,定义一个用户名为testing,密码为password的用户。
testing Cleartext-Password := "password"
开启调试模式。
freeradius -X
若出现Ready to process requests字样,代表服务器启动成功,可以接收认证包。
# 向本地服务器发送认证请求,账号为testing,密码为password,对称密钥为testing123。若收到Access-Accept包,则代表认证成功,可以进行下一步的配置。
radtest testing password localhost 0 testing123
修改的是位于根目录的clients.conf
文件,配置认证密码和设置可连接的client ip范围。
nano /etc/freeradius/3.0/clients.conf
在适当的位置添加如下语句
client client1 { #client1是认证终端的别名
ipaddr = 192.168.0.1 #这是认证终端地址,通常为路由器LAN接口地址。
#如果想允许整个子网的使用,可以加/子网掩码,如192.168.0.0/24
#如果是IPv6网络,可以使用ipv6addr = <IPv6地址>/<子网掩码>
#如果网内存在DNS服务器,此处也可以为一个域名
secret = testing123 #共享对称密钥,可以任意修改,注意在路由器参数也需要修改以匹配
require_message_authenticator = no #建议为no,旧版本协议设备不支持message authenticator
#还有一些参数可以修改,详见clients.conf中的注释,此处对于日常使用已经足够
}
4、SQL模块的链接
mysql服务配置
首先需要配置MySQL,为其配置数据库与账号密码:
CREATE USER radius IDENTIFIED by 'radpass'; /*创建用户名为radius,密码为radpass; 此处为测试账号,正式环境需要配置随机密码*/
CREATE DATABASE radius; /*创建名为radius的数据库*/
GRANT all on radius.* to radius@'localhost' identified by 'radpass'; /*授权radius用户的访问权限*/
导入数据表结构
use radius;
source /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql;
至此已经配置完成mysql服务配置。radius认证用户、radius数据库及表结构已经创建完成。
Freeradius连接MySQL数据库
创建一个符号链接(symbolic link),把mods-available的sql链接到mods-enabled内:
ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/
修改sql文件,配置MySQL连接
nano /etc/freeradius/3.0/mods-enabled/sql
修改配置文件如下(未列出的不修改):
sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
port = 3306
login = "radius"
password = "radpass"
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
groupcheck_table = "radgroupcheck"
authreply_table = "radreply"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
delete_stale_sessions = yes
pool {
start = ${thread[pool].start_servers}
min = ${thread[pool].min_spare_servers}
max = ${thread[pool].max_servers}
spare = ${thread[pool].max_spare_servers}
uses = 0
retry_delay = 30
lifetime = 0
idle_timeout = 60
}
client_table = "nas"
group_attribute = "SQL-Group"
$INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}
接着重启freeradius服务,如果没有错误信息,说明sql模块加载成功。
日志记录到数据库中
修改site-enabled/default中的authorize、authenticate、accounting、post-auth部分。
取消注释sql
配置,并将files
配置注释掉
5、TLS模块的配置(选配)
现在让我们来转向如何使用Freeradius中的TLS模块以确保传输安全或使用证书完成认证过程。首先要进行的是生成一套测试用证书文件:
cd /etc/freeradius/3.0/certs
make
经过一段时间的密钥生成,一套证书被存在了certs文件夹内,其中如下文件对我们而言具有作用:
ca.pem: 自签发根证书,用于服务器验证客户证书或客户验证服务器证书。
server.pem: 服务器证书
server.key: 服务器私钥,保护密码为whatever
client.p12: PKCSv12编码的个人证书文件,包含了证书,私钥,并由密码“whatever”保护,需要导出并在自有设备上安装。
接下来我们需要修改freeradius配置文件使其支持TLS,此时需要编辑mods-enabled/eap
vim /etc/freeradius/3.0/mods-enabled/eap
接着修改如下参数(未列出的不修改)
eap{
default_eap_type=tls #其实不修改也可以,Freeradius会自己根据请求包调用相应的方法
tls-config tls-common {
private_key_password = whatever #证书私钥密码
private_key_file = ${certdir}/server.key #也可以为绝对路径,服务器私钥
certificate_file = ${certdir}/server.pem #也可以为绝对路径,服务器证书
ca_file = ${cadir}/ca.pem #也可以为绝对路径,CA根证书
dh_file = ${certdir}/dh #也可以为绝对路径,Diffie-Hellman参数
}
}
此时,重启freeradius服务器,EAP-TLS/EAP-TTLS已配置成功。