Freeradius+Cisco2960S+windows AD实现有线802.1x认证
概述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.05. Samba 3.06. Openssl7. Cisco 2960S交换机【这里需要提前把Windows域控制器准备好,并安装好CA证书颁发机构,建立一个用户jack用于测试】
linux server安装配置1. 安装配置samba,
[*]安装组件,【关门闭防火墙和selinux】
1
yuminstall samba samba-client samba-winbind krb5-server
[*]配置/etc/samba/smb.con
在部分修改如下内容:
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域名
段默认配置即可
配置/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
default =FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server =FILE:/var/log/kadmind.log
default_realm = TEST.COM.CN #指定域名
dns_lookup_realm = false
dns_lookup_kdc = false
TEST.COM.CN = {
kdc = 10.10.10.10:88 #指域控为kdc服务器及端口
admin_server = 10.10.10.10:749 #指定域控的管理端口
default_domain = test.com.cn
}
.test.com.cn = TEST.COM.CN
test.com.cn = TEST.COM.CN
profile =/var/kerberos/krb5kdc/kdc.conf
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
[*]重启后测试samba与域控的连通性并加入域并测试
1
2
3
4
5
6
Kinit administrator@TEST.COM.CN #域名必须大写,输入密码后不返回结果说明没错误
net join –U Administrator #加入域
wbinfo –ajack%password #测试与用户认证,只要最后结尾是如下就代表成功
“challenge/response password authentication succeeded
[*]测试NTLM认证,【ntlm是windows 域环境下的认证方式】
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_privileged2. 安装配置FreeRadius
[*]安装组件
yum 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 ...}
[*]启动并测试Freeradius通信验证:
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只是用来做证书申请使用。lRadius服务器上申请证书请求进入到/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.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数据的文章,实现数据信息记录的保存等。
页:
[1]