凌峰创科服务平台

Linux RADIUS认证服务器如何配置部署?

我们将以目前最流行、功能最强大的开源 RADIUS 服务器 FreeRADIUS 为例,结合 MariaDB/MySQL 作为后端数据库,为您提供一个完整、生产级的部署指南。

Linux RADIUS认证服务器如何配置部署?-图1
(图片来源网络,侵删)

第一部分:核心概念

在开始之前,理解几个关键概念很重要:

  1. RADIUS 组件:

    • RADIUS Client (客户端): 请求认证的设备,如无线路由器、交换机、VPN 服务器、防火墙等,它负责向 RADIUS Server 发送 Access-Request 请求。
    • RADIUS Server (服务器): 处理认证请求的中心服务器,它验证用户凭据,并返回 Access-Accept (接受) 或 Access-Reject (拒绝) 响应。
    • RADIUS Proxy (代理): 可以转发 RADIUS 请求到其他 RADIUS 服务器,通常用于多租户或分布式环境。
  2. RADIUS 认证流程 (简版):

    1. 用户在客户端设备(如 Wi-Fi)上输入用户名和密码。
    2. 客户端将用户名和密码打包成一个 Access-Request 包,发送给 RADIUS Server。
    3. RADIUS Server 收到请求后,会使用 共享密钥 验证请求的合法性(防止伪造)。
    4. 服务器根据配置的认证方式(如检查本地文件、数据库、LDAP 等)验证用户名和密码。
    5. 验证通过,服务器返回 Access-Accept;失败则返回 Access-Reject
    6. 客户端根据收到的响应,允许或拒绝用户接入。
  3. 认证与授权:

    Linux RADIUS认证服务器如何配置部署?-图2
    (图片来源网络,侵删)
    • 认证: 回答“你是谁?”的问题,验证用户身份。
    • 授权: 回答“你能做什么?”的问题,在认证通过后,为用户分配特定的权限(如 IP 地址、VLAN、带宽限制等),在 RADIUS 中,这通常通过返回的属性来实现。

第二部分:部署 FreeRADIUS 服务器 (以 Ubuntu/Debian 为例)

我们将安装 FreeRADIUS,并配置它使用 MariaDB 数据库来存储用户信息。

步骤 1: 安装 FreeRADIUS 和数据库

更新系统包列表并安装必要的软件。

sudo apt update
sudo apt install freeradius freeradius-mysql freeradius-utils mariadb-server -y
  • freeradius: 核心 RADIUS 服务器包。
  • freeradius-mysql: FreeRADIUS 的 MariaDB/MySQL 数据库支持模块。
  • freeradius-utils: 包含 radtest 等有用的测试工具。
  • mariadb-server: 作为用户信息存储的后端数据库。

步骤 2: 配置数据库

  1. 登录并创建数据库:

    sudo mysql

    在 MariaDB shell 中执行:

    Linux RADIUS认证服务器如何配置部署?-图3
    (图片来源网络,侵删)
    CREATE DATABASE radius;
    CREATE USER 'radius'@'localhost' IDENTIFIED BY 'your_strong_password';
    GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;
  2. 导入数据库结构: FreeRADIUS 提供了现成的 SQL 文件来创建用户表。

    # 根据你的系统,文件路径可能略有不同
    sudo mysql -u radius -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

    系统会提示你输入之前为 radius 用户设置的密码。

  3. 配置 FreeRADIUS 连接数据库: 编辑 FreeRADIUS 的 SQL 配置文件。

    sudo nano /etc/freeradius/3.0/mods-available/sql

    找到 driver = "rlm_sql_mysql" 部分,并确保以下配置正确:

    # ...
    database = "radius"
    server = "localhost"
    login = "radius"
    password = your_strong_password
    # ...
    # 确保 dialect 设置为 mysql
    dialect = "mysql"
    # ...

    取消注释(删除 )read_groupsread_user 这两行,因为我们使用数据库来读取用户和组信息。

    read_groups = yes
    read_users = yes

    保存并退出。

  4. 启用 SQL 模块: FreeRADIUS 使用符号链接来启用或禁用模块。

    sudo ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/

步骤 3: 添加测试用户

我们向数据库中添加一个用户,用于测试。

  1. 插入用户数据:

    sudo mysql -u radius -p radius

    在 MariaDB shell 中执行:

    -- 插入一个用户,用户名 'testuser',密码 'testpass'
    -- 'Cleartext-Password' 是一个明文密码模块
    -- 'Auth-Type := Local' 表示使用本地认证方式
    INSERT INTO radcheck (username, attribute, op, value) VALUES ('testuser', 'Cleartext-Password', ':=', 'testpass');
    -- 授权用户接入,设置 Framed-Protocol 为 PPP (适用于 PPPoE/PPTP/L2TP)
    -- Simultaneous-Use 限制同一用户只能同时在线一个设备
    INSERT INTO radreply (username, attribute, op, value) VALUES ('testuser', 'Framed-Protocol', ':=', 'PPP');
    INSERT INTO radreply (username, attribute, op, value) VALUES ('testuser', 'Simultaneous-Use', ':=', '1');
    -- (可选) 添加用户组
    INSERT INTO radusergroup (username, groupname) VALUES ('testuser', 'users');
    EXIT;

步骤 4: 配置 FreeRADIUS 主配置

编辑主配置文件,让 FreeRADIUS 默认从 SQL 模块加载用户。

sudo nano /etc/freeradius/3.0/sites-available/default
  1. 取消注释 sql 模块: 找到 authorizeaccounting 段落,确保 sql 模块被取消注释并放在合适的位置(通常在 files 之后)。

    authorize {
        # ...
        sql
        # ...
    }

    同样,在 accounting 段落中也取消注释 sql

    accounting {
        # ...
        sql
        # ...
    }
  2. (可选) 禁用 files 模块: 如果你完全依赖数据库,可以注释掉 files 模块,避免它覆盖数据库的配置。

    # authorize {
    #    files
    #    ...
    # }
  3. 配置客户端: 找到 client 段落,这是配置哪些 RADIUS Client(如你的无线路由器)可以连接到服务器的部分。

    client localhost {
        ipaddr = 127.0.0.1
        proto = *
        secret = testing123
        require_message_authenticator = no
        limit {
            max_connections = 16
            lifetime = 0
            idle_timeout = 30
        }
    }
    • ipaddr: 客户端的 IP 地址。
    • secret: 共享密钥,必须与客户端设备上的配置完全一致!testing123 是默认的测试密钥,生产环境请务必修改。

步骤 5: 启动并测试服务

  1. 启动 FreeRADIUS 服务:

    sudo systemctl start freeradius
    sudo systemctl enable freeradius # 开机自启
  2. 进行本地测试: 使用 radtest 工具进行测试,它模拟一个 RADIUS Client 向本地服务器发送认证请求。

    # 格式: radtest <用户名> <密码> <服务器IP> <端口> <共享密钥>
    radtest testuser testpass localhost 0 testing123

    如果一切正常,你会看到类似下面的输出:

    
    Sending Access-Request of id 228 to 127.0.0.1 port 1812
        User-Name = "testuser"
        User-Password = "testpass"
        NAS-IP-Address = 192.168.1.100
        NAS-Port = 0
    rad_recv: Access-A
分享:
扫描分享到社交APP
上一篇
下一篇