CentOS 8 中安装配置FreeRADIUS&DaloRADIUS以及为不同SSID验证MAC等

CentOS 8中安装FreeRADIUS和DaloRADIUS虽然不复杂,但还是有些东西需要记录一下,以免走弯路.

安装FreeRADIUS基本配置

安装mariadb & freeradius

# dnf install mariadb mariadb-server
# systemctl enable mariadb
# systemctl start mariadb
# mysqladmin -u root password "pass" 
# 上一步可先不做,未设密码时可以直接在root 账号下 用mysql进入,如已设密码,则需要使用 mysql -u root -p  进入
# dnf install freeradius freeradius-utils freeradius-mysql

配置FreeRADIUS

建立并初始化FreeRADIUS需要的数据库

# mysql
MariaDB [(none)]>CREATE DATABASE radius;
MariaDB [(none)]>GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "nbplus";
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>quit
# mysql radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

为FreeRADIUS启用sql 模组

# ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/
# chgrp -h radiusd /etc/raddb/mods-enabled/sql
# vim /etc/raddb/mods-available/sql

设定FreeRADIUS连接DB参数,像下面就行

sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
port = 3306
login = "radius"
password = "nbplus"
radius_db = "radius"
}
read_clients = yes
client_table = "nas"

设定FreeRADIUS自启动

# systemctl enable radiusd
# systemctl start radiusd

安装Daloradius和基本配置

DaloRADIUS是基于php的web管理工具.

安装

先决条件

# dnf install httpd php php-pear php-json php-devel php-gd php-mbstring php-mysqlnd php-xml
# pear install DB

下载安装Daloradius

# wget https://github.com/lirantal/daloradius/archive/master.zip
# unzip master.zip
# mv daloradius-master /var/www/html/daloradius

基本配置

为DaloRADIUS扩展DB

# cd /var/www/html/daloradius/contrib/db
# mysql radius < fr2-mysql-daloradius-and-freeradius.sql 
# mysql radius < mysql-daloradius.sql

DaloRADIUS 基本配置

# cd /var/www/html/daloradius/library
# cp daloradius.conf.php.sample daloradius.conf.php
# vim daloradius.conf.php

把和DB的连接参数设定正确就行

$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'nbplus';
$configValues['CONFIG_DB_NAME'] = 'radius';

权限重设一下

# chown -R apache:apache /var/www/html/daloradius

附加设定:

下载安装phpmyadmin

# wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.gz
# tar -zxvf phpMyAdmin-5.1.1-all-languages.tar.gz
# mv  phpMyAdmin-5.1.1-all-languages /var/www/html/phpmyadmin
#  chown -R apache:apache /var/www/html/phpmyadmin

DaloRADIUS中读取log

为要读取的log文件增加读取权限

# chmod 755 /var/log/radius
# chmod 644 /var/log/radius/radius.log
# chmod 644 /var/log/messages
# touch /tmp/daloradius.log
# chown -R apache:apache /tmp/daloradius.log

做完上面的你可能会遇到还是无法读取RADIUS/SYSLOG的情况,那就是Selinux挡着了,可以在/var/log/audit/audit.log看到相应信息

关闭Selinux或修改上述文件的安全设定

修改安全设定还是直接禁用Selinux看自己的情况.

#chcon -t httpd_sys_content_t /var/log/messages
#chcon -t httpd_sys_content_t /var/log/radius/radius.log
改了下试试结果系统写日志写不进去了.后面有机会再研究,先禁了它.

# setenforce 0 
# vim /etc/selinux/config
修改SELINUX=enforcing为SELINUX=disabled

到这里,一个标准的freeradius环境及web管理界面就好了,下面为实际应用示例.

freeRADIUS中为不同SSID进行MAC验证的实现.

在实际使用中,我们常会遇到要使用MAC认证的情况,如果针对单一SSID验证,直接加个用户就行.但我的需求是在WLAN AC上启用了几个使用mac auth的SSID用于不同用途,且要求设备只能连接上指定的ssid.
官网的指南: https://wiki.freeradius.org/guide/mac-auth#
这个指南看着有点晕也并不全,比如像我现在的情况适用**Mac-Auth authorisation by SSID SQL** 这一节,但这里用到的表本来是没有的,你得手动加,表里的数据你还得另想办法去做增改删,反正不容易.
思路沿用,但做法稍变通一下,让整个配置过程变简单点
我的WLAN设备: Ruckus AC+AP, SSID: ssid001,ssid002.

确认取得待认证MAC的目标SSID的方式

一般来说,各设备厂商都会在发送radius 请求时单独附上ssid这个属性,比如ruckus的就是Ruckus-SSID:ssid name .大厂的都类似,如果没有单独给出,那就需要从Called-Station-ID里面取值. Called-Station-ID的格式:AC的MAC+冒号+SSID.可以在调试模式看呼入数据确认.

