CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

转载 h11345p【点击查看原文】  2018-01-19 17:50:06  阅读 2706 次 评论 0 条

概述

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


CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

环境准备

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用于测试】
避免一些问题发生,执行下面操作之前,先关闭CentOS防火墙(selinux)

EPEL安装建议

如果你的 CentOS 没有安装 EPEL 建议先安装一下,安装指令如下。

yum -y install epel-release
yum repolist

EPEL 是类似于一个软件市场的东西,里面提供了 Linux 系统下的上万个软件的安装包。

Linux CentOS Server 安装配置

执行下面指令安装组件(samba)

yum install samba samba-client samba-winbind krb5-server -y


配置 /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域名


配置/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
Systemctl enable winbind


重启后测试 samba 与域控的连通性并加入域并测试

Kinit administrator@TEST.COM.CN     #域名必须大写,输入密码后不返回结果说明没错误
net join –U Administrator       #加入域
wbinfo –a  jack       #输入指令然后回车输入密码,测试用户认证

如果认证成功则返回:“challenge/response password authentication succeeded


测试NTLM认证,【ntlm是windows 域环境下的认证方式】
ntlm_auth –-request-nt-key –-domain=TEST –-username=jack

如果结果正确则返回:

NT_STATUS_OK : Success (0x0)

FreeRadius 安装配置

执行下面指令安装组件(FeeRadius)

yum install freeradius freeradius-krb5 freeradius-utils openssl -y


下面设置权限的顺序我和原文作者的调换了一下

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

usermod –G wbpriv radiusd


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

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


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

client 192.168.2.0/24 {            #交换机所处网段,也可以是单独的IP地址
     secret = password     #预共享密码
     shortname = network1      #该客户端项的友好名称
     nas_type = cisco      #指定网络客户端设备类型
 
}


配置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

 
配置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信息,便于排错
systemctl enable radiusd    #配置为开机自动启动

开机自动启动,这一步建议最后配置测试可以正常验证使用之后再设置开机启动,否则如果你设置了开机启动重启电脑后,你要使用 radiusd -X 启动调试模式会无法正常启动,因为开机启动后radius默认会占用掉18121813端口,然后导致你无法使用 radiusd -X 指令启动调试模式,如果你设置了也没关系,使用下面的指令把radius进程结束掉即可。

ps -aux | grep radius*    #查询radius的进程ID,如果radius进程有运行,你可以看到有几个数字组成的进程ID
kill    1234              #结束进程、注意1234这个是我演示给你们看的进程ID,实际环境下替换成自己看到的radius进程ID即可

测试mschap与域控通信验证:【该测试是以本机为客户端进行测试的,因为还没有配置交换机】

radtest jack password localhost 0 testing123


如果认证成功会收到如下字样信息:

ad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=231, length=84


配置证书

以上步骤如果测试没问题就把radius基本环境配置好了,现在要配置Freeradius服务器证书,再有windows域的企业内绝大多数会使用windows集成的CA机构,freeradius服务器上的openssl只是用来做证书申请使用。

Radius服务器上申请证书请求


进入到/etc/raddb/certs目录,理论上可以把这里面所有的文件全部删除掉,然后重新通过openssl进行申请证书

(umask 077 ; openssl genrsa –out server.key 1024)                       #生成证书私钥
openssl req –new –key server.key –out server.req                        #生成证书请求


申请证书.
通过访问域控的 http://10.10.10.10/certsrv 下载根证书即CA证书,重命名为ca.cer。然后“申请证书->高级证书申请”,使用base64编码申请。通过server.req申请base64编码的证书,下载并命名为server.cer
 
配置证书
将申请的根证书和服务器证书上传到/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服务器上的所有配置已经完成。


关于配置证书这个步骤我感觉原作者写的不是很详细,博主自己的一些经验分享

博主自己按照原作者文章的步骤开始配置证书,发现一些问题,因为 FreeRadius 读取证书的时候,需要用到证书密码,我们自己到 Windows AD 里面下载的 CA 证书貌似是没有密码的,导致博主后面自己也是蒙蒙的没搞懂,然后就卡在这一步了,还有 Server 证书也是貌似涉及到一个私钥,然后博主就继续蒙蒙的脑补下去,一无头绪。


后来我干脆就不要从Windows AD 域控使用里面的CA、Server 证书了,自己直接使用 FreeRadius 提供的证书生成脚本,生成独立的证书,事实证明在 FreeRadius 脚本独立生成的证书是可以正常使用的,博主自己估计原文作者使用 Windows AD 里面的证书是为了在同一个域里面,和其它客户端PC产生信任关系吧。


