无线局域网中RADIUS协议原理与实现

转载自:http://blog.csdn.net/jinhill/article/details/5901042

摘要  RADIUS协议是一个被广泛应用于网络认证、授权和计费的协议。本文在介绍了RADIUS协议原理的基础上,对RADIUS协议的实现做了分析与设计。

  1 引言

  远程认证拨号用户服务协议(Remote Authentication Dial In User Service, RADIUS)最初是由Livingston公司提出的一个为拨号用户提供认证和计费的协议。后经多次改进,逐渐成为一项通用的网络认证、计费协议,并定义于IETF提交的RFC2865和RFC2866文件中。RADIUS协议以Client/Server方式工作,客户端为网络接入服务器(NAS),它向RADIUS服务器提交认证、计费等信息,RADIUS服务器处理信息并将结果返回给NAS。

  RADIUS协议的应用范围很广,在移动、数据、智能网等业务的认证、计费系统中都有所应用。无线局域网的802.1X认证框架中,在认证端也建议使用RADIUS协议。

  本文将论述RADIUS协议的原理,并探讨它在WLAN中的应用及实现方案。

  2 RADIUS协议

  2.1  WLAN网络模型

  实际商用的无线局域网,可以用局域网交换机来实现802.1X认证协议中的端口控制功能。为保证网络的安全性,在无线局域网的出口和认证端应加上防火墙。RADIUS服务器和数据库还可以采取主、备结构,以保证网络的健壮性。

  网络模型如下图所示:

  图1  无线局域网网络模型

  无线局域网的认证端由RADIUS服务器、网络接入服务器(NAS)和数据库组成。其中:

  NAS:作为RADIUS服务器的客户端,向RADIUS服务器转交用户的认证信息。并在用户通过认证之后,向RADIUS服务器发送计费信息。

  RADIUS服务器:作为认证系统的中心服务器,它与NAS、数据库相连,它接受来自NAS提交的信息,对数据库进行相应的操作,并把处理结果返回给NAS。

  数据库:用于保存所有的用户信息、计费信息和其他信息。用户信息由网络管理员添加至数据库中;计费信息来自于RADIUS服务器;其他信息包括日志信息等。

  2.2  RADIUS的数据包结构

  RADIUS是应用层的协议,在传输层它的报文被封装在UDP的报文中,进而封装进IP包。RADIUS认证使用1812端口,计费使用1813端口。

  以太网上的RADIUS封装后的包结构:

  RADIUS数据包分为5个部分:

  (1) Code:1个字节,用于区分RADIUS包的类型:常用类型有:

  接入请求(Access-Request),Code=1;接入应答(Access-Accept),Code=2;接入拒绝(Access-Reject),Code=3;计费请求(Accounting-Request),Code=4等。

  (2)Identifier:一个字节,用于请求和应答包的匹配。

  (3)Length:两个字节,表示RADIUS数据区(包括Code, Identifier, Length, Authenticator, Attributes)的长度,单位是字节,最小为20,最大为4096。

  (4)Authenticator:16个字节,用于验证服务器端的应答,另外还用于用户口令的加密。RADIUS服务器和NAS的共享密钥(Shared Secret)与请求认证码(Request Authenticator)和应答认证码(Response Authenticator),共同支持发、收报文的完整性和认证。另外,用户密码不能在NAS和RADIUS 服务器之间用明文传输,而一般使用共享密钥(Shared Secret)和认证码(Authenticator)通过MD5加密算法进行加密隐藏。

  (5)Attributes:不定长度,最小可为0个字节,描述RADIUS协议的属性,如用户名、口令、IP地址等信息都是存放在本数据段。

  2.3 RADIUS的认证、计费过程

  如图1网络模型所示:

  (1)申请者登录网络时,NAS会有一个客户定义的Login提示符要求申请者输入用户信息(用户名和口令),申请者输入相关的认证信息后,等待认证结果。

  (2)NAS在得到用户信息后,将根据RADIUS的数据包格式,向RADIUS服务器发出“接入请求”(Access-Request)包。包中一般包括以下RADIUS属性值:用户名、用户口令、访问服务器的ID、访问端口的ID。

  (3)当RADIUS服务器收到“接入请求”包后,首先验证NAS的共享密码与RADIUS服务器中预先设定的是否一致,以确认是所属的RADIUS客户端。在查验了包的正确性之后,RADIUS服务器会依据包中的用户名在用户数据库中查询是否有此用户记录。如果用户信息不符合,就向NAS发出“接入拒绝”(Access-Reject)包。NAS在收到拒绝包后,会立即停止用户连接端口的服务要求,用户被强制退出。

  (4)如果用户信息全部符合,服务器向NAS发出“接入质询”包(Access-Challenge),对用户的登录请求作进一步的验证。其中包括:用户口令、用户登录访问服务器的IP、用户登录的物理端口号等。NAS收到“接入质询”包后,将消息显示给用户,要求用户进一步确认登录请求。用户再次确认后,RADIUS服务器将比较两次的请求信息,决定如何响应用户(发送Access-Accept、Access-Reject或再一次的Access-Challenge)。

  (5)当所有的验证条件和握手会话均通过后,RADIUS服务器会将数据库中的用户配置信息放在“接入接受”(Access-Accept)包中返回给NAS,后者会根据包中的配置信息限定用户的具体网络访问能力。包括服务类型:SLIP、PPP、Login User、Rlogin、Framed、Callback等等。还包括与服务类型相关的配置信息:IP地址、时间限制等等。

  (6)在所有的验证、授权完成后,局域网交换机的控制端口被打开。用户可以通过交换机进入网络。同时,NAS向RADIUS服务器发送 “计费请求开始”包(Accounting-Request Start),通知RADIUS服务器开始计费。当用户下网时,NAS向RADIUS服务器发送“计费请求结束”包(Accounting-Request Stop),RADIUS服务器根据计费包的信息计算用户使用网络的费用。

  3  WLAN模型中RADIUS认证系统的设计与实现

  3.1  WLAN网络模型的简化

  在实验室的模拟环境下,由于网络用户少,可以采用中、小型的数据库来存放所需信息,并可以将RADIUS服务器与数据库在同一主机上实现。局域网交换机可以实现端口控制功能。网络结构可简化如下:

  图2  实验室环境下WLAN网络模型

  3.2  NAS设计

  (1)RADIUS客户端处理程序:负责接收申请者的信息;向RADIUS服务器提交认证、计费、管理等数据包;向申请者返回相应结果。

  (2)服务器管理程序:为了方便网络管理员对RADIUS服务器和数据库的管理,在NAS主机上,还可以运行服务器管理程序,管理程序的功能应该包括有:管理员模块(添加、删除网络管理员,设置管理员权限等);用户信息模块(实现用户的查询、添加、删除等操作);计费信息模块(查询用户的计费信息,创建、修改、删除各种不同的计费方式,);日志信息模块等。

  (3)用户信息的提交:用户需要向NAS提交用户信息,有多种方法可以实现,最简单的方法是采用Web方式提交。在NAS上建立一个Web服务器,这样,用户可以直接使用浏览器来和NAS交互,Web服务器接受到用户提交的信息后,把这些信息传给RADIUS的客户端处理程序。后者把这些信息封装成RADIUS的接入请求(Access-Request)包格式,通过认证端口(1812)向RADIUS服务器提出认证请求。

  (4)计费信息的提交:认证通过之后,NAS客户端程序通过认证端口(1812)向RADIUS服务器发送包含有用户名、用户IP、上网起始时间等信息的“计费请求开始”包(Accounting-Request Start),通知RADIUS服务器开始计费。RADIUS服务器在数据库中纪录下相应项,并返回“计费响应”包(Accounting-Response)。当用户下网时,NAS向RADIUS服务器发送包含有结束时间、数据流量等信息的“计费请求结束”包(Accounting-Request Stop)。后者返回“计费响应”包(Accounting-Response)确认。

  (5)服务器管理程序的提交:也通过RADIUS客户端处理程序来向RADIUS服务器提交。客户端处理程序将管理程序的请求包装成标准的RADIUS包格式,并通过为服务器管理程序定义一个端口号提交给RADIUS服务器。

  3.3  RADIUS服务器设计

  RADIUS服务器处理来自NAS的各项数据和实现对数据库的操作,并返回相应的结果。RADIUS客户端和服务器端的协议通信采用Socket编程来实现。

  (1)对数据库的操作:RADIUS服务器通过数据库接口与数据库建立起连接。在RADIUS服务器中用SQL语句实现所需的数据库操作模块(如:用户、计费、管理员等信息的查询、添加、修改等操作),当RADIUS服务器需要对数据库操作时,就调用相应的模块。

  (2)认证包处理:通过*认证端口(1812),来监测NAS提交的认证数据包,收到认证包后,查询数据库验证用户,并把结果以RADIUS数据包格式从1812端口返回。对于多个用户申请并发的情况,使用多线程方式处理。

  (3)计费包的处理:当用户的认证通过时,查询该用户计费信息。确定其计费类型、费率等。当*到NAS在计费端口(1813)提交计费包后,就向数据库中添加“计费请求开始”包中所提交的计费信息(包括用户名、上网起始时间等)。在收到用户下网的“计费请求结束”后,根据包中提交的用户结束时间、数据流量等信息,计算用户的上网时长和数据流量,并根据用户计费类型来计算出用户本次上网费用,记录入数据库。

  (4)服务器管理程序请求的处理:*管理程序请求的端口(自定义),收到后解包并执行相应的处理函数。

  3.4 数据库的设计

  用于保存所有的用户信息、计费信息等。数据库中包含的表项至少应包括以下几类:

  (1) 用户信息:包括用户名、口令、认证方式、访问权限、付费方式等。

  (2) 授权信息:服务器返回给用户的授权等配置信息,如服务类型,会话时间等。

  (3) 计费信息:存放与计费有关的各种统计信息。如:上网时间、计费费率、用户

  的历次上网的数据流量和费用、用户帐户余额等。

  (4) 管理员信息:网络管理员的ID号和口令、管理员的权限。

  (5) NAS信息:RADIUS服务器所属的各NAS纪录。包括各NAS的ID号、与

  RADIUS服务器的共享密码等。

  (6) 日志信息:保存用户上网的历史记录、网络管理员的登录及操作纪录。

  3.5认证端各部分的实现:

  操作系统:RADIUS服务器和NAS均采用Linux(Red Hat 9.0,内核Linux-2.4.20-8)作为操作系统。

  (1) NAS:

  用Apache和Tomcat构建一个支持JSP的Web服务器,这样申请者可以通过Web页面来提交登录信息。服务器管理程序主要是处理系统管理员的信息,用QT3.0完成用户界面。RADIUS客户端程序(C语言实现)将用户或系统管理员提交的消息封装成RADIUS包,并通过相应的端口转发给RADIUS服务器。

  (2) 数据库:

  采用MySQL数据库来实现,MySQL是一个多用户、多线程SQL数据库服务器。它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。Red Hat 9.0中自带有MySQL服务,将服务启动即可。我们可以将RADIUS服务器与SQL数据库相连,建立用户数据库和计费数据库,对用户信息和计费信息进行有效的管理。

  (3) RADIUS服务器 :

  采用freeradius-0.9.0来搭建RADIUS服务器,实现RADIUS协议,并使用RADIUS服务器的EAP-Identity认证方式(即:RADIUS服务器对申请者的用户名和口令进行认证)。freeradius的代码是开源的,可以在www.freeradius.org上下载。另外,实现时,在freeradius的源码中添加了数据库处理模块以及服务器管理程序处理模块。

  freeradius支持访问SQL数据库,首先需要建立RADIUS数据库(以MySQL为例:mysql -uroot -prootpass radius < db_mysql.sql),建立后的数据库会包含如下一些表项:radcheck:用于指明用户的认证方式;radgroupcheck:将用户分组进行管理,指明各组的属性,如限定有些用户组默认的认证结果就是Accept或Reject;radgroupreply:对各用户组设定回应的属性;usergroup:指明用户与组的关系;radacct:存放与计费有关的各种统计信息。我们还可以添加一些我们所需的其他表项。

  4  结束语

  RADIUS协议最初作为拨号网络中协议,由于它易于管理、可扩展性好等特点,而逐渐被广泛使用,成为多种网络的认证、授权和计费的协议。但RADIUS协议仍然存在诸如:基于Response Authenticatior对共享密钥的攻击、基于User-Password属性对用户密码的攻击等安全缺陷。这些都有待于作进一步的研究和完善。

无线局域网中RADIUS协议原理与实现相关推荐

  1. radius mysql md5_请教两个问题:关于无线局域网和Radius+MD5认证

    请教两个问题:关于无线局域网和Radius+MD5认证 (2012-06-05 06:00:06) 标签: 认证 无线 局域网 杂谈 请教两个问题:关于无线局域网和Radius+MD5认证1,要完成一 ...

  2. WLAN无线局域网IEEE802.11协议三无线局域网

    3.无线局域网 组成WLAN的基本单元是基本服务集(BSS),BSS包含一个固定的AP和多个终端. 3.1.基本概念: AP(Access Point,无线访问节点):无线接入点,常见是我们家用的带有 ...

  3. WLAN无线局域网IEEE802.11协议一

    1. 无线网络简介 1.1.无线网络的历史 在1971年时,夏威夷大学的研究员创造了第一个基于封包式技术的无线电通讯网络.这被称作ALOHNET的网络,这是最早期的无线局域网络 (WLAN).1990 ...

  4. WLAN无线局域网IEEE802.11协议二

    2.1.3.无线管制 FCC批准了3个频段供公众使用,不需要许可,分别是900Mhz.2.4Ghz.5Mhz.其中900Mhz和2.4Ghz被称为ISM频段,5Ghz称为UNI频段.各国制造商使用这三 ...

  5. 螺旋天线有方向性吗_无线局域网中的轴向模螺旋天线设计方案

    0 引言本文引用地址:http://www.eepw.com.cn/article/260148.htm 螺旋天线是一种宽带行波天线,辐射圆极化波.按结构来分有立体螺旋和平面螺旋两种.立体螺旋天线的辐 ...

  6. 在无线局域网中 便携式计算机一般通过,浅析无线局域网技术的应用

    浅析无线局域网技术的应用 维普资讯 http://www.cqvip.com 星 昌圆 量 浅 析 无 线 局 域 网 技 术 的 应 用 文.李继承 ( 长春 市科技信 息研 究所) 摘 要 :无 ...

  7. 【学习笔记】局域网基本概念和体系结构,以太网、无线局域网与PPP协议、HDLC协议

    文章目录 一. 局域网:特点与要素 ① 拓扑结构 ② 传输介质 ③ 介质访问控制方法 ④ 局域网的分类 ⑤ IEEE 802标准 ⑥ MAC子层和LLC子层 二. 以太网 ① 概述 ② 提供无连接.不 ...

  8. 两台无线局域网中的电脑连接

    "被"访问数据的电脑需要的设置 设置一个能共享的文件夹.步骤如下:以win10系统中的文件夹为例,鼠标右键选择最后的"属性",点击"共享"选 ...

  9. 无线局域网CSMA/CA协议

    CSMA/CA协议 工作原理 发送站点首先帧听无线信道(载波帧听) 如果空闲,等待DIFS(帧间隔)时间,然后帧听信道,仍空闲,发送第一个数据帧,并开启重发定时器,发送时不再进行冲突检测 如果信道忙, ...

  10. 摄像头poe供电原理_无线监控中poe供电原理图解

    在无线监控行业中,我们在给客户配置无线网桥时,都会搭配poe供电模块.客户都会向我们提问,什么是poe供电,它的原理是什么? 我们常说的poe供电,其实就是有源以太网供电(poweroverether ...

最新文章

  1. 离群?异常?新类?开集?分布外检测?一文搞懂其间异同!
  2. 黑马程序员——集合框架(二)
  3. HTTP协议之post multipart/form-data数据类型实例
  4. Spring Cloud Alibaba迁移指南2:一行代码从Hystrix迁移到Sentinel
  5. variable `xxx' has initializer but incomplete type
  6. 作者:鲁鸣鸣(1978-),男,博士,中南大学信息科学与工程学院副教授,中国计算机学会会员。...
  7. Bootstrap3 工具提示插件的使用方法
  8. java 找出调用的方法_如何找到用Java调用给定方法的所有方法?
  9. Notification使用详解之四:由后台服务向Activity发送进度信息
  10. DE28 Matrix Methods for Inhomogeneous Systems
  11. ZOJ 3645高斯消元
  12. python mpi4py 读取json_mpi4py 点到点通信总结
  13. 在中文维基百科新建用户框
  14. 联想r480安全模式_thinkpad怎么进入安全模式
  15. 常见的 360° 全景视频格式介绍及播放方式
  16. 手机定向root,指定APP获取root权限
  17. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集【Updating】
  18. 2021年煤气考试题库及煤气考试内容
  19. 237_自定义抽签器三
  20. OSPF高级特性 —— LSA-3过滤 + Distribute-list过滤

热门文章

  1. 基于Labview的小波去噪
  2. C++关于头文件中定义变量出现LNK2005
  3. 【AI初识境】从3次人工智能潮起潮落说起
  4. IntelliJ IDEA 添加对 Extjs6 支持
  5. Java 常量池详解(一)字符串常量池
  6. linux bzip2 压缩目录,linux的gzip、bzip2、xz三种压缩使用方法工具介绍
  7. LeetCode69 Sqrt(x)**
  8. mil与mm单位换算工具
  9. 使用大华sdk批量下载视频文件、批量转换格式
  10. java 打印机_JAVA实现调用打印机打印PDF