概述

  feeradius是一个免费开源的 AAA服务器,更能强大,很多功能不输商业化软件。曾经试过很多类似的软件,如CiscoACS,微软的NAP等,思科的不错就是太贵,微软的感觉不好用。本例主要实现freeradius3版本通过windows AD 及证书验证,实现在Cisco系列交换机上基于端口的802.1x认证,只有加入域的计算机和用户并且开启了认证才可以联网,否则交换机端口将其划入guest Vlan进行隔离修补。这里借鉴了官方文档的部分图片和内容,但官网有些方面说的还是不够完整,有些步骤省略了,因此本人结合自己的工作环境重新写了以下。拓扑如下:

         Freeradius+Cisco2960S+windows AD实现有线802.1x认证_free

环境准备

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

  • 安装组件,【关门闭防火墙和selinux

yuminstall samba samba-client samba-winbind krb5-server
  • 配置/etc/samba/smb.con

    [global]部分修改如下内容:

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,这里严格区分大小写

[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” 

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
  • sambawinbind服务设置为开机启动,然后重启服务器,确定sambawinbind已经启动

Systemctl enable smb
Systemctlenable winbind
  • 重启后测试samba与域控的连通性并加入域并测试

Kinit administrator@TEST.COM.CN     #域名必须大写,输入密码后不返回结果说明没错误
 
net join –U Administrator       #加入域
wbinfo –a  jack%password       #测试与用户认证,只要最后结尾是如下就代表成功
   
   “challenge/response password authentication succeeded
  • 测试NTLM认证,【ntlmwindows 域环境下的认证方式】

ntlm_auth –-request-nt-key –-domain=TEST –-username=jack

如果结果正确则返回:

NT_STATUS_OK : Success (0x0)
  • 修改/var/lib/samba/winbindd_privileged权限,在3.0中只要将用户radiusd加入wbpriv组即可,这个组有相应的访问权限:

usermod –G wbpriv radiusd

否则就需要手动赋予权限【不建议这样使用】:

chown –R root.radiusd /var/lib/samba/winbindd_privileged

2.    安装配置FreeRadius

  • 安装组件

yum install freeradius openssl
  • 添加交换机客户端。配置客户端文件/etc/raddb/clients.conf,该文件是添加radius通信客户端的,比如交换机,这里我么用的是Cisco的交换机,

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 = yes
ntlm_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        ...}
  • 启动并测试Freeradius通信验证:

radius –X            #启动radius服务进程,该进程默认在前端运行,可以实施输出d
ebug信息,便于排错

systemctl enable radiusd    #配置为开机自动启动

测试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  申请证书.

通过访问域控的http://10.10.10.10/certsrv 下载根证书即CA证书,重命名为ca.cer。然后“申请证书->高级证书申请”,使用base64编码申请。通过server.req申请base64编码的证书,下载并命名为server.cer

 

l  配置证书

将申请的根证书和服务器证书上传到/etc/raddb/certs目录下,由于通过windows申请的证书是.cer格式的,而linux下证书一般是pem格式,因此要做如下格式转换:

openssl x509 inform der –in ca.cer –out ca.pem
openssl x509 inform der –in server.cer –out server.pem

        

到此FreeRadius服务器上的所有配置已经完成。

交换机配置

本例采用的Cisco2960S交换机,要开启aaa,配置radius服务器和认证组,并在端口启用dot1x认证和guest vlan,具体配置如下:

#全局配置
enable aaa new-model
aaa authentication dot1x default group radius
aaa authorization network default group radius
dot1x system-auth-control
dot1x guest-vlan supplicant

radius-server host 192.168.2.16 auth-port 1812 acct-port 1813 timeout 3
radius-server retransmit 2
radius-server key 7 cisco
radius-server vsa send authentication        #如果需要802.1x指定端口vlan需要配置这个
#端口配置,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,将如下图服务开启,并设置为自动。域中的客户端可以通过组策略统一下发开启服务。

Freeradius+Cisco2960S+windows AD实现有线802.1x认证_free_02

2.查看设置网卡

当开启服务后,网卡属性里面自动会出现 身份验证选项,其实通常情况下什么都不需要更改,默认即可。但如果出现问题可以查看以下选项情况。

Freeradius+Cisco2960S+windows AD实现有线802.1x认证_认证_03  Freeradius+Cisco2960S+windows AD实现有线802.1x认证_认证_04


点击 设置 ,确保如下选项已选,其实windows默认情况

Freeradius+Cisco2960S+windows AD实现有线802.1x认证_认证_05  Freeradius+Cisco2960S+windows AD实现有线802.1x认证_free_06


如果都配置好之后,正常情况下就已经生效了,该方式验证是同时验证机器和用户的身份,windows客户端加入域可以通过组策略自动组册证书,因此不需要再重新配置客户端证书,windows环境下要充分组策略的优势。

总结

  这里的步骤只是仅仅安装可以使用,以后会再写一个后端集成mysql数据的文章,实现数据信息记录的保存等。