FreeRADIUS 测试环境搭建

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:
AAA服务器和RADIUS协议
AAA(Authentication,Authorization,Accounting)验证,授权,记账。AAA服务器主要功能是:哪些用户具有访问权限,具有访问权限的用户 又可以访问哪些服务,对用户正在使用的网络资源进行计账。
RADIUS(Remote Authentication Dial In User Service)协议是唯一的AAA标准。RADIUS协议是基于UDP的一种客户机/服务器协议。RADIUS客户机是网络访问服务器,它通常是一个路由器,交换机或者无线访问点。RADIUS服务器通常是运行在linux或Windows服务器上的一个监护程序。 RADIUS协议的认证端口是1812,记账端口是1813。
RADIUS协议的特点:
1. Client/Server模式
RADIUS协议是C/S结构协议,客户端是把用户信息传递给RADIUS服务器,并负责执行返回的响应。 RADIUS服务器负责接受用户的请求,对用户身份进行认证,并为客户端返回所有为用户提供服务所必须的配置信息。RADIUS服务器可以为其他的RADIUS Server担当代理。
2. 网络安全
客户端和RADIUS服务器之间的交互经过共享密钥认证,另外避免有人在网络上监听获取用户密码,客户端和服务器之前的任何的通信都是经过加密后传输的。 
  3. 认证机制
RADIUS服务器可以采用多种认证方式鉴别用户的合法性,当用户提供了用户名密码后,RADIUS服务器可以支持点对点的PAP认证(PPP PAP),点对点的CHAP认证(PPP CHAP),UNIX的登陆操作(UNIX Login)和其他认证机制。
RADIUS的工作过程:
1. 用户输入用户名密码等信息到客户端
2. 客户端产生一个接入请求报文到RADIUS服务器,其中包含了用户名,密码,客户端ID和用户访问端口的ID,密码都是经过MD5加密的。
3. RADIUS服务器对用户进行认证
4. 如果认证成功,RADIUS服务器想客户端发送允许接入包,否则就发送拒绝接入包。
5. 若客户端接受到允许接入包,则为用户建立连接,对用户进行授权和提供服务;若接受到拒绝接入包,则拒绝用户接入请求。
6. 客户端发送计费请求给RADIUS服务器
7. RADIUS服务器接受到计费请求包后开始计费,并向客户端回送开始计费的响应包。
8. 用户断开连接,客户端发送停止计费包给RADIUS服务器
9. RADIUS服务器接收到停止计费包后停止计费,并向客户端发送停止计费响应包,完成该用户的一次计费,记录计费信息。
Freeradius的安装配置
Freeradius是开源免费并完全兼容RADIUS协议的RADIUS服务器和客户端软件,可以用它对用户的接入和访问特定的网络进行有效的控制,授权,计费等等,它支持多种验证,包括文件,LDAP,数据库等等。
测试环境:
192.168.2.97  freeradius server
192.168.2.226  test.com(域服务器)
192.168.2.110   测试client
配置hosts文件,freeradius测试时需要解析主机名
192.168.2.226    test.com
192.168.2.97     freeradius.test.com
修改freeradius的主机名
[root@lamp ~]# vim /etc/sysconfig/network
HOSTNAME=freeradius.test.com
Freeradius与AD结合需要用的组件有freeradius,samba,krb5-server,直接yum安装以上组件即可,安装samba  krb5-server freeradius2  freeradius2-util 

  1. [root@lamp ~] # yum install samba krb5-server  freeradius2  freeradius2-utils 
