基于Freeradius3.0配置802.1X认证服务

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已配置成功。

上一篇
下一篇