ictsolutions/codeigniter-freeradius

CodeIgniter4 FreeRadius 包装库。


README

CodeIgniter FreeRADIUS 库提供了一套工具,用于通过 CodeIgniter 框架管理和与 FreeRADIUS 服务器交互。它提供了数据库处理、配置 FreeRADIUS 表、操作用户领域和特性、修改 PPPoE 群组设置以及管理 CGNAT (Carrier-Grade NAT) 的 IP 范围等功能。该库通过提供预定义和易于配置的设置,大大简化了与 FreeRADIUS 服务器交互的过程。

此外,它与 CodeIgniter 框架的无缝集成使其成为需要在其 PHP 应用程序中进行远程身份验证和计费的开发人员的典范工具集。这使得开发者可以更多地关注其应用程序的核心功能,并确信他们的 FreeRADIUS 服务器交互将由该库高效地处理。

PHP CodeIgniter

安装

通过 Composer 进行安装。

composer require ictsolutions/codeigniter-freeradius

配置

表:FreeRADIUS 表的名称为 radacct、radcheck、radgroupcheck、radgroupreply、radreply、radusergroup、radpostauth、nas、nasreload 和 userinfo。这些表通常在安装和配置 FreeRADIUS 服务器时创建,用于管理 RADIUS 账户、用户组、身份验证和服务器。

usernameRealm:默认情况下,用于构造用户名的领域设置为 null,这意味着不会向用户名添加领域。

usernameCharacters & usernameLength:用户名使用字符 '0-9' 和 'A-Z' 生成,长度为 6 个字符。

passwordCharacters & passwordLength:密码使用字符 '0-9' 和 'A-Z' 生成,长度为 12 个字符。

pppoeGroupName & pppoeGroupPriority:默认的点对点协议 over Ethernet (PPPoE) 群组名称为 'PPPoE',优先级为 0。

ipStart & ipEnd:CGNAT (Carrier-Grade NAT) 的 IP 地址范围从 '100.64.0.0' 到 '100.64.63.255'。

枚举

属性枚举

属性枚举包括以下枚举,代表可在 CodeIgniter FreeRADIUS 库内使用的不同 RADIUS 协议属性

namespace IctSolutions\CodeIgniterFreeRadius\Enums;

enum Attribute: string
{
    case CleartextPassword = 'Cleartext-Password';
    case FallThrough = 'Fall-Through';
    case SimultaneousUse = 'Simultaneous-Use';
    case ServiceType = 'Service-Type';
    case FramedIPAddress = 'Framed-IP-Address';
    case FramedIPNetmask = 'Framed-IP-Netmask';
    case FramedProtocol = 'Framed-Protocol';
    case FramedMTU = 'Framed-MTU';
    case CiscoAVPair = 'Cisco-AVPair';
    case CiscoNASPort = 'Cisco-NAS-Port';
    case CiscoFramedRoute = 'Cisco-Framed-Route';
}

每个枚举都伴随一个注释,描述其在 RADIUS 协议中的用途或功能。

运算符枚举

运算符枚举包括可以应用于 CodeIgniter FreeRADIUS 库属性的不同运算符

namespace IctSolutions\CodeIgniterFreeRadius\Enums;

enum Operator: string
{
    case Equals = '=';
    case Assign = ':=';
    case Check = '==';
    case Add = '+=';
    case NotEquals = '!=';
    case Greater = '>';
    case GreaterEquals = '>=';
    case Less = '<';
    case LessEquals = '<=';
    case Matches = '=~';
    case NotMatches = '!~';
    case Exists = '=*';
    case NotExists = '!*';
}

每个枚举都附有注释,提供有关在 RADIUS 协议中使用运算符与属性的额外见解。

用法

初始化

使用提供的服务类实例化您的 FreeRADIUS 库。CodeIgniter 的服务类提供了一个统一且直接访问库的方法。

$freeRadiusLibrary = \IctSolutions\CodeIgniterFreeRadius\Config\Services::freeradius();

绑定用户

例如,如果您想将用户绑定到 RADIUS 服务器中具有属性 'FramedIPAddress' 的用户

use IctSolutions\CodeIgniterFreeRadius\Enums\Operator;
use IctSolutions\CodeIgniterFreeRadius\Enums\Attribute;

// ... ...

$attributeValue = '192.0.2.1'; // Provided framed IP address for the user
$freeRadiusLibrary->bindUser(Attribute::FramedIPAddress, Operator::Equals, $attributeValue);

这将使用 RADIUS 协议中用于帧 IP 的属性将用户绑定到提供的 IP 地址。

检查用户绑定

您还可以检查用户的绑定状态

$status = $freeRadiusLibrary->checkUserBinding(Attribute::FramedIPAddress, $attributeValue);

此方法将检查用户是否已将 'Framed-IPAddress' 正确绑定到提供的值。

其他功能

其他功能允许您使用 FreeRADIUS 服务器的高级配置。通过简单语法设置回退行为、允许同时登录、设置服务类型和其他配置

$config = [
    Attribute::FallThrough => ['operator' => Operator::NotEquals, 'value' => 'YES'],
    Attribute::SimultaneousUse => ['operator' => Operator::LessEquals, 'value' => 1],
    Attribute::ServiceType => ['operator' => Operator::Equals, 'value' => 'Framed-User'],
];

$freeRadiusLibrary->applyConfigs($config);

这将配置 FreeRADIUS 服务器,不允许回退,将同时登录限制为一次,并将服务类型设置为 'Framed-User'。

请注意,在实际部署中,所有属性值、运算符、用户详情等都应该仔细管理和清理。

示例:使用FreeRADIUS创建CodeIgniter项目

步骤 1:创建新的CodeIgniter项目

首先创建一个新的CodeIgniter项目(如果您还没有创建)。您可以使用Composer启动项目。

composer create-project codeigniter4/appstarter myProject

导航到新创建的项目

cd myProject

步骤 2:安装CodeIgniter FreeRADIUS库

将FreeRADIUS库添加到您的项目中

composer require ictsolutions/codeigniter-freeradius

步骤 3:运行迁移

现在您可以运行迁移了。这将为您创建FreeRADIUS工作所需的数据表。

php spark migrate

检查您的数据库以确认已创建表。

步骤 5:在您的代码中使用库

设置完成后,您可以在CodeIgniter项目中使用FreeRadius库。例如,在您的控制器中

use IctSolutions\CodeIgniterFreeRadius\Enums\Attribute;
use IctSolutions\CodeIgniterFreeRadius\Enums\Operator;

public function index(){
    $freeRadius = \IctSolutions\CodeIgniterFreeRadius\Config\Services::freeradius();

    // Let's bind a user 'john' with a Cleartext-Password
    $freeRadius->bindUser('john', Attribute::CleartextPassword, Operator::Equals, 'JohnsPassword123');
}

请确保在真实场景中用安全且加密的密码版本替换'JohnsPassword123'。

许可协议

本项目遵循MIT许可协议 - 请参阅LICENSE文件了解详细信息。