凌峰创科服务平台

Linux下如何快速搭建Radius服务器?

我们将使用 FreeRADIUS 这款业界最流行、功能最强大的开源 RADIUS 服务器来搭建,本教程将以 Ubuntu 22.04 为例,但步骤同样适用于其他 Debian/Ubuntu 系列发行版,以及稍作修改后的 CentOS/RHEL 系列。

Linux下如何快速搭建Radius服务器?-图1
(图片来源网络,侵删)

第一步:规划与准备

在开始之前,先明确我们的目标:

  • 服务器: Ubuntu 22.04
  • 软件: FreeRADIUS, MariaDB/MySQL (用于存储用户和密码)
  • 客户端: 另一台 Linux 机器或一台支持 802.1X 的设备,我们将使用 radtest 命令进行测试。
  • 认证方式: 我们将配置最常用的 PAP (Password Authentication Protocol),并使用数据库来存储用户凭据。

第二步:安装 FreeRADIUS 和数据库

  1. 更新系统并安装 FreeRADIUS

    sudo apt update
    sudo apt install freeradius freeradius-mysql -y

    安装过程会提示是否启动 FreeRADIUS 服务,选择 Yes 或直接回车确认。

  2. 安装数据库服务器 为了让用户信息持久化且易于管理,我们使用数据库,这里安装 MariaDB(MySQL 的一个分支)。

    Linux下如何快速搭建Radius服务器?-图2
    (图片来源网络,侵删)
    sudo apt install mariadb-server mariadb-client -y

    安装完成后,安全地配置数据库:

    sudo mysql_secure_installation

    根据提示进行操作:

    • 输入 root 密码(刚安装时通常为空,直接回车)
    • 设置 root 密码 (Y)
    • 移除匿名用户 (Y)
    • 禁止 root 远程登录 (Y)
    • 移除测试数据库 (Y)
    • 重新加载权限表 (Y)
  3. 创建 RADIUS 数据库和用户 登录到 MariaDB 控制台:

    sudo mysql -u root -p

    然后执行以下 SQL 语句,创建一个名为 radius 的数据库,一个名为 radius 的用户,并授予相应权限。请务必替换 your_strong_password 为一个安全的密码。

    Linux下如何快速搭建Radius服务器?-图3
    (图片来源网络,侵删)
    -- 创建数据库
    CREATE DATABASE radius;
    -- 创建用户并授权
    GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'localhost' IDENTIFIED BY 'your_strong_password';
    -- 刷新权限使设置生效
    FLUSH PRIVILEGES;
    -- 退出
    EXIT;

第三步:导入数据库结构

FreeRADIUS 提供了现成的 SQL 脚本来创建用户表、组表等结构。

  1. 找到 SQL 脚本文件的位置,通常在 /etc/freeradius/3.0/mods-config/sql/main/mysql/ 目录下。

    ls /etc/freeradius/3.0/mods-config/sql/main/mysql/

    你会看到一个名为 schema.sql 的文件。

  2. 导入该脚本到我们刚刚创建的 radius 数据库中。

    mysql -u radius -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

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


第四步:配置 FreeRADIUS 连接数据库

我们需要告诉 FreeRADIUS 如何连接到我们刚刚创建的数据库。

  1. 编辑 sql.conf 文件

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

    找到并修改以下几行,确保它们与你的数据库设置匹配:

    driver = "rlm_sql_mysql"
    # ...
    server = "localhost"
    port = 3306
    login = "radius"
    password = your_strong_password
    # ...
    radius_db = "radius"

    保存并退出 (Ctrl+X, Y, Enter)。

  2. 启用 SQL 模块 FreeRADIUS 使用模块化的设计,需要手动启用 sql 模块。

    # 创建一个指向 mods-available/sql的软链接到 mods-enabled/
    sudo ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/

第五步:配置用户认证方式

我们配置使用数据库进行认证,并启用 PAP 协议。

  1. 编辑 clients.conf 文件 这个文件定义了哪些 RADIUS 客户端(如交换机、AP、VPN 服务器)可以连接到你的 RADIUS 服务器,为了测试,我们先允许来自本机的连接。

    sudo nano /etc/freeradius/3.0/clients.conf

    找到或添加一个客户端定义,使用 localhost 作为 IP 地址,并设置一个共享密钥。

    client localhost {
        ipaddr = 127.0.0.1
        secret = testing123
        require_message_authenticator = no
        limit {
            max_connections = 50
            lifetime = 0
            idle_timeout = 30
        }
    }

    secret (共享密钥) 是 RADIUS 客户端和服务器之间通信的密码,必须保持一致。

  2. 编辑 default 策略文件 这个文件定义了认证的逻辑。

    sudo nano /etc/freeradius/3.0/sites-available/default

    我们需要做两处关键修改:

    • 启用 sql 模块: 找到 authorizeaccounting 段,取消注释(删除 )sql

      authorize {
          # ...
          sql
          # ...
      }
      accounting {
          # ...
          sql
          # ...
      }
    • 设置 pap 认证: 找到 authenticate 段,确保 pap 被启用。

      authenticate {
          # ...
          Auth-Type PAP {
              pap
          }
          # ...
      }

      保存并退出。


第六步:添加测试用户

我们需要在数据库中添加一个可以用来测试的用户。

  1. 登录到 MariaDB:

    mysql -u radius -p radius
  2. 使用 SQL 语句插入用户,用户名是 testuser,密码是 testpass

    INSERT INTO radcheck (Username, Attribute, op, Value) VALUES ('testuser', 'User-Password', ':=', 'testpass');
    • radcheck 表用于存储用户的检查属性。
    • User-Password 是 RADIUS 属性,表示用户的密码。
    • 是赋值操作符。
    • testpass 是明文密码(FreeRADIUS 会在认证时自动进行加密处理)。
  3. 退出数据库:

    EXIT;

第七步:测试 RADIUS 服务器

  1. 启动并检查 FreeRADIUS 服务

    # 启动服务
    sudo systemctl start freeradius
    # 检查服务状态
    sudo systemctl status freeradius

    确保状态是 active (running)

  2. 使用 radtest 进行本地测试 radtest 是一个命令行测试工具,它将模拟一个 RADIUS 客户端发送认证请求。

    radtest testuser testpass localhost 0 testing123
    • testuser: 用户名
    • testpass: 密码
    • localhost: RADIUS 服务器地址
    • 0: RADIUS 服务器 UDP 端口(默认为 1812/1813)
    • testing123: 我们在 clients.conf 中为 localhost 设置的共享密钥
  3. 查看测试结果 如果配置成功,你会在终端输出中看到类似下面的内容,关键在于 Access-Accept

    Sending Access-Request of id 210 to 127.0.0.1 port 1812
        User-Password = "testpass"
    rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=210, length=20

    如果看到 Access-Reject,说明认证失败,请检查前面的每一步配置(用户密码、数据库连接、共享密钥等)。

  4. 调试模式(非常重要) 如果

分享:
扫描分享到社交APP
上一篇
下一篇