关于如何使用 FreeRadius 自带的脚本生成证书,网上相关的资料真是少之又少,后来博主自己在一个外国人的博客找到,证书配置脚本的,下面给大家分享一下,也算是给自己留个记录,方便以后忘记后回来看看。


FreeRadius 脚本配置证书

这个是外国人的博客:http://deployingradius.com/documents/configuration/certificates.html

FreeRadius 证书配置文件都位于/etc/raddb/certs/*.cnf 大部分的这些文件的内容可以被忽略。

ca.cnf

[req]
prompt = no
distinguished_name = certificate_authority
default_bits = 2048
input_password = whatever    #这个是证书密码
output_password = whatever    #这个是证书密码
x509_extensions = v3_ca

#下面这些按照自己的真是使用环境进行配置
[certificate_authority]
countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.com
commonName = "Example Certificate Authority"

#还有一部分是关于证书有效期的设置,具体自己去看看 ca.cnf 配置文件

server.cnf

[req] prompt = no
distinguished_name = server
default_bits = 2048
input_password = whatever #这个是证书密码
output_password = whatever #这个是证书密码

#下面这些按照自己的真是使用环境进行配置
[server] countryName = FR
stateOrProvinceName = Radius
localityName = Somewhere
organizationName = Example Inc.
emailAddress = admin@example.com
commonName = "Example Server Certificate"

#还有一部分是关于证书有效期的设置,具体自己去看看 server.cnf 配置文件


如果你修改了证书配置文件后,使用证书生成脚本,你在 /etc/raddb/certs/ 证书目录里面的证书会被删除,如果有重要的证书,建议自己备份一下。

Linux CentOS 执行以下指令

cd /etc/raddb/certs    #进入FreeRadius证书目录
rm -f *csr *key       #删除一些文件     
make                   #开始调用脚本生成证书,等待一会

然后会看到脚本执行过程大致如下

openssl req -new -x509 -keyout ca.key -out ca.pem -config ./ca.cnf Generating a 2048 bit RSA private key
...................................................
etc.


新证书生成后,重启 FreeRadius 服务然后把生成的 CA 证书导出来,把这个 CA 证书导入到要进行 802.1x 的认证的PC客户端,即可进行验证。


特别注意:FreeRadius 默认的证书密码是(whatever)如果这个密码自己修改过,请修改配置文件 /etc/raddb/mods-available/eap 里面的 (whatever)密码改为你自己修改的密码,否则会影响FreeRadius正常运行。

client.cnf    

这个证书按照自己的实际需求决定是否使用客户端证书,这个博主自己也没用到,我估计是直接使用客户端证书验证,网卡配置里面可以不用输入AD账号密码,配置的过程大致和上面的CA/Server证书设置差不多,这个需要注意的就是,证书邮箱地址,输入对应人员使用的邮箱地址。


Linux CentOS 执行以下指令生成客户端证书

make client


指令执行完毕后,会生成以下客户端证书,证书名称应该是以你输入的用户邮箱地址命名的。


如果你使用的是 Ldap 验证账户身份,问题会比较多一些,没有 Windows AD 域控验证那么方便,有条件使用 Windows AD 的还是用 AD 做验证吧,博主自己乱捣鼓过很长一段时间才把802.1x做好,其实配置802.1x还是很简单的,网上大部分有关于 FreeRadius 的配置基本都是旧版本的比较多,新版本的 FreeRadius 的配置教程也是很少的,国外的可能比较多但是看英语对国人来说还是很有难度的,国内关于这方面的资料的确是很少,所以博主就整理一下别人的文章加上自己的一些见解分享出来了,希望对大家有点用处。


以上纯属博主自己的理解,如果理解有错误,大神们可以留言给我,一起交流一下。


思科交换机配置

关于交换机配置这一块,博主自己的使用交换机设置指令和下面的有些区别,具体大家可以百度看看自己的交换机是如何设置的802.1x验证的。


本例采用的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客户端配置

开启 dot1x 服务

打开服务管理 services.msc 将如下图服务开启,并设置为自动。域中的客户端可以通过组策略统一下发开启服务。


CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

查看设置网卡

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

CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证



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

CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

CentOS7、FreeRadius、Cisco2960S、WindowsAD 搭建有线无线802.1x网络认证

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



打赏
本文地址:https://www.yfyun.xin/index.php/post/19.html
温馨提示:文章内容系作者个人观点,不代表悦妃云对观点赞同或支持。
版权声明:本文为转载文章,来源于 h11345p【点击查看原文】 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?