设置samba作为AD沟通的桥梁


 
  
  1. [root@lamp ~]# vim /etc/samba/smb.conf 
  2. [global
  3. workgroup = test    #指定AD域的netbios名称,即test.COM的前面部分 
  4. realm = test.com    #指定AD域名 
  5. netbios name =  freeradius  #freeradius服务器的主机名 
  6. security = ads  #指定samba的工作模式为ads 
  7. password server = testtest.test.com  #指定担当身份验证的服务器 
  8. winbind separator = +     # 指定一个字符作为分隔符,winbind将使用该分隔符来用户或组名。使用该配置将使得域用户表示为"MYDOMAIN+username",域组被表示为"MYDOMAIN+Domain Users" 
  9. idmap uid = 10000-20000      #写入域账户的uid、gid的范围,该范围是将linux用户,组的ID映射到Windows用户的SID,所以需要确保该段的没有被使用,当winbind启动后也不能在该段建立用户 
  10. idmap gid = 10000-20000 
  11. winbind enum users = yes     #指定winbind服务是否能在系统上创建Windows域用户。一般情况下都要设置为yes,除非你处于某种原因希望关闭该功能 
  12. winbind enum groups = yes 
  13. nt acl support = yes     #nt acl 支持 
  14. winbind cache time = 0 
  15. template shell = /bin/bash 
  16. template homedir = /home/%D/%U   # 用来指定为域用户产生主目录。使用变量替换可使winbind服务把用户主目录设置为/homes/MYDOMAIN/username 
  17. winbind use default domain =yes 
  18. [homes] 
  19. comment = Home Directories 
  20. path = /home/%D/%U 
  21. browseable = no 
  22. writable = yes 
  23.  
 
  
  1. valid users = %U 
 
修改系统帐号验证

 
  
  1. [root@freeradius ~]# vim /etc/nsswitch.conf 
  2. passwd:     files       winbind 
  3. shadow:     files       winbind 
  4.  
 
  
  1. group:      files       winbind 

设置kerberos认证机制

 
  
  1. [root@lamp ~]# vim /etc/krb5.conf 
  2. [libdefaults] 
  3.  default_realm = test.COM   #指定默认域名 
  4.  dns_lookup_realm = false   #无需dns解析域请求包 
  5.  dns_lookup_kdc = false  #是否解析kdc请求报 
  6.  ticket_lifetime = 24h   #指定kerberos票据有效日期 
  7.  forwardable = yes   #允许转发解析请求 
  8. [realms] 
  9.  test.COM = { 
  10.   kdc = testtest.test.com:88     #指定KDC服务器和KDC服务器的端口 
  11.   admin_server = testtest.test.com:749  #指定域控制器和管理端口 
  12.   default_domain = test.com  #指定默认域 
  13.  } 
  14. [domain_realm] 
  15.  .example.com = EXAMPLE.COM 
  16.  
 
  
  1.  example.com = test.COM  #设置域的搜索范围,使得域大小写无关 

设置kdc配置

 
  
  1. [root@lamp ~]# vim /var/kerberos/krb5kdc/kdc.conf 
  2. [realms] 
  3.  test.COM = { 
  4.   #master_key_type = des3-hmac-sha1 
  5.   acl_file = /var/kerberos/krb5kdc/kadm5.acl 
  6.   dict_file = /usr/share/dict/words 
  7.   admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab 
  8.   supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hm 
  9. ac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc 
  10. -crc:afs3 
  11.  
 
  
  1.  } 

测试samba与kdc是否可以正常通信

 
  
  1. [root@lamp ~]# kinit  administrator@test.COM 
  2.  
 
  
  1. Password for administrator@test.COM: 
 
  
  1.    
如果没有什么报错就说明通信正常。
将freeradius server加入到域中

 
  
  1. [root@freeradius ~]# /etc/init.d/smb start 
  2. Starting SMB services:                                     [  OK  ] 
  3. Starting NMB services:                                     [  OK  ] 
  4. [root@freeradius ~]# chkconfig  smb on 
  5. [root@freeradius ~]# chkconfig winbind on 
  6.  
 
  
  1. [root@freeradius ~]# service  winbind restart 

加入域

 
  
  1. [root@freeradius ~]# net rpc join   -U administrator           
  2. Password: 
  3.  
 
  
  1. Joined domain test. 

测试是否同步域帐号

检查rpc链接是否成功

 
  
  1. [root@freeradius ~]# wbinfo -t 
  2.  
 
  
  1. checking the trust secret via RPC calls succeeded 
 
获取用户信息

 
  
  1. [root@freeradius ~]# wbinfo -u 
  2. administrator 
  3. guest 
  4. krbtgt 
  5. ddclic 
  6. test01 
 
  
  1. test02

获取组信息

 
  
  1. [root@freeradius ~]# wbinfo -g 
  2. BUILTIN+administrators 
  3. BUILTIN+users 
  4. domain computers 
  5. domain controllers 
  6. schema admins 
  7.  
 
  
  1. enterprise admins 
查看密码是否获取成功

 
  
  1. [root@freeradius ~]# getent  passwd 
  2. test1:*:10033:10008:test1:/home/test/test1:/bin/bash 
  3. test2:*:10034:10008:test2:/home/test/test2:/bin/bash 
  4. test3:*:10035:10008:test3:/home/test/test3:/bin/bash 
  5. test4:*:10036:10008:test4:/home/test/test4:/bin/bash 
  6.  
 
  
  1. test5:*:10037:10008:test5:/home/test/test5:/bin/bash 
 
  
  1.  

ntlm_auth测试验证是否成功

 
  
  1.  
 
  
  1. [root@freeradius ~]# ntlm_auth --request-nt-key --domain=test.com --username=test --password='123456' 
 
  
  1.  

安装配置freeradius

加入ntlm_auth验证到freeradius

 
  
  1. [root@freeradius ~]# vim /etc/raddb/modules/ntlm_auth 
  2. exec ntlm_auth { 
  3.         wait = yes 
  4.         program = "/usr/bin/ntlm_auth --request-nt-key --domain=test.COM --username=%{mschap 
  5. :User-Name} --password=%{User-Password}" 
  6.  
 
  
  1. } } 

