freeradius - Freeradius + Active Directory + Google Authenticator
问题描述
我一直在尝试让 VPN 用户使用 2FA(Google 身份验证器)进行身份验证。目前我有思科 ISE、FreeRadius 服务器、Active Directory。我想要实现的是当用户连接到 VPN(思科 ISE)时,服务器从 Radius 服务器请求用户,然后 Radius 服务器从 Active Directory 验证用户。如果用户成功通过身份验证,FreeRadius 服务器必须向用户请求 OTP。我的配置是: /etc/raddb/sites-enabled/default
server default {
listen {
type = auth
ipaddr = 1.1.1.1
port = 0
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
listen {
ipaddr = *
port = 0
type = acct
}
authorize {
filter_username
preprocess
chap
mschap
digest
suffix
eap {
ok = return
}
files
-sql
ldap
if ((ok || updated) && User-Password && !control:Auth-Type){
update {
control:Auth-Type := ldap
}
}
expiration
logintime
pap
}
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
mschap
digest
Auth-Type LDAP {
ldap
}
eap
}
preacct {
preprocess
acct_unique
suffix
files
}
accounting {
detail
unix
-sql
exec
attr_filter.accounting_response
}
session {
}
post-auth {
if (Google-Password) {
update request {
pam
}
}
else {
update reply {
&Google-Password = "%{Google-Password}"
}
}
update {
&reply: += &session-state:
}
-sql
exec
remove_reply_message_if_eap
Post-Auth-Type REJECT {
-sql
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
Post-Auth-Type Challenge {
}
}
pre-proxy {
}
post-proxy {
eap
}
}
/etc/raddb/clients.conf
client CISCO_ISE {
ipaddr = 1.1.1.2
proto = *
secret = testing123
require_message_authenticator = no
nas_type = other
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
/etc/raddb/mods-config/files/authorize
DEFAULT Framed-Protocol == PPP
Framed-Protocol = PPP,
Framed-Compression = Van-Jacobson-TCP-IP
DEFAULT Hint == "CSLIP"
Framed-Protocol = SLIP,
Framed-Compression = Van-Jacobson-TCP-IP
DEFAULT Hint == "SLIP"
Framed-Protocol = SLIP
/etc/pam.d/radiusd
auth requisite pam_google_authenticator.so forward_pass
使用此配置,FreeRadius 服务器会要求输入用户名和密码,但在广告身份验证后,服务器不会要求输入一次密码
解决方案
解决了这个问题。对于那些正在配置精确设置的人,您需要使用state attribute
与会话或 cookie 相同的东西。如果请求已将state attribute
身份验证方法更改为 PAM,它将检查令牌。否则,如果请求没有,state attribute
那么这是您需要通过身份验证的第一次请求Active Directory
推荐阅读
- python - 解决 ModuleNotFoundError:没有名为“abc”的模块
- python - bytearray 中的 ascii 字符而不是十六进制值
- webpack - Webpack Aurelia - 如何配置并非所有块都与 Aurelia 捆绑在一起?
- vb.net - Visual Studio 2019 - VB - 创建可注册的 COM 对象
- installation - 使用 pip 安装 annoy 时如何解决错误?
- java - 将 log4j 添加到 build.gradle
- r - R中的循环密度曲线
- java - 创建名为“***.jpa.HibernateJpaConfiguration”的 bean 时出错
- javascript - 将变量分配给firestore值检查
- python - 表格出现之前的QtableView占位符文本