概述
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,
安装组件,【关门闭防火墙和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
将samba和winbind服务设置为开机启动,然后重启服务器,确定samba和winbind已经启动
Systemctl enable smb Systemctlenable winbind
重启后测试samba与域控的连通性并加入域并测试
Kinit [email protected] #域名必须大写,输入密码后不返回结果说明没错误 net join –U Administrator #加入域 wbinfo –a jack%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_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,将如下图服务开启,并设置为自动。域中的客户端可以通过组策略统一下发开启服务。
2.查看设置网卡
当开启服务后,网卡属性里面自动会出现” 身份验证选项“,其实通常情况下什么都不需要更改,默认即可。但如果出现问题可以查看以下选项情况。
点击 设置 ,确保如下选项已选,其实windows默认情况
如果都配置好之后,正常情况下就已经生效了,该方式验证是同时验证机器和用户的身份,windows客户端加入域可以通过组策略自动组册证书,因此不需要再重新配置客户端证书,windows环境下要充分组策略的优势。
总结
这里的步骤只是仅仅安装可以使用,以后会再写一个后端集成mysql数据的文章,实现数据信息记录的保存等。