什么是RADIUS服务:
RADIUS:(Remote Authentication Dial In User Service)中文名为远程用户拨号认证服务,简称RADIUS,是目前应用最广泛的AAA协议(认证、授权和计费)。
freeradius是GNU/GPL(通用公共许可证)的原则下,开发的高性能开源radius服务器。常见的radius服务器种类不多,比较强大的当属开源的freeradius,世界上大部分的radius服务器都是基于freeradius开发而来的。
搭建环境:
操作系统:CentOS 6.5 , Win 7 / 10
其他设备:TP-LINK路由器、H3C交换机
freeradius服务官网:http://freeradius.org/
daloradius Web管理页面官网:https://sourceforge.net/projects/daloradius/
CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理:https://www.cnblogs.com/opsprobe/p/9769555.html
一、LAMP环境安装:
- yum -y install httpd httpd-devel
- yum -y install mysql mysql-server mysql-devel
- yum -y install php php-devel php-mysql php-common php-gd php-mbstring php-mcrypt php-imap php-odbc php-pear php-xml php-xmlrpc
- /etc/init.d/httpd start #启动http服务
- /etc/init.d/mysqld start #启动mysql服务
- chkconfig httpd on #把http服务加入开机启动
- chkconfig mysqld on #把mysql服务加入开机启动
- mysqladmin -u root password '数据库的密码' #设置mysql数据库的密码
为防止缺少相关的依赖关系,安装以下软件包:
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel
二、然后可以通过yum命令快速安装freeradius,就是版本略低一点,命令为:
yum install -y freeradius freeradius-mysql freeradius-utils
三、修改启用测试账户:
找到 radius 的用户信息配置参数文件(注:将来换mysql数据库存用户账户的话这个文件就不用了,测试完后修改回原来的样子),yum自动安装的在/etc/raddb路径里面。
vi /etc/raddb/users
然后找到下面这段信息(从76行开始)
- #steve Cleartext-Password := "testing"
- # Service-Type = Framed-User,
- # Framed-Protocol = PPP,
- # Framed-IP-Address = 172.16.3.33,
- # Framed-IP-Netmask = 255.255.255.0,
- # Framed-Routing = Broadcast-Listen,
- # Framed-Filter-Id = "std.ppp",
- # Framed-MTU = 1500,
- # Framed-Compression = Van-Jacobsen-TCP-IP
然后把这段文字前面的 # 注释全部去掉后保存文件
现在可以通过radiusd -X来做首次启动,注意首次启动必须是root账户才行,还有注意那个X是大写的。
如果看到下面的提示应该就是启动成功了:
- Listening on authentication address * port 1812
- Listening on accounting address * port 1813
- Listening on command file /var/run/radiusd/radiusd.sock
- Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
- Listening on proxy address * port 1814
- Ready to process requests.
然后另外打开一个终端输入 radtest steve testing localhost 1812 testing123 进行测试,当出现 rad_recv: Access-Accept 字样说明freeradius已经安装成功。
注意:
若测试时出现以下问题:
radclient:: Failed to find IP address for centos6
radclient: Nothing to send.
解决方法:
进入vi /etc/hosts 配置文件
在最后添加:127.0.0.1 servername(系统管理员的账户名)即可。
还需要特别注意,添加的这个127.0.0.1 servername(系统管理员的账户名)信息在测试成功后,一定要记得注释或者删除掉,否则在接入设备(交换机或者路由器)后会出现错误。
测试无问题以后记得再次进入vi /etc/raddb/users,把这个测试账户刚打开的相关的配置再全部注释掉,保存退出,然后用如下命令关闭 radiusd 的调试进程
killall -9 radiusd # 杀死 radius 服务进程
chkconfig radiusd on # 把radius服务加入开机启动
service radiusd start # 启动radius服务
现在可以通过新打开一个终端窗口,然后执行 cat /var/log/radius/radius.log 去查看启动日志看有没有错误。
四、以下开始配置freeradius了:
- mv /etc/raddb/clients.conf /etc/raddb/clients.conf.backup # 备份/etc/raddb/clients.conf文件
- grep -v "#" /etc/raddb/clients.conf.backup > /etc/raddb/clients.conf # 过滤出不带注释符号 # 的信息行
- vi /etc/raddb/clients.conf
内容配置为:
- client localhost {
- ipaddr = 127.0.0.1
- secret = testing123
- require_message_authenticator = no
- }
需要注意,上面配置的127.0.0.1主要用于测试,将来真正的客户端要按照下面的信息进行补充:
将来你真正的 raidus 客户端,如路由器、交换机等需要在这里配置ip信息,例如:
- client x.x.x.x { # 这里的 x.x.x.x 就是交换机或者路由器等设备的IP地址
- ipaddr = x.x.x.x # 交换机或者路由器等设备的IP地址
- secret = xxxxxxxxxx # 自己定义的交换机或者路由器等设备和 radius 服务器的连接密码
- # require_message_authenticator = no # 这个可以注释掉,不用管
- # shortname = localhost # 这个也可以注释掉,不用管
- }
然后用如下命令:
mv /etc/raddb/sql/mysql/admin.sql /etc/raddb/sql/mysql/admin.sql.backup #备份/etc/raddb/sql/mysql/admin.sql文件
grep -v "#" /etc/raddb/sql/mysql/admin.sql.backup > /etc/raddb/sql/mysql/admin.sql # 过滤出不带注释符号 # 的信息行
vi /etc/raddb/sql/mysql/admin.sql
内容改成下面这个样子的 :
- CREATE USER 'radius'@'localhost';
- SET PASSWORD FOR 'radius'@'localhost' = PASSWORD('radpass');
- GRANT SELECT ON radius.* TO 'radius'@'localhost';
- GRANT ALL on radius.radacct TO 'radius'@'localhost';
- GRANT ALL on radius.radpostauth TO 'radius'@'localhost';
以上信息是指 “ 数据库为radius,密码为radpass ”如果要自己设置,设置完成后还要修改 /etc/raddb/sql.conf 这个配置文件把账号和密码改为自己设置的。
保存退出。
mysql -u root -p 回车后输入mysql的root管理员帐号密码,然后
create database radius; # 创建radius数据库
grant all on radius.* to radius@"localhost" identified by "radpass"; # GRANT 权限 ON 数据库.* TO 用户名@主机名IDENTIFIED BY "密码"; 对某个特定数据库中的所有表单给予授权和创建数据库管理账户
exit #退出数据库
再次 mysql -u root -p 回车,输入密码后
然后执行source /etc/raddb/sql/mysql/admin.sql
然后 use radius 回车,打开radius数据库
导入下列 sql 表的信息
source /etc/raddb/sql/mysql/schema.sql 回车,
source /etc/raddb/sql/mysql/nas.sql 回车,
source /etc/raddb/sql/mysql/ippool.sql 回车,
source /etc/raddb/sql/mysql/wimax.sql 回车,
source /etc/raddb/sql/mysql/cui.sql 回车,
flush privileges; 回车, # mysql 新设置用户或更改密码后需用flush privileges刷新 mysql 的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。
导入完成后,可以用命令查看导入的数据表的信息
use radius; #打开radius数据库
show tables; #显示radius数据库里的所有表
可以看到如下的表结构
+------------------+
| Tables_in_radius |
+------------------+
| cui |
| nas |
| radacct |
| radcheck |
| radgroupcheck |
| radgroupreply |
| radippool |
| radpostauth |
| radreply |
| radusergroup |
| wimax |
+------------------+
MySQL中表结构的定义
针对FreeRadius2,数据表的设计和结构定义在下面的文件中:
/etc/raddb/sql/mysql/schema.sql # 主数据库定义,7个表,包括
radcheck # 用户检查信息表
radreply # 用户回复信息表
radgroupcheck # 用户组检查信息表
radgroupreply # 用户组回复信息表
radusergroup # 用户和组关系表
radacct # 计费情况表
radpostauth # 认证后处理信息,可以包括认证请求成功和拒绝的记录。
/etc/raddb/sql/mysql/nas.sql # 网络设备定义,只有一个表:
nas # 网络设备表
下面的表用于一些扩展功能,可以按需导入。
ippool.sql # ip池
wimax.sql # wimax设备支持
cui.sql # cui 支持
exit # 退出 mysql 数据库。
然后进入 vi /etc/raddb/radiusd.conf 配置文件,配置freeradius支持sql:
1、vi /etc/raddb/radiusd.conf
找到 module (694行)那块以后去掉 $INCLUDE sql.conf(735行)这句话前面的 # 和 $INCLUDE sql/mysql/counter.conf(747行)前面的 #
保存文件退出vi编辑器
注意:
一定要取消这一行的注释:$INCLUDE sql.conf
否则在 radiusd -X 总会报错 Failed to load module "sql". (加载模块失败)
同理,要是在debug(调试)时出现 load module 的任何相关错误,都要取消 radiusd.conf 中的那一行 module 的注释,否则不会加载。
2、然后打开 vi /etc/raddb/sql.conf 配置文件修改与 mysql 数据库连接的配置
先找到 readclients = yes(108行)这一行,去掉前面的 # 注释
然后找到以下信息( 36-39行 )
server = "localhost"
port = 3306 # mysql数据库的端口号
login = "radius" # mysql数据库的登录账户
password = "radpass" # mysql数据库的radius账户的登录密码
radius_db = "radius" ( 42行 ) # radius为数据库名
确保以上信息都正确后保存退出 vi 编辑器。
3、然后打开 vi /etc/raddb/sites-enabled/default 配置文件修改认证的方式
分别找到 authorize(69行),accounting(378行),session(449行)这几个配置,将里面的sql全部启用就行了,也就是把 sql 前面的 # 去掉就OK了。
1)authorize(授权) { 69—223行 }
在" # Read the 'users' file "下面的 files 注释掉(170 行);
下面的 sql 取消注释(177 行)。
这里需要注意一下156行的信息 eap,意思是radius服务器和设备间是采用eap的认证方式。
2)accounting (账单) { 378—443行 }
在" # See "Accounting queries" in sql.conf "下面的 sql 取消注释(406 行);
3)session (对话) { 449—455行 }
在" # See "Simultaneous Use Checking Queries" in sql.conf "下面的 sql 取消注释(454行)
4)preacct (333行)
注释掉files (372行)
5)post-auth (461行)
取消sql的注释(475行)
6)pre-proxy (590行)
注释掉files (595行)
4、还有 vi /etc/raddb/sites-enabled/inner-tunnel
在" # Read the 'users' file "下面的 files 注释掉(124 行);
在" # See "Authorization Queries" in sql.conf "下面的 sql 取消注释(132行)
到了这就终于配置完了,下面就是插入一条数据到 mysql 数据库中真实的测试一下了:
mysql -u root -p
use radius
insert into radcheck (UserName, Attribute, Value) VALUES ('demo','Password', 'demopwd'); # 插入账户和密码
insert into radusergroup (username,groupname) values ('demo','user'); # 将用户加入组中
select * from radcheck; # 查询用户
出现以下结果则数据插入正确
exit # 退出数据库
service mysqld restart # 重启mysql数据库
service radiusd stop # 用 radiusd -X 做测试时需要把 radius 服务先停止
radiusd -X # 开始调试
另外开一个终端运行一下命令
radtest demo demopwd localhost 1812 testing123 # 用数据库里刚插入的账户和密码进行测试
成功的样子应该会出现 rad_recv: Access-Accept 字样。
这里特别需要注意: 在测试的时候需要保证 /etc/raddb/clients.conf 文件内容配置为以下的样子:
- client localhost {
- ipaddr = 127.0.0.1
- secret = testing123
- require_message_authenticator = no
- }
否则测试的时候会显示 radclient: no response from server for ID 96 socket 3 类似这样的提示。
可以再执行 cat /var/log/radius/radius.log 去查看启动日志看有没有错误。
杀死 radius 服务进程,启动 radius 服务,接下来配置路由器,进行无线连接。
killall -9 radiusd
service radiusd start
iptables -F # 为防止接下来的操作被 iptables 防火墙干扰,这里先清空防火墙规则连
五、配置路由器并进行无线连接:
注:192.168.2.1 是路由器 LAN 端 IP,这里我是直接用网线把电脑和路由器直接连起来的,如下图,在路由器里的设置,需要加入的 radius 服务器的IP地址和连接密码(/etc/raddb/clients.conf),否则将无法访问 radius 服务器,记得保存。
还有从下图可以看出TP-LINK的这款路由器只支持 radius 服务的认证功能。
之后就可以用笔记本电脑无线连接路由器(路由器的SSID 为 TP-LINK-300M),如下图:
1、下面是用Win10系统进行连接的,如果电脑上有以前保存要连接的路由器的密码,请务必删除,Win10在要连接的路由器SSID上右击,点击忘记就可以了,然后点击连接,弹出的窗口里输入账户demo,密码demopwd,点击确定,如果正常就可以上网了。
2、下面是用Win7系统进行连接的,如果电脑上有以前保存要连接的路由器的密码,也请务必删除,Win7需要打开控制面板里的网络和共享中心,然后点击管理无线网络(如下图)找到路由器的SSID删除即可,接下来连接路由器在弹出的窗口里输入账户demo,密码demopwd,点击确定,如果正常就可以上网了。
六、安装web后台管理页面daloradius:
有些 PHP 的必须包是不在默认标准库里的,还需要安装 PHP 扩展 pear(PHP扩展与应用库)。
wget http://download.pear.php.net/package/DB-1.7.14RC2.tgz #下载软件包
安装一个pear-DB的包:
pear install DB-1.7.14RC2.tgz
cd /var/www/html # 进入web数据主目录 /var/www/html
从sf.net(https://sourceforge.net/projects/daloradius/?source=typ_redirect)下载最新版的daloraidus,
wget https://nchc.dl.sourceforge.net/project/daloradius/daloradius/daloradius0.9-9/daloradius-0.9-9.tar.gz
然后
tar -zxvf daloradius-0.9-9.tar.gz # 解压daloradius-0.9-9.tar.gz
mv daloradius-0.9-9 daloradius # 将文件daloraidus-0.9-9重命名为daloradius
解压文件 daloradius 中有 INSTALL 文件是对其的信息和安装配置的说明,可以按照其说明去做。
要注意的是与freeradius配合安装,导入的是不同的数据包。
配置时修改数据库连接信息的文件是 /var/www/html/daloradius/library/daloradius.conf.php,填写正确的数据库名称、用户名和密码。当前版本的 INSTALL 文件中所写配置文件为daloradius.conf,大概是由于没有及时更新,是不正确的。
chown apache:apache -R /var/www/html/daloradius/ # 将 /var/www/html/ 文件夹极其下面的所有文件设置为apache组和apache用户所拥有
chmod 644 /var/www/html/daloradius/library/daloradius.conf.php # 将 daloraidus.conf.php 文件的权限设置为rw-r--r--
cd /var/www/html/daloradius/contrib/db/ # 进入 /var/www/html/daloradius/contrib/db/ 目录
mysql -u root -p radius < mysql-daloradius.sql # 将 mysql-daloradius.sql 导入到mysql里radius数据库中
mysql -u root -p radius < fr2-mysql-daloradius-and-freeradius.sql # 将 fr2-mysql-daloradius-and-freeradius.sql 导入到mysql里radius数据库中
vi /var/www/html/daloradius/library/daloradius.conf.php # 修改daloradius.conf.php 文件,将以下涉及到的内容更改,其他的别动
(28-33行)
$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306'; # 连接mysql数据库的端口
$configValues['CONFIG_DB_USER'] = 'root'; # 连接mysql数据库的账户
$configValues['CONFIG_DB_PASS'] = ' '; # 连接mysql数据库账号的密码
$configValues['CONFIG_DB_NAME'] = 'radius'; # 连接mysql的radius数据库
下面还有几个 daloradius 的 bug,默认配置中有几个文件路径和我们导入的不一样,把它改过来:
$configValues['CONFIG_FILE_RADIUS_PROXY'] = '/etc/raddb/proxy.conf'; (68行)
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/var/www/html/daloradius/var'; (70行)
$configValues['CONFIG_MAINT_TEST_USER_RADIUSSECRET'] = 'testing123'; (88行) # 注意这条,要和 /etc/raddb/clients.conf 文件设置的secret =xxxxxxxxxx 值一样。
配置完成后保存退出
touch /tmp/daloradius.log # 建立daloraidus的日志文件
chown apache.apache /tmp/daloradius.log # 将其文件设置为apache组及apache用户拥有
service httpd restart #重启http服务
接下来是添加防火墙规则,开放防火墙80端口,1812是radius服务的认证授权端口,1813是计费端口
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 1812 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 1813 -j ACCEPT
/sbin/iptables -I INPUT -p udp --dport 1812 -j ACCEPT
/sbin/iptables -I INPUT -p udp --dport 1813 -j ACCEPT
查看端口是否开放
iptables -L -n | grep 181
现在打开浏览器访问 http://your ip address/daloradius 就可以看到daloradius了,默认登录的用户名和密码分别为 username: administrator password: radius。
Config下可以对管理员进行增删改,如下图:
cat /etc/httpd/logs/error_log # 可以查看 http 服务的日志,看有没有错误
- INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Auth-Type',':=','Local');
- INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Service-Type',':=','Framed-User');
- INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Address',':=','255.255.255.255');
- INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Framed-IP-Netmask',':=','255.255.255.0');
- INSERT INTO radgroupreply (groupname,attribute,op,VALUE) VALUES ('user','Acct-Interim-Interval',':=','600'); # acct-interim-interval是计算流量的间隔(600秒),意味着每隔10分钟记录当前流量。
- INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES ('user','Simultaneous-Use',':=','1'); # 允许同时连接数目。
第七步,配置H3C交换机与radius服务器连接
在网络设备上开启802.1X认证、AAA认证和服务器RADIUS的配置,本文以H3C交换机为例。
1、设置交换机的IP地址:
[H3C] system-view #开启全局802.1x特性
#先设定交换机IP vlan 1打开端口 默认分配到vlan1
#交换机端口默认是vlan1,工作在access模式
[H3C] interface vlan-interface 1
[H3C-Vlan-interface1] ip add x.x.x.x x.x.x.x # ip add 交换机的IP地址 交换机的子网掩码
[H3C-Vlan-interface1] quit
第一步:H3C进入特权模式后,开启802.1X认证协议和认证方式,命令如下:
dot1x
dot1x authentication-method eap #采用eap认证方式
quit
Web界面显示如下:
第二步:与认证服务器RADIUS的配置,命令如下:
radius scheme demo # 创建radius方案demo并进入其视图
primary authentication x.x.x.x (IP) # 设置主认证radius服务器的IP
primary accounting x.x.x.x (IP) # radius主计费服务器的IP
key authentication xxxxxxxxxx (密码) # radius服务器认证密码
key accounting xxxxxxxxxx (密码) # radius服务器计费密码
user-name-format without-domain # 指示系统从用户名中去除用户域名后再将之传给radius服务器
quit
Web界面显示如下:
第三步:配置AAA认证,最好是每个认证都开启,我在配置过程中没有配置计费认证,结果导致认证总是失败,命令如下:
domain system # 创建域system并进入其视图
- authentication lan-access radius-scheme demo # 配置802.1x用户使用radius方案demo进行认证、授权、计费。
- authorization lan-access radius-scheme demo
- accounting lan-access radius-scheme demo
access-limit disable # 可设置该域最多可容纳多少个用户,这里不设置
state active
idle-cut disable # 可启动闲置切断功能并设置相关参数,这里不设置
self-service-url disable
quit
Web页面显示如下:
第四步:开启端口的802.1X的认证,命令如下:
interface GigabitEthernet1/0/1 # 开启指定端口GigabitEthernet1/0/1的802.1x特性
undo dot1x handshake # 这个握手协议要关闭,避免windows认证一段时间后又会掉线,要求重连
dot1x port-method portbased # 端口控制方式为Port Based
dot1x
Web界面显示如下:
第五步:dis cu查看最终所有的配置,如下:
<H3C>dis cu
#
version 5.20.99, Release 1111
#
sysname H3C
#
domain default enable system
#
ipv6
#
telnet server enable
#
port-group-vlan 1
#
dot1x
dot1x authentication-method eap
#
password-recovery enable
#
vlan 1
#
radius scheme demo
primary authentication 192.168.1.239
primary accounting 192.168.1.239
key authentication cipher $c$3$buPUPkVkvu8c7rakR3BdQpKbL4c24LiQfJdCu8EM
key accounting cipher $c$3$LdPEB85akrViDkqJTFsTAaSvl36Oc7nryXMFm56q
user-name-format without-domain
#
domain system
authentication lan-access radius-scheme demo
authorization lan-access radius-scheme demo
accounting lan-access radius-scheme demo
access-limit disable
state active
idle-cut disable
self-service-url disable
#
user-group system
group-attribute allow-guest
#
local-user admin
password cipher $c$3$EkhzOhFEh59+WPOOlD32QaWsr0DwDZyU
authorization-attribute level 3
service-type telnet
service-type web
#
interface NULL0
#
interface Vlan-interface1
ip address 192.168.1.240 255.255.255.0
#
interface GigabitEthernet1/0/1
dot1x guest-vlan 1
undo dot1x handshake
dot1x port-method portbased
dot1x
#
interface GigabitEthernet1/0/2
#
interface GigabitEthernet1/0/3
#
interface GigabitEthernet1/0/4
#
interface GigabitEthernet1/0/5
#
interface GigabitEthernet1/0/6
。。。。。。
#
undo info-center logfile enable
#
load xml-configuration
#
user-interface aux 0
user-interface vty 0 15
authentication-mode scheme
#
return
H3C交换机恢复默认配置命令
<H3C>reset saved-configuration
The saved configuration file will be erased. Are you sure? [Y/N]:Y
恢复完后需要重启交换机才能生效
<H3C>reboot
Start to check configuration with next startup configuration file, please wait.........DONE!
This command will reboot the device. Current configuration will be lost, save current configuration? [Y/N]:N
This command will reboot the device. Continue? [Y/N]:Y
到这所有的配置终于是完了,电脑上可以安装锐捷的认证客户端进行认证登录。
第八步,daloradius中文版配置:
进入daloradius 文件目录,修改config-lang.php,添加中文选项:
cd /var/www/html/daloradius
vi config-lang.php
<option value="zh"> Simplified Chinese </option> (79行)
进入lang目录,修改main.php,增加简体中文文件:
cd lang/
vi main.php
(32行)
case "zh":
include (dirname(__FILE__)."/zh.php");
break;
下载文件zh.php;
链接:https://pan.baidu.com/s/10RX80RMIQRMYkcEzicF7lw 密码:z7wu
返回lang目录,将下载的zh.php文件放入lang目录,重启radius服务;
cd /var/www/html/daloradius/lang
将下载的zh.php上传至此目录。
service radiusd restart # 重启radius服务
service httpd restart #重启http服务
service mysqld restart #重启mysql服务
设置为简体中文 Config -> Language Settings ->Simplified Chinese
iptables -L # 查看iptables防火墙规则链
保证80(HTTP超文本传输协议端口)、1812(认证授权端口)、1813(计费端口)端口的开放。
第九步,daloradius对freeradius服务的Web页面管理展示:
1、服务器状态:
2、连接记录:
3.在线用户:
4、用户排行: