dmli的博客小屋

专注IT运维

无线AP配置802.1x认证 ---- 通过freeradius接入windows AD域

最近给公司的AP配置了802.1x认证,踩过不少坑,也算配置成功了,赶紧记录下来,分享给需要的人。

1、项目目标

公司已经有了AD域环境了,现在需要将wifi也通过域账号进行认证连接,AC型号是华为的AC6003。

2、实现方案

freeradius.jpg

AP通过802.1x协议连接freeradius服务器,samba通过ads(domain membership)与AD域进行沟通,freeradius通过samba查询AD域帐号。

3、实验环境

两台VMware启动的虚拟机,网络可以选NAT也可以桥接,能互通即可。

AD服务器:

Windows Server 2016

IP: 192.168.75.137

主机名: WINAD

域: corp.dmli.com


radius服务器:

CentOS 7.6

IP: 192.168.75.134

主机名: freeradius

4、安装windows ad域

因为此文并非AD域的教程,所以基本默认安装即可:

服务器管理--仪表板--添加角色和功能--基于角色或基于功能的安装--选择本服务器--Active Directory域服务--添加所需功能--默认下一步到安装--将次服务器提升为域控制器--添加新林: corp.dmli.com--输入密码--下一步--NetBIOS域名: CORP--默认下一步到安装--重启服务器

安装完成后是这样的:

image.png

新建一个供freeradius接入的帐号:raidus/[email protected]

image.png

5、安装samba和winbind

关闭selinux和iptables,绑定hosts

192.168.75.134 freeradius
192.168.75.137 corp.dmli.com

samba使用ads模式与AD域进行沟通,会模拟成windows 2000服务器加入AD域。在这种模式中,需要使用kerberos验证方式,所以我们这里需要安装samba和kerberos相关软件:

yum install -y samba samba-winbind samba-winbind-clients samba-common-tools krb5-server krb5-workstation

修改samba配置文件 /etc/samba/smb.conf ,只需要修改[global]部分即可

[global]
workgroup = CORP
security = ADS
printing = cups
printcap name = cups
load printers = yes
cups options = raw
netbios name = radius
realm = CORP.DMLI.COM
encrypt passwords = yes
idmap config * : range = 10000-20000
idmap config * : backend = tdb

使用命令“testparm”测试smb.conf,没有返回"WARNING"和"ERROR" 说明配置OK。

image.png

修改winbind配置文件  /etc/nsswitch.conf,新增winbind配置

…… 省略 ……
passwd:     files sss winbind
shadow:     files sss winbind
group:      files sss winbind
…… 省略 ……

修改kerberos配置文件  /etc/krb5.conf,修改[libdefaults]、[realms]、[domain_realm],新增[kdc]

[libdefaults]
 dns_lookup_realm = false
 dns_lookup_kdc = true
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
 default_realm = CORP.DMLI.COM
 default_ccache_name = KEYRING:persistent:%{uid}

[realms]
 CORP.DMLI.COM = {
  kdc = 192.168.75.134:88
  admin_server = 192.168.75.134:749
  default_domain = corp.dmli.com
 }

[domain_realm]
 .corp.dmli.com = CORP.DMLI.COM
 corp.dmli.com = CORP.DMLI.COM

[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf

修改kdc配置文件 /var/kerberos/krb5kdc/kdc.conf,修改域名即可

[realms]
 CORP.DMLI.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia12
8-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

创建kdc数据库

kdb5_util create -s -r CORP.DMLI.COM

image.png

启动kdc并配置开机启动

systemctl start krb5kdc
systemctl enable krb5kdc

将centos7服务器加入windows AD

net rpc join -U radius

image.png

注:如果AD域使用的是AWS托管服务,那就不能用net join命令,需要使用“realm”命令

yum install realmd -y
realm join -U [email protected] corp.dmli.com --verbose

启动samba和winbind

systemctl start smb
systemctl enable smb
systemctl start winbind
systemctl enable winbind

注:在将centos加域之前,是不能启动samba和winbind的!

到这里,samba部分就配置完毕了,现在测试一下能否验证域帐号

ntlm_auth --request-nt-key --domain=CORP.DMLI.COM --username=radius [email protected]

验证成功会返回“NT_STATUS_OK: The operation completed successfully. (0x0)”

6、安装freeradius

安装软件

yum install -y freeradius freeradius-utils

修改配置文件 /etc/raddb/mods-available/ntlm_auth

exec ntlm_auth {
        wait = yes
        program = "/usr/bin/ntlm_auth --request-nt-key --domain=CORP.DMLI.COM --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --password=%{User-Password}"
}

新建配置文件 /etc/raddb/policy.d/ntlm_auth

ntlm_auth.authorize {
    if (!control:Auth-Type && User-Password) {
        update control {
            Auth-Type := ntlm_auth
        }
    }
}

修改配置文件 /etc/raddb/sites-enabled/default

authorize {}部分新增 "ntlm_auth"

authorize {
    ...
    ntlm_auth
}

authenticate {} 部分新增 "ntlm_auth"

authenticate {
    Auth-Type ntlm_auth {
        ntlm_auth
    }
    ...
}

取消 "Auth-Type eap"部分的注释

Auth-Type eap {
                eap {
                        handled = 1
                }
                if (handled && (Response-Packet-Type == Access-Challenge)) {
                        attr_filter.access_challenge.post-auth
                        handled  # override the "updated" code from attr_filter
                }
}

查看配置

egrep -v "(#|^$)" /etc/raddb/sites-enabled/default
…… 省略 ……
authorize {
	filter_username
	preprocess
	chap
	mschap
	digest
	suffix
	eap {
		ok = return
	}
	files
	ntlm_auth
	-sql
	-ldap
	expiration
	logintime
	pap
}
authenticate {
	Auth-Type PAP {
		pap
	}
	Auth-Type CHAP {
		chap
	}
	Auth-Type MS-CHAP {
		mschap
	}
	Auth-Type ntlm_auth {
		ntlm_auth
	}
	mschap
	digest
	eap
}
…… 省略 ……
        Auth-Type eap {
                eap {
                        handled = 1
                }
                if (handled && (Response-Packet-Type == Access-Challenge)) {
                        attr_filter.access_challenge.post-auth
                        handled  # override the "updated" code from attr_filter
                }
        }
…… 省略 ……

修改配置文件 /etc/raddb/proxy.conf ,取消"realm NULL"和"realm DEFAULT"部分注释,secret值随意取,802.1x认证时会需要这个值

realm NULL {
type            = radius
authhost        = LOCAL
accthost        = LOCAL
secret          = helloworld
}
realm DEFAULT {
type            = radius
authhost        = LOCAL
accthost        = LOCAL
secret          = helloworld
}

修改配置文件 /etc/raddb/mods-available/mschap,取消"ntlm_auth"注释

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --domain=CORP.DMLI.COM --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

把radius运行用户加入wbpriv组,以让freeradius能访问到winbind的目录/var/lib/samba/winbindd_privileged 进行认证

usermod -a -G wbpriv radiusd

修改配置文件 /etc/raddb/clients.conf,添加允许访问freeradius的客户端(无线AP)信息

client ac {
    ipaddr = [客户端ip]
    secret = helloworld
}

测试能否进行AD帐号认证,启动freeradius调试模式,如有报错可以看详细信息

radiusd -X
radtest radius [email protected] 127.0.0.1 0 testing123

没有问题,配置成功!

image.png

关掉调试模式,启动freeradius并设置开机启动

systemctl start radiusd
systemctl enable radiusd


主要参考文档:

https://sam198214.blogspot.com/2015/02/freeradius-v2-with-active-directory-on.html

https://wiki.freeradius.org/guide/NTLM-Auth-with-PAP-HOWTO

http://deployingradius.com/documents/configuration/active_directory.html

https://wiki.freeradius.org/guide/Active-Directory-direct-via-winbind

发表评论:

Copyright© dmli 2015-2019