修改freeradius验证机制

 
  
  1. [root@freeradius ~]# vim /etc/raddb/sites-enabled/default 
  2. authenticate { 
  3.         ntlm_auth 
  4. [root@freeradius ~]# vim /etc/raddb/sites-enabled/inner-tunnel 
  5. authenticate { 
  6.         ntlm_auth 
  7.  
 
  

修改users

 
  
  1. [root@freeradius ~]# vim /etc/raddb/users 
  2.  
 
  
  1. DEFAULT Auth-Type = ntlm_auth 
 

修改策略

 
  
  1. [root@freeradius ~]# vim /etc/raddb/policy.conf 
  2. policy { 
  3.     # Give the ntlm_auth exec module an "authorize" method that sets Auth-Type to itself 
  4.     # but only if it's a valid PAP request, and Auth-Type is not already set to something 
  5.     ntlm_auth.authorize { 
  6.         if (!control:Auth-Type && User-Password) { 
  7.             update control { 
  8.                Auth-Type := ntlm_auth 
  9.             } 
  10.         } 
  11.     } 
  12.  
 
  

测试freeradius帐号验证机制

 
  
  1. [root@freeradius ~]# radiusd –X 
  2. [root@freeradius ~]# radtest  test '123456' localhost 0 testing123 
  3. Sending Access-Request of id 48 to 127.0.0.1 port 1812 
  4.         User-Name = "test" 
  5.         User-Password = "123456" 
  6.         NAS-IP-Address = 192.168.2.97 
  7.         NAS-Port = 0 
  8.         Message-Authenticator = 0x00000000000000000000000000000000 
  9.  
 
  
  1. rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=48, length=20 
 
  
  1.  

配置使用ntlm_auth做MS_CHAP认证

删除users中的test进入点

 
  
  1. [root@freeradius ~]# vim /etc/raddb/users 
  2.  
 
  
  1. #DEFAULT Auth-Type = ntlm_auth 
 
  
  1.  

编辑mschap模块

 
  
  1. [root@freeradius ~]# vim /etc/raddb/modules/mschap 
  2. ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name:-None} --domain=%{%{mschap:NT-Domain}:-test.COM} --challenge=%{%{mschap:Challenge}:-00} --n 
  3.  
 
  
  1. t-response=%{%{mschap:NT-Response}:-00}" 
 
  
  1.  

测试

 
  
  1. [root@freeradius ~]# radtest  -t mschap  test '123456' localhost 0 testing123          
  2. Sending Access-Request of id 127 to 127.0.0.1 port 1812 
  3.         User-Name = "test" 
  4.         NAS-IP-Address = 192.168.2.97 
  5.         NAS-Port = 0 
  6.         Message-Authenticator = 0x00000000000000000000000000000000 
  7.         MS-CHAP-Challenge = 0x0f1ec04f5f7f3ec2 
  8.         MS-CHAP-Response = 0x000100000000000000000000000000000000000000000000000085c8068f30dcb423d1e6f7ed5db18b53a1d321ceb8f2266c 
  9. rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=127, length=38 
  10.  
 
  
  1.         MS-CHAP-Error = "\000E=691 R=1" 
 
  
  1.  

报错:

 
 
  
  1. Exec-Program output: winbind client not authorized to use winbindd_pam_auth_crap. Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly. (0xc0000022)  
  2.  
 
  
  1. Exec-Program-Wait: plaintext: winbind client not authorized to use winbindd_pam_auth_crap. Ensure permissions on /var/cache/samba/winbindd_privileged are set correctly. (0xc0000022
 
  
  1.  
解决办法:

 
  
  1. [root@freeradius ~]# cd /var/cache/samba/ 
  2. [root@freeradius samba]# chown  -R  root.radiusd  winbindd_privileged/ 
  3. [root@freeradius samba]# service  winbind restart 
  4. Shutting down Winbind services:                            [  OK  ] 
  5. Starting Winbind services:                                 [  OK  ] 
  6.  
 
  
  1. [root@freeradius ~]# radiusd –X 
 
  
  1.  

再次测试

 
  
  1. [root@freeradius samba]# radtest  -t mschap  test '123456' localhost 0 testing123 
  2. Sending Access-Request of id 231 to 127.0.0.1 port 1812 
  3.         User-Name = "test" 
  4.         NAS-IP-Address = 192.168.2.97 
  5.         NAS-Port = 0 
  6.         Message-Authenticator = 0x00000000000000000000000000000000 
  7.         MS-CHAP-Challenge = 0x58a8d7e945e9ed8f 
  8.         MS-CHAP-Response = 0x00010000000000000000000000000000000000000000000000000fcd072553b1813344cbe6d3fc3fe5e1ecbf853eaf5a4a03 
  9. rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=231, length=84 
  10.         MS-CHAP-MPPE-Keys = 0x0000000000000000c2bea7b13efd39e82dcd04478fb185370000000000000000 
  11.         MS-MPPE-Encryption-Policy = 0x00000001 
  12.  
 
  
  1.         MS-MPPE-Encryption-Types = 0x00000006









本文转自 waydee 51CTO博客,原文链接:http://blog.51cto.com/waydee/1103942,如需转载请自行联系原作者
相关实践学习
基于ECS和NAS搭建个人网盘
本场景主要介绍如何基于ECS和NAS快速搭建个人网盘。
阿里云文件存储 NAS 使用教程
阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例、HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 产品详情:https://www.aliyun.com/product/nas
目录
相关文章
|
2月前
|
架构师 测试技术 网络性能优化
dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)
dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)
367 0
|
2月前
|
Ubuntu 测试技术 Linux
dpdk测试环境搭建(vmware下ubuntu环境参考上文汇总流程)
dpdk测试环境搭建(vmware下ubuntu环境参考上文汇总流程)
219 0
|
2月前
|
应用服务中间件 测试技术 nginx
dpdk环境搭建及运行helloworld测试
dpdk环境搭建及运行helloworld测试
180 0
|
9月前
|
存储 Oracle 关系型数据库
HBase集群环境搭建与测试(上)
HBase集群环境搭建与测试
191 0
|
2月前
|
分布式计算 Hadoop 测试技术
Hadoop【环境搭建 05】【hadoop-3.1.3 单机版基准测试 TestDFSIO + mrbench + nnbench + Terasort + sort 举例】
【4月更文挑战第1天】Hadoop【环境搭建 05】【hadoop-3.1.3 单机版基准测试 TestDFSIO + mrbench + nnbench + Terasort + sort 举例】
74 3
|
2月前
|
JavaScript Java 测试技术
『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium
『App自动化测试之Appium基础篇』| 从定义、原理、环境搭建、安装问题排查等深入了解Appium
1769 0
|
2月前
|
IDE Java 测试技术
【如何学习Python自动化测试】—— 自动化测试环境搭建
【如何学习Python自动化测试】—— 自动化测试环境搭建
33 0
|
2月前
|
分布式计算 Hadoop Scala
Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
【4月更文挑战第13天】Spark【环境搭建 01】spark-3.0.0-without 单机版(安装+配置+测试案例)
125 0
|
2月前
|
Java 测试技术 Maven
《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)
【2月更文挑战第11天】《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程) 是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。由于现在企业和公司中Java的大部分项目都是基于Maven, 因此宏哥为了照顾到企业或者公司用的java项目中用到maven的童鞋或者小伙伴们,这里也简单的介绍和分享一下。在Maven项目中使用Selenium. 非常简单。
174 3
|
2月前
|
Web App开发 Java 测试技术
《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)
【2月更文挑战第10天】《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程) jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有java版的selenium,因为不会Python,或者现在大多数企业和公司还是把java奉在神坛上,所以宏哥打算就换个口味,介绍一下java+ selenium自动化测试。大致和前边的python+selenium自动化测试差不多。基于java和selenium做自动化测试.
138 0