Freeradius测试环境搭建
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
- [root@lamp ~] # yum install samba krb5-server freeradius2 freeradius2-utils
设置samba作为AD沟通的桥梁
- [root@lamp ~]# vim /etc/samba/smb.conf
- [global]
- workgroup = test #指定AD域的netbios名称,即test.COM的前面部分
- realm = test.com #指定AD域名
- netbios name = freeradius #freeradius服务器的主机名
- security = ads #指定samba的工作模式为ads
- password server = testtest.test.com #指定担当身份验证的服务器
- winbind separator = + # 指定一个字符作为分隔符,winbind将使用该分隔符来用户或组名。使用该配置将使得域用户表示为"MYDOMAIN+username",域组被表示为"MYDOMAIN+Domain Users"
- idmap uid = 10000-20000#写入域账户的uid、gid的范围,该范围是将linux用户,组的ID映射到Windows用户的SID,所以需要确保该段的没有被使用,当winbind启动后也不能在该段建立用户
- idmap gid = 10000-20000
- winbind enum users = yes #指定winbind服务是否能在系统上创建Windows域用户。一般情况下都要设置为yes,除非你处于某种原因希望关闭该功能
- winbind enum groups = yes
- nt acl support = yes #nt acl 支持
- winbind cache time = 0
- template shell = /bin/bash
- template homedir = /home/%D/%U # 用来指定为域用户产生主目录。使用变量替换可使winbind服务把用户主目录设置为/homes/MYDOMAIN/username
- winbind use default domain =yes
- [homes]
- comment = Home Directories
- path = /home/%D/%U
- browseable = no
- writable = yes
-
- valid users = %U
修改系统帐号验证
- [root@freeradius ~]# vim /etc/nsswitch.conf
- passwd: files winbind
- shadow: files winbind
-
- group: files winbind
设置kerberos认证机制
- [root@lamp ~]# vim /etc/krb5.conf
- [libdefaults]
- default_realm = test.COM #指定默认域名
- dns_lookup_realm = false #无需dns解析域请求包
- dns_lookup_kdc = false #是否解析kdc请求报
- ticket_lifetime = 24h#指定kerberos票据有效日期
- forwardable = yes #允许转发解析请求
- [realms]
- test.COM = {
- kdc = testtest.test.com:88#指定KDC服务器和KDC服务器的端口
- admin_server = testtest.test.com:749#指定域控制器和管理端口
- default_domain = test.com #指定默认域
- }
- [domain_realm]
- .example.com = EXAMPLE.COM
-
- example.com = test.COM #设置域的搜索范围,使得域大小写无关
设置kdc配置
- [root@lamp ~]# vim /var/kerberos/krb5kdc/kdc.conf
- [realms]
- test.COM = {
- #master_key_type = des3-hmac-sha1
- acl_file = /var/kerberos/krb5kdc/kadm5.acl
- dict_file = /usr/share/dict/words
- admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
- supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hm
- ac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc
- -crc:afs3
-
- }
测试samba与kdc是否可以正常通信
- [root@lamp ~]# kinit administrator@test.COM
-
- Password for administrator@test.COM:
如果没有什么报错就说明通信正常。
将freeradius server加入到域中
- [root@freeradius ~]# /etc/init.d/smb start
- Starting SMB services: [ OK ]
- Starting NMB services: [ OK ]
- [root@freeradius ~]# chkconfig smb on
- [root@freeradius ~]# chkconfig winbind on
-
- [root@freeradius ~]# service winbind restart
加入域
- [root@freeradius ~]# net rpc join -U administrator
- Password:
-
- Joined domain test.
测试是否同步域帐号
检查rpc链接是否成功
- [root@freeradius ~]# wbinfo -t
-
- checking the trust secret via RPC calls succeeded
获取用户信息
- [root@freeradius ~]# wbinfo -u
- administrator
- guest
- krbtgt
- ddclic
- test01
- test02
获取组信息
- [root@freeradius ~]# wbinfo -g
- BUILTIN+administrators
- BUILTIN+users
- domain computers
- domain controllers
- schema admins
-
- enterprise admins
查看密码是否获取成功
- [root@freeradius ~]# getent passwd
- test1:*:10033:10008:test1:/home/test/test1:/bin/bash
- test2:*:10034:10008:test2:/home/test/test2:/bin/bash
- test3:*:10035:10008:test3:/home/test/test3:/bin/bash
- test4:*:10036:10008:test4:/home/test/test4:/bin/bash
-
- test5:*:10037:10008:test5:/home/test/test5:/bin/bash
ntlm_auth测试验证是否成功
- [root@freeradius ~]# ntlm_auth --request-nt-key --domain=test.com --username=test --password='123456'
安装配置freeradius
加入ntlm_auth验证到freeradius
- [root@freeradius ~]# vim /etc/raddb/modules/ntlm_auth
- exec ntlm_auth {
- wait = yes
- program = "/usr/bin/ntlm_auth --request-nt-key --domain=test.COM --username=%{mschap
- :User-Name} --password=%{User-Password}"
-
- } }
修改freeradius验证机制
- [root@freeradius ~]# vim /etc/raddb/sites-enabled/default
- authenticate {
- ntlm_auth
- }
- [root@freeradius ~]# vim /etc/raddb/sites-enabled/inner-tunnel
- authenticate {
- ntlm_auth
-
- }
修改users
- [root@freeradius ~]# vim /etc/raddb/users
-
- DEFAULT Auth-Type = ntlm_auth
修改策略
- [root@freeradius ~]# vim /etc/raddb/policy.conf
- policy {
- # Give the ntlm_auth exec module an "authorize" method that sets Auth-Type to itself
- # but only if it's a valid PAP request, and Auth-Type is not already set to something
- ntlm_auth.authorize {
- if (!control:Auth-Type && User-Password) {
- update control {
- Auth-Type := ntlm_auth
- }
- }
- }
-
- }
测试freeradius帐号验证机制
- [root@freeradius ~]# radiusd –X
- [root@freeradius ~]# radtest test '123456' localhost 0 testing123
- Sending Access-Request of id 48 to 127.0.0.1 port 1812
- User-Name = "test"
- User-Password = "123456"
- NAS-IP-Address = 192.168.2.97
- NAS-Port = 0
- Message-Authenticator = 0x00000000000000000000000000000000
-
- rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=48, length=20
配置使用ntlm_auth做MS_CHAP认证
删除users中的test进入点
- [root@freeradius ~]# vim /etc/raddb/users
-
- #DEFAULT Auth-Type = ntlm_auth
编辑mschap模块
- [root@freeradius ~]# vim /etc/raddb/modules/mschap
- 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
-
- t-response=%{%{mschap:NT-Response}:-00}"
测试
- [root@freeradius ~]# radtest -t mschap test '123456' localhost 0 testing123
- Sending Access-Request of id 127 to 127.0.0.1 port 1812
- User-Name = "test"
- NAS-IP-Address = 192.168.2.97
- NAS-Port = 0
- Message-Authenticator = 0x00000000000000000000000000000000
- MS-CHAP-Challenge = 0x0f1ec04f5f7f3ec2
- MS-CHAP-Response = 0x000100000000000000000000000000000000000000000000000085c8068f30dcb423d1e6f7ed5db18b53a1d321ceb8f2266c
- rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=127, length=38
-
- MS-CHAP-Error = "\000E=691 R=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)
-
- 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)
解决办法:
- [root@freeradius ~]# cd /var/cache/samba/
- [root@freeradius samba]# chown -R root.radiusd winbindd_privileged/
- [root@freeradius samba]# service winbind restart
- Shutting down Winbind services: [ OK ]
- Starting Winbind services: [ OK ]
-
- [root@freeradius ~]# radiusd –X
再次测试
- [root@freeradius samba]# radtest -t mschap test '123456' localhost 0 testing123
- Sending Access-Request of id 231 to 127.0.0.1 port 1812
- User-Name = "test"
- NAS-IP-Address = 192.168.2.97
- NAS-Port = 0
- Message-Authenticator = 0x00000000000000000000000000000000
- MS-CHAP-Challenge = 0x58a8d7e945e9ed8f
- MS-CHAP-Response = 0x00010000000000000000000000000000000000000000000000000fcd072553b1813344cbe6d3fc3fe5e1ecbf853eaf5a4a03
- rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=231, length=84
- MS-CHAP-MPPE-Keys = 0x0000000000000000c2bea7b13efd39e82dcd04478fb185370000000000000000
- MS-MPPE-Encryption-Policy = 0x00000001
-
- MS-MPPE-Encryption-Types = 0x00000006