基于OpenWRT+FreeRadius+TinyRadius+Daloradius实现portal加radius安全认证

OpenWRT+FreeRadius+TinyRadius+Daloradius实现portal加radius认证

想要实现的需求是:当接入网络时,需要跳转到自定义的portal认证页面,输入用户名和密码后,跳转到Freeradius进行认证,认证完成后才允许用户联网。实质上就是实现了portal认证和radius认证方式的相结合,以此来实现多重安全认证。

基本知识介绍

AAA:

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,是网络安全中进行访问控制的一种安全管理机制,提供认证、授权和计费三种安全服务。

  • 认证(Authentication):是对用户的身份进行验证,判断其是否为合法用户。

  • 授权(Authorization):是对通过认证的用户,授权其可以使用哪些服务。

  • 计费(Accounting):是记录用户使用网络服务的资源情况,这些信息将作为计费的依据。

portal认证:

Portal在英语中是入口的意思。Portal认证通常也称为Web认证,一般将Portal认证网站称为门户网站。未认证用户上网时,设备强制用户登录到特定站点,用户可以免费访问其中的服务。当用户需要使用互联网中的其它信息时,必须在门户网站进行认证,只有认证通过后才可以使用互联网资源。用户可以主动访问已知的Portal认证网站,输入用户名和密码进行认证,这种开始Portal认证的方式称作主动认证。反之,如果用户试图通过HTTP访问其他外网,将被强制访问Portal认证网站,从而开始Portal认证过程,这种方式称作强制认证。Portal业务可以为运营商提供方便的管理功能,门户网站可以开展广告、社区服务、个性化的业务等,使宽带运营商、设备提供商和内容服务提供商形成一个产业生态系统。

radius认证:

RADIUS:Remote Authentication Dial In User Service,远程用户拨号认证系统由RFC2865,RFC2866定义,是应用最广泛的AAA协议。AAA是一种管理框架,因此,它可以用多种协议来实现。在实践中,人们最常使用远程访问拨号用户服务(Remote Authentication Dial In User Service,RADIUS)来实现AAA。

RADIUS是一种C/S结构的协议,它的客户端最初就是NAS(Net Access Server)服务器,任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。RADIUS协议认证机制灵活,可以采用PAPCHAP或者Unix登录认证等多种方式。RADIUS是一种可扩展的协议,它进行的全部工作都是基于Attribute-Length-Value的向量进行的。RADIUS也支持厂商扩充厂家专有属性。

FreeRadius:

FreeRADIUS 是一个实现了 RADIUS 的服务器。Freeradius包含一个radius服务器和radius-client,可以对支持radius协议网络设备进行鉴权记账,常见的开源路由器操作系统:如Openwrt,DD-wrt等,都支持radius协议,对PPPOE,热点,VPN等服务器进行账户管理认证,记账。

daloRadius:

来自github主页的介绍:daloRADIUS(daloRADIUS)是一种高级 RADIUS Web 管理应用程序,旨在管理热点和通用 ISP 部署。它具有用户管理、图形报告、会计、计费引擎,并与 GoogleMaps 集成以进行地理定位。

daloRADIUS 是用 PHP 和 JavaScript 编写的,并利用了一个数据库抽象层,这意味着它支持许多数据库系统,其中包括流行的 MySQL、PostgreSQL、Sqlite、MsSQL 等。

它基于FreeRADIUS部署,数据库服务器作为后端。除了实现 ACL 的其他功能外,它还集成了用于可视化定位热点/接入点的 GoogleMaps 集成以及更多功能。

说白了就是一个Freeradius的web管理工具,有了它可以更方便的管理操作freeradius。

TinyRadius:

来自github主页的介绍:TinyRadius 是一个小巧、快速且可靠的 Java Radius 库,按照 RFC 2865/2866 的规定发送和接收 Radius 数据包。就是一个实现了radius协议的java版本实现的radius客户端。通过它对接portal和radius服务器。

环境准备:

  • ubuntu18.04 TLS 安装Freeradius服务器以及运行daloradius

  • Openwrt armv8

  • php7.2

  • mysql 5.7.35

  • Apache 2.4

  • FreeRadius 3.0

