| 概述  feeradius是一个免费开源的 AAA服务器,更能强大,很多功能不输商业化软件。曾经试过很多类似的软件,如Cisco的ACS,微软的NAP等,思科的不错就是太贵,微软的感觉不好用。本例主要实现freeradius3版本通过windows AD 及证书验证,实现在Cisco系列交换机上基于端口的802.1x认证,只有加入域的计算机和用户并且开启了认证才可以联网,否则交换机端口将其划入guest Vlan进行隔离修补。这里借鉴了官方文档的部分图片和内容,但官网有些方面说的还是不够完整,有些步骤省略了,因此本人结合自己的工作环境重新写了以下。拓扑如下: 
   环境准备
 1.      CentOS7.2     【radius 服务器】 2.      Windows 2012   【AD服务区和CA机构,域名为test.com.cn】 3.      Windows 7 SP1  【客户端】 4.      FreeRadius 3.0 5.      Samba 3.0 6.      Openssl 7.      Cisco 2960S交换机 【这里需要提前把Windows域控制器准备好,并安装好CA证书颁发机构,建立一个用户jack用于测试】 linux server安装配置1.    安装配置samba,
 | 1 
 | yuminstall samba samba-client samba-winbind krb5-server 
 
 | 
 
 
 配置/etc/samba/smb.con在[global]部分修改如下内容:
 
 
 | 1 2
 3
 4
 5
 
 | workgroup =  TEST                #指定域的netbios名称 security = ads                  #指定samba的工作模式,和域集成
 winbind use default domain = no
 password server = 10.10.10.10           #指定定身份验证的服务器为域控
 realm = TEST.COM.CN               #指定AD域名
 
 
 | 
 
 
 [home]段默认配置即可 
 配置/etc/krb5.conf,这里严格区分大小写 | 1 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | [logging] default =FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server =FILE:/var/log/kadmind.log
 
 [libdefaults]
 default_realm = TEST.COM.CN                         #指定域名
 dns_lookup_realm = false
 dns_lookup_kdc = false
 
 [realms]
 TEST.COM.CN = {
 kdc = 10.10.10.10:88                               #指域控为kdc服务器及端口
 admin_server = 10.10.10.10:749                     #指定域控的管理端口
 default_domain = test.com.cn
 }
 
 [domain_realm]
 .test.com.cn = TEST.COM.CN
 test.com.cn = TEST.COM.CN
 
 [kdc]
 profile =/var/kerberos/krb5kdc/kdc.conf
 
 [appdefaults]
 pam = {
 debug = false
 ticket_lifetime = 36000
 renew_lifetime = 36000
 forwardable = true
 krb4_convert = false
 }
 
 
 | 
 
 
 编辑/etc/nsswich.conf,在下列行末尾加 “winbind” 
 
 | 1 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | passwd:     files sss winbind shadow:     files sss winbind
 group:      files sss winbind
 
 protocols:  files sss winbind
 
 services:   files sss winbind
 
 netgroup:   files sss winbind
 
 automount:  files sss winbind
 
 
 | 
 
 
 将samba和winbind服务设置为开机启动,然后重启服务器,确定samba和winbind已经启动
 
 | 1 2
 
 | Systemctl enable smb Systemctlenable winbind
 
 
 | 
 
 
 | 1 2
 3
 4
 5
 6
 
 | Kinit administrator@TEST.COM.CN     #域名必须大写,输入密码后不返回结果说明没错误 
 net join –U Administrator       #加入域
 wbinfo –a  jack%password       #测试与用户认证,只要最后结尾是如下就代表成功
 
 “challenge/response password authentication succeeded
 
 
 | 
 
 
 ntlm_auth –-request-nt-key –-domain=TEST –-username=jack如果结果正确则返回:测试NTLM认证,【ntlm是windows 域环境下的认证方式】
 
 NT_STATUS_OK : Success (0x0)
 usermod –G wbpriv radiusd否则就需要手动赋予权限【不建议这样使用】:修改/var/lib/samba/winbindd_privileged权限,在3.0中只要将用户radiusd加入wbpriv组即可,这个组有相应的访问权限:
 
 chown –R root.radiusd /var/lib/samba/winbindd_privileged2.    安装配置FreeRadiusyum install freeradius openssl
 添加交换机客户端。配置客户端文件/etc/raddb/clients.conf,该文件是添加radius通信客户端的,比如交换机,这里我么用的是Cisco的交换机,
 
 | 1 2
 3
 4
 5
 6
 7
 
 | client 192.168.2.0/24 {            #交换机所处网段,也可以是单独的IP地址 
 secret      = password     #预共享密码
 shortname    = network1      #该客户端项的友好名称
 nas_type     = cisco      #指定网络客户端设备类型
 
 }
 
 
 | 
 
 
 l  配置FreeRadius 使用MS-CHAP,编辑 /etc/raddb/mods-available/mschap文件,设置如下参数:with_ntdomain_hack = yesntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{mschap:User-Name}:-None} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --domain=%{%{mschap:NT-Domain}:-TEST}" 编辑/etc/raddb/mods-available/eap文件,修改如下参数: 
 default_eap_type = peap. 
 random_file = /dev/urandom 
 l  配置FreeRadius使用 ntlm_auth,编辑/etc/raddb/mods-enabled/ntlm_auth,修改如下:exec ntlm_auth {                wait = yes                program = "/usr/bin/ntlm_auth --request-nt-key --domain=TEST.COM.CN --username=%{mschap:User-Name} --password=%{User-Password}"        }编辑/etc/raddb/sites-enabled/default 和/etc/raddb/sites-enabled/inner-tunnel文件,修改如下: authenticate {        ...        ntlm_auth        ...}radius –X            #启动radius服务进程,该进程默认在前端运行,可以实施输出debug信息,便于排错。实际用的使用可以将其加入开机自动启动,让其在后台运行测试mschap与域控通信验证:【该测试是以本机为客户端进行测试的,因为还没有配置交换机】
 radtest jack password localhost 0 testing123                   如果认证成功会收到如下字样信息:
 ad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=231, length=84
 3.    配置证书
 以上步骤如果测试没问题就把radius基本环境配置好了,现在要配置Freeradius服务器证书,再有windows域的企业内绝大多数会使用windows集成的CA机构,freeradius服务器上的openssl只是用来做证书申请使用。 l  Radius服务器上申请证书请求 进入到/etc/raddb/certs目录,理论上可以把这里面所有的文件全部删除掉,然后重新通过openssl进行申请证书(umask 077 ; openssl genrsa –out server.key 1024)                       #生成证书私钥openssl req –new –key server.key –out server.req                        #生成证书请求 l  申请证书. 
 l  配置证书 将申请的根证书和服务器证书上传到/etc/raddb/certs目录下,由于通过windows申请的证书是.cer格式的,而linux下证书一般是pem格式,因此要做如下格式转换:openssl x509 inform der –in ca.cer –out ca.pemopenssl x509 inform der –in server.cer –out server.pem 
 到此FreeRadius服务器上的所有配置已经完成。交换机配置本例采用的Cisco2960S交换机,要开启aaa,配置radius服务器和认证组,并在端口启用dot1x认证和guest vlan,具体配置如下: #全局配置enable aaa new-modelaaa authentication dot1x default group radiusaaa authorization network default group radiusdot1x system-auth-controldot1x guest-vlan supplicant
 radius-server host 192.168.2.16 auth-port 1812 acct-port 1813 timeout 3radius server retransmit 2radius server cisco
 #端口配置,interface G1/0/1(config-if)# switchport mode access(config-if)# switchport access vlan 10       #配置该端口默认为vlan10(config-if)# dot1x port-control auto(config-if)# authentication event no-response action authorize vlan 771 #配置guest vlan,当检测到该机器没加入域,则将其划到vlan 771中
 Windows客户端配置1.开启dot1x服务打开服务管理 services.msc,将如下图服务开启,并设置为自动。域中的客户端可以通过组策略统一下发开启服务。
   2.查看设置网卡
 当开启服务后,网卡属性里面自动会出现” 身份验证选项“,其实通常情况下什么都不需要更改,默认即可。但如果出现问题可以查看以下选项情况。
 
     
 点击 设置 ,确保如下选项已选,其实windows默认情况
 
     
 如果都配置好之后,正常情况下就已经生效了,该方式验证是同时验证机器和用户的身份,windows客户端加入域可以通过组策略自动组册证书,因此不需要再重新配置客户端证书,windows环境下要充分组策略的优势。
 总结  这里的步骤只是仅仅安装可以使用,以后会再写一个后端集成mysql数据的文章,实现数据信息记录的保存等。
 
 
 
 
 |