# systemctl stop radiusd
# radiusd -Xx
Wed Sep  8 16:11:42 2021 : Info: Ready to process requests
Wed Sep  8 16:12:19 2021 : Debug: (0) Received Access-Request Id 9 from 192.168.78.252:53060 to 192.168.70.43:1812 length 217
Wed Sep  8 16:12:19 2021 : Debug: (0)   User-Name = "11:22:33:44:55:66"
Wed Sep  8 16:12:19 2021 : Debug: (0)   User-Password = "11:22:33:44:55:66"
Wed Sep  8 16:12:19 2021 : Debug: (0)   Calling-Station-Id = "11-22-33-44-55-66"
Wed Sep  8 16:12:19 2021 : Debug: (0)   NAS-IP-Address = 192.168.78.252
Wed Sep  8 16:12:19 2021 : Debug: (0)   Called-Station-Id = "AA-FF-CC-CD-DD-3C:SSID-NAME"
Wed Sep  8 16:12:19 2021 : Debug: (0)   Service-Type = Framed-User
Wed Sep  8 16:12:19 2021 : Debug: (0)   NAS-Port-Type = Wireless-802.11
Wed Sep  8 16:12:19 2021 : Debug: (0)   NAS-Identifier = "AA-FF-CC-CD-DD-3C"
Wed Sep  8 16:12:19 2021 : Debug: (0)   Ruckus-SSID = "SSID-NAME"

为FreeRADIUS增加需要检查的Attribute

NAS会发送单独的SSID的情况:

直接在DaloRADIUS中新增
在这里插入图片描述
如果不用后台数据库,直接加在/etc/raddb/dictionary文件中

ATTRIBUTE      Ruckus-SSID         3000    string

NAS不发送单独的SSID的情况

新增一个名为Called-Station-SSID的属性(略).

增加一个规则用于检查SSID

脚本把NAS会发送单独的SSID和不发送的情况合在一起处理

# vim /etc/raddb/policy.d/filter_ssid
filter_ssid {
        if (&Ruckus-SSID) { 
                 if ("%{sql:select count(*) from `radusergroup` where username='%{User-Name}' AND groupname='%{Ruckus-SSID}'}" >=1) {
                        ok
                        update control {
                                &Auth-Type := Accept
                        }
                }
                else {
                        update request {
                                &Module-Failure-Message += 'Rejected: Not Allow Access Current SSID'
                        }
                        reject
                }
        }
		else {
        if(Called-Station-Id =~ /^([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:.]?([0-9a-f]{2})[-:]?([0-9a-f]{2})[-:]?([-a-z0-9_. ]*)?/i){
                update request {
                        Called-Station-Id := "%{1}%{2}%{3}%{4}%{5}%{6}"
                        Called-Station-SSID := "%{7}"
                }
                 if ("%{sql:select count(*) from `radusergroup` where username='%{User-Name}' AND groupname='%{Called-Station-SSID}'}" >=1) {
                        ok
                        update control {
                                &Auth-Type := Accept
                        }
                }
                else {
                        update request {
                                &Module-Failure-Message += 'Rejected: Not Allow Access Current SSID'
                        }
                        reject
                }
        }else {
                noop
        }
	}
}
# chgrp radiusd /etc/raddb/policy.d/filter_ssid

在默认配置文件的authorize部分中启用前面的规则

 #vim /etc/raddb/sites-available/default
 #  need to setup hints for the remote radius server
authorize {
...
        filter_username
        filter_ssid #加进来
...

增加一个profile用于匹配SSID

在DaloRADIUS中新增一个profile,名称和SSID一致.
在这里插入图片描述
如果不是用数据库,那前面的规则也就不能用,估计要在/etc/raddb/users文件中做限制.

DaloRADIUS的中文界面问题

中文包是有包含在lang目录下,但没有被启用.

# ll lang
总用量 692
-rw-r--r--. 1 apache apache 86229 6月  27 00:16 en.php
-rw-r--r--. 1 apache apache 73569 6月  27 00:16 es_VE.php
-rw-r--r--. 1 apache apache 72519 6月  27 00:16 hu.php
-rw-r--r--. 1 apache apache 63141 6月  27 00:16 it.php
-rw-r--r--. 1 apache apache 99035 6月  27 00:16 ja.php
-rw-r--r--. 1 apache apache  2316 6月  27 00:16 main.php
-rw-r--r--. 1 apache apache 75448 6月  27 00:16 pt_br.php
-rw-r--r--. 1 apache apache 77909 6月  27 00:16 ro.php
-rw-r--r--. 1 apache apache 54316 6月  27 00:16 ru.php
-rw-r--r--. 1 apache apache 81491 6月  27 00:16 zh.php

先启用,让可选择到.

# vim config-lang.php

在选择器中加入中文选项

 <select name="config_lang" class='form'>
                        <option value="zh"> 简体中文 </option>

再回去你会发现可以选,但不起作用,进一步发现,这里的语言你选哪个都是白搭…
在这里插入图片描述
检查后发现是取可用语言清单的部分错误了,不知道是不是故意的.

[root@ksyoradius daloradius]# vim lang/main.php
 *      Liran Tal <liran@enginx.com>
 *
 *******************************************************************************
 */
$langDir = dirname(__FILE__);
$langList = array_filter(scandir($langDir), function($fileName) {
    global $langDir;
    $skipList = array(
        ".", "..", "main.php",
        "ro.php" // FIXME ro.php is currently broken and needs a fix...
    );
    if (in_array($fileName, $skipList)) {
        return false;
    }
    $ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
    return !($ext == "php" and is_file("$langDir/$fileName")); //就是这儿,拿掉!
});

基本中文了,除了一些菜单
在这里插入图片描述
如果有兴趣,可以自己去改相应文件,把要翻译的文字用字典里的替代就行…

<li><a href="mng-users.php"><em>U</em>sers</a></li>
<li><a href="mng-users.php"><?php echo t('menu','Users'); ?></li>
lang/zh.php
$l['menu']['Users'] = "用户</a>";
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值