安装FreeRadius

step1.更新软件源并重启

sudo apt update 
sudo apt -y upgrade
sudo reboot

step2.安装mysql数据库并创建数据库

sudo apt update
sudo apt install mariadb-server
sudo mysql_secure_installation

创建数据库:

database name: radius
database user: radius
database user password: radius

$ sudo mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radius";
FLUSH PRIVILEGES;
QUIT

step3.安装并配置FreeRadius on Ubuntu18.04

sudo apt -y install freeradius freeradius-mysql freeradius-utils

上述命令安装了freeradius以及 freeradius-mysql和工具包。

Import the freeradius MySQL database scheme:

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

检查刚才导入的数据库:

sudo  mysql -u root -p -e "use radius;show tables;"
Enter password: 
+------------------+
| Tables_in_radius |
+------------------+
| nas              |
| radacct          |
| radcheck         |
| radgroupcheck    |
| radgroupreply    |
| radpostauth      |
| radreply         |
| radusergroup     |
+------------------+

创建sql模块的软连接到mods-enabled:

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

配置freeradius使其支持sql模块以及修改数据库的连接配置:

sudo vim /etc/freeradius/3.0/mods-enabled/sql

打开的文件中找到下面这段进行修改:

​
sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
​
# Connection info:
server = "localhost" //
port = 3306             //mysql的端口
login = "radius"        //使用之前创建的用户名和密码
password = "radius"
​
# Database table configuration for everything except Oracle
radius_db = "radius"   //之前创建的数据库名
}
​
# Set to ‘yes’ to read radius clients from the database (‘nas’ table)
# Clients will ONLY be read on server startup.
read_clients = yes
​
# Table to keep radius client info
client_table = "nas"

改变 /etc/freeradius/3.0/mods-enabled/sql 的所属组和所属用户:

sudo chgrp -h freerad /etc/freeradius/3.0/mods-available/sql
sudo chown -R freerad:freerad /etc/freeradius/3.0/mods-enabled/sql

重启freeradius 服务:

sudo systemctl restart freeradius.service

测试Freeradius(使用openwrt创建一个WPA-EAP认证的热点进行测试)

首先要确保openwrt机器和freeradius服务器能够相互ping通,不一定非得在同一个局域网。

step1:在Radius服务器端添加Radius客户端(这一步是必须做的,否则从客户端发来的认证请求会被服务器忽略)

vim /etc/freeradius/3.0/clients.conf

添加如下:

client openwrt {
        ipaddr = 192.168.1.2
        secret  = testing123
        shortname = openwrt
}
​

step2:创建测试用户

vim /etc/freeradius/3.0/users

在末尾添加 : 123 Cleartext-Password:="123"

step3:将freeradius 以调试模式重新启动

在Openwrt系统中的命令为 radius -X ,在ubuntu系统中的命令为freeradius -X .

如果启动的时候遇到错误说:

Failed binding to auth address * port 1812 bound to server default: Address already in use
/etc/freeradius/3.0/sites-enabled/default[59]: Error binding to port for 0.0.0.0 port 1812

这说明系统已经有一个进程在运行了,这时候执行 ps aux | grep "radius",将已经运行的进程kill,再次启动就好了。

当执行freeradius -X之后提示如下,说明freeradius服务器启动成功:

step4:配置WPA-EAP认证方式的wifi热点

主要设置加密方式和Radius认证服务器的ip地址以及刚在添加客户端时填写的radius认证密钥。其余的可以默认即可。

设置完毕重启openwrt设备。

step5:连接测试

使用手机或者笔记本电脑搜索wifi热点,点击连接,输入之前设置的测试用户名及密码。

此时,freeradius服务器端应该会收到认证请求,并完成认证流程,之后wifi便连接成功!

至此,完成了freeradius服务器的搭建与测试认证过程。

安装daloRadius

Step 1: Install Apache Web Server and PHP

Daloradius will require php and Apache web server to be installed on the host system.

Installing Apache on Ubuntu:

Install Apache web server by running:

sudo apt -y install apache2

For installation of PHP on Ubuntu 18.04 and Ubuntu 16.04, run:

sudo apt -y install php libapache2-mod-php php-{gd,common,mail,mail-mime,mysql,pear,db,mbstring,xml,curl}

Check the version of php installed:

$ php -v
PHP 7.2.19-0ubuntu0.18.04.2 (cli) (built: Aug 12 2019 19:34:28) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.19-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zen

至此,完成了apache2和php7.2的安装。

Step 2: Install and Configure Daloradius on Ubuntu

sudo apt -y install wget unzip
wget https://github.com/lirantal/daloradius/archive/master.zip
unzip master.zip
mv daloradius-master daloradius

Change directory for configuration:

cd daloradius

Configuring daloradius

  • Now import Daloradius mysql tables

sudo mysql -u root -p radius < contrib/db/fr2-mysql-daloradius-and-freeradius.sql 
sudo mysql -u root -p radius < contrib/db/mysql-daloradius.sql
  • Configure daloRADIUS database connection details:

cd ..
sudo mv daloradius /var/www/html/

Then change permissions for http folder and set the right permissions for the daloradius configuration file.

sudo mv /var/www/html/daloradius/library/daloradius.conf.php.sample /var/www/html/daloradius/library/daloradius.conf.php
sudo chown -R www-data:www-data /var/www/html/daloradius/
sudo chmod 664 /var/www/html/daloradius/library/daloradius.conf.php

You should now modify the filedaloradius.conf.php to adjust the MySQL database information. Open the daloradius.conf.php and add the database username, password and db name.

sudo vim /var/www/html/daloradius/library/daloradius.conf.php

Especially relevant variables to configure are:

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

To be sure everything works, restart freeradius and apache2

sudo systemctl restart freeradius.service apache2

Open Admin link using your system IP address or domain name:

http://ip-address/daloradius/login.php

输入用户名和密码:

Username: administrator
Password: radius

打开主页面:

至此完成了daloradius的安装与配置。

之后在daloradius上面进行配置会同步对freeradius服务器进行配置,其实原理就是二者操作同一个数据库系统。

之前我们测试openwrt时候采用的是修改文件的方式进行管理,到这里就可以在web页面上进行配置用户和NAS了,这是采用数据库的管理方式了。

测试daloRadius与Freeradius服务器配合使用

首先同样的创建一个测试用户:名为zms,密码为zms

然后创建一个NAS(Network Access Server):

设置NAS ip,密钥,类型为other。这里就对应之前的openwrt的热点信息。

配置好之后重启apache2和freeradius服务器。

以同样的方式连接热点进行测试,发现认证成功,完成freeradius与daloRadius 的联动。

使用TinyRadius运行一个radius认证客户端

下载tinyRadius源代码:https://github.com/ctran/TinyRadius

用IDE打开,导入项目,进行maven引包。

由于项目使用log4j,所以需要对其进行配置,

在src/main/java包下新建resource包,新建一个文件log4j.properties

粘贴以下内容:

log4j.rootLogger=debug, stdout, R
​
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
​
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
​
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
​
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=5
​
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
​

在org.tinyradius.util包下新建initLogRecord.java文件,粘贴如下内容:

​
package org.tinyradius.util;
import org.apache.log4j.PropertyConfigurator;
​
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
​
public class initLogRecord {
    public static void initLog() {
        FileInputStream fileInputStream = null;
        try {
            Properties properties = new Properties();
            ///TinyRadius-1.1.0/src/main/java/resources/log4j.properties
            fileInputStream = new FileInputStream("src/main/java/resources/log4j.properties");
            properties.load(fileInputStream);
            PropertyConfigurator.configure(properties);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
​

打开TestClient.java

修改main函数进行测试:指定host为你的radius服务器的ip,shared为认证密钥,user用户名,pass密码。

然后执行,如果一切配置正常,在控制台会输出认证信息:

同时,服务器端会输出认证信息。

至此,完成了TinyRadius与FreeRadius服务器的配合使用。

总结:

本文搭建起来一套基于freeradius的认证系统,验证了系统之间的连通性,下一步将尝试开发一套radius认证客户端来实现自定义的系统认证功能。添加上更为安全的认证和验证方式,以及添加对流程的可溯源可循证系统。敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值