Freeradius LDAP VLAN default profile

Yann Verry yann_freeradius at verry.org
Sat Jul 3 23:14:46 CEST 2021


Dear list,

My first time I write on the mailing-list.
I hope not boring or not already answered thousand of times.

I would like to setup a classical radius with rlm_ldap authentication 
module.
The auth works as expected when I add attribute on the user side OR in 
profile section with the default value.

My question is, how I can handle vlan with group dynamicaly. I seen some 
response/thread that put each group in post-auth {}.
But I would like to have all information / matching from LDAP directly 
not in config file.

Do you have some input / docs to do this ?

My current setup:


$ radtest yverry password localhost -0 testing123
Sent Access-Request Id 214 from 0.0.0.0:59868 to 127.0.0.1:1812 length 92
     User-Name = "yverry"
     User-Password = "password"
     NAS-IP-Address = 127.0.1.1
     NAS-Port = 0
     Message-Authenticator = 0x00
     Cleartext-Password = "password"
Received Access-Accept Id 214 from 127.0.0.1:1812 to 127.0.0.1:59868 
length 78
     Tunnel-Type:0 = VLAN
     Tunnel-Medium-Type:0 = IEEE-802
     Tunnel-Private-Group-Id:0 = "10"
     Cisco-AVPair = "shell:priv-lvl=15"
     Juniper-Local-User-Name = "superuser"



user {
     base_dn = "ou=people,${..base_dn}"
     filter = "(uid=%{User-Name})"
}

group {
     base_dn = "${..base_dn}"
     filter = '(objectClass=groupOfNames)'
     membership_attribute = 'memberOf'
}

profile {
     filter = '(objectclass=radiusprofile)'
     default = ???? (or 
cn=default-vlan,ou=profiles,ou=radius,dc=verry,dc=org)
}


I don't know the default I need to fill to do what I want.


more output (debug is life)


Listening on auth address * port 1812 bound to server default
Listening on acct address * port 1813 bound to server default
Listening on auth address :: port 1812 bound to server default
Listening on acct address :: port 1813 bound to server default
Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel
Listening on proxy address * port 54847
Listening on proxy address :: port 43874
Ready to process requests
(0) Received Access-Request Id 214 from 127.0.0.1:59868 to 
127.0.0.1:1812 length 92
(0)   User-Name = "yverry"
(0)   User-Password = "password"
(0)   NAS-IP-Address = 127.0.1.1
(0)   NAS-Port = 0
(0)   Message-Authenticator = 0x1b83610509ae7a9da5eacfd22a8bd30c
(0) # Executing section authorize from file 
/etc/freeradius/3.0/sites-enabled/default
(0)   authorize {
(0)     policy filter_username {
(0)       if (&User-Name) {
(0)       if (&User-Name)  -> TRUE
(0)       if (&User-Name)  {
(0)         if (&User-Name =~ / /) {
(0)         if (&User-Name =~ / /)  -> FALSE
(0)         if (&User-Name =~ /@[^@]*@/ ) {
(0)         if (&User-Name =~ /@[^@]*@/ )  -> FALSE
(0)         if (&User-Name =~ /\.\./ ) {
(0)         if (&User-Name =~ /\.\./ )  -> FALSE
(0)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
(0)         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))   
-> FALSE
(0)         if (&User-Name =~ /\.$/)  {
(0)         if (&User-Name =~ /\.$/)   -> FALSE
(0)         if (&User-Name =~ /@\./)  {
(0)         if (&User-Name =~ /@\./)   -> FALSE
(0)       } # if (&User-Name)  = notfound
(0)     } # policy filter_username = notfound
(0)     [preprocess] = ok
(0) suffix: Checking for suffix after "@"
(0) suffix: No '@' in User-Name = "yverry", looking up realm NULL
(0) suffix: No such realm "NULL"
(0)     [suffix] = noop
(0) eap: No EAP-Message, not doing EAP
(0)     [eap] = noop
(0)     [files] = noop
rlm_ldap (ldap): Reserved connection (0)
(0) ldap: EXPAND (uid=%{User-Name})
(0) ldap:    --> (uid=yverry)
(0) ldap: Performing search in "ou=people,dc=verry,dc=org" with filter 
"(uid=yverry)", scope "sub"
(0) ldap: Waiting for search result...
(0) ldap: User object found at DN "cn=yverry,ou=people,dc=verry,dc=org"
(0) ldap: Adding cacheable user object memberships
(0) ldap:   &control:LDAP-Group += 
"cn=netops-admin-users,ou=groups,dc=verry,dc=org"
(0) ldap: Skipping caching group objects as directive 
'group.membership_filter' is not set
(0) ldap: Performing search in 
"cn=default-vlan,ou=profiles,ou=radius,dc=verry,dc=org" with filter 
"(objectclass=radiusprofile)", scope "base"
(0) ldap: Waiting for search result...
(0) ldap: Processing profile attributes
(0) ldap: reply:Tunnel-Type := VLAN
(0) ldap: reply:Tunnel-Medium-Type := IEEE-802
(0) ldap: reply:Tunnel-Private-Group-ID := '10'
(0) ldap: Processing user attributes
(0) ldap: control:Password-With-Header := 
'{SSHA}yGsohiWfreeradius/rulez8hWebvihsMIHi+Y'
rlm_ldap (ldap): Released connection (0)
Need 5 more connections to reach 10 spares
rlm_ldap (ldap): Opening additional connection (5), 1 of 27 pending 
slots used
rlm_ldap (ldap): Connecting to ldap://localhost:389
rlm_ldap (ldap): Waiting for bind result...
rlm_ldap (ldap): Bind successful
(0)     [ldap] = updated
(0)     if ((ok || updated) && User-Password) {
(0)     if ((ok || updated) && User-Password)  -> TRUE
(0)     if ((ok || updated) && User-Password)  {
(0)       update {
(0)         control:Auth-Type := LDAP
(0)       } # update = noop
(0)     } # if ((ok || updated) && User-Password)  = noop
(0)     [expiration] = noop
(0)     [logintime] = noop
(0) pap: Converted: &control:Password-With-Header -> &control:SSHA1-Password
(0) pap: Removing &control:Password-With-Header
(0) pap: Normalizing SSHA1-Password from base64 encoding, 32 bytes -> 24 
bytes
(0) pap: WARNING: Auth-Type already set.  Not setting to PAP
(0)     [pap] = noop
(0)   } # authorize = updated
(0) Found Auth-Type = LDAP
(0) # Executing group from file /etc/freeradius/3.0/sites-enabled/default
(0)   Auth-Type LDAP {
rlm_ldap (ldap): Reserved connection (1)
(0) ldap: Login attempt by "yverry"
(0) ldap: Using user DN from request "cn=yverry,ou=people,dc=verry,dc=org"
(0) ldap: Waiting for bind result...
(0) ldap: Bind successful
(0) ldap: Bind as user "cn=yverry,ou=people,dc=verry,dc=org" was successful
rlm_ldap (ldap): Released connection (1)
(0)     [ldap] = ok
(0)   } # Auth-Type LDAP = ok
(0) # Executing section post-auth from file 
/etc/freeradius/3.0/sites-enabled/default
(0)   post-auth {
(0) ldap: EXPAND .
(0) ldap:    --> .
(0) ldap: EXPAND Authenticated at %S
(0) ldap:    --> Authenticated at 2021-07-03 22:44:58
rlm_ldap (ldap): Reserved connection (2)
(0) ldap: Using user DN from request "cn=yverry,ou=people,dc=verry,dc=org"
(0) ldap: Modifying object with DN "cn=yverry,ou=people,dc=verry,dc=org"
(0) ldap: Waiting for modify result...
rlm_ldap (ldap): Released connection (2)
(0)     [ldap] = ok
(0)     if (LDAP-Group == "netops-admin-users") {
(0)     Searching for user in group "netops-admin-users"
rlm_ldap (ldap): Reserved connection (3)
(0)     Using user DN from request "cn=yverry,ou=people,dc=verry,dc=org"
(0)     Checking user object's memberOf attributes
(0)       Performing unfiltered search in 
"cn=yverry,ou=people,dc=verry,dc=org", scope "base"
(0)       Waiting for search result...
(0)     Processing memberOf value 
"cn=netops-admin-users,ou=groups,dc=verry,dc=org" as a DN
(0)       Resolving group DN 
"cn=netops-admin-users,ou=groups,dc=verry,dc=org" to group name
(0)       Performing unfiltered search in 
"cn=netops-admin-users,ou=groups,dc=verry,dc=org", scope "base"
(0)       Waiting for search result...
(0)       Group DN "cn=netops-admin-users,ou=groups,dc=verry,dc=org" 
resolves to name "netops-admin-users"
(0)     User found in group "netops-admin-users". Comparison between 
membership: name (resolved from DN 
"cn=netops-admin-users,ou=groups,dc=verry,dc=org"), check: name
rlm_ldap (ldap): Released connection (3)
(0)     if (LDAP-Group == "netops-admin-users")  -> TRUE
(0)     if (LDAP-Group == "netops-admin-users")  {
(0)       update reply {
(0)         Cisco-AVPair = "shell:priv-lvl=15"
(0)         Juniper-Local-User-Name = "superuser"
(0)       } # update reply = noop
(0)     } # if (LDAP-Group == "netops-admin-users")  = noop
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name)) {
(0)     if (session-state:User-Name && reply:User-Name && 
request:User-Name && (reply:User-Name == request:User-Name))  -> FALSE
(0)     update {
(0)       No attributes updated
(0)     } # update = noop
(0)     [exec] = noop
(0)     policy remove_reply_message_if_eap {
(0)       if (&reply:EAP-Message && &reply:Reply-Message) {
(0)       if (&reply:EAP-Message && &reply:Reply-Message)  -> FALSE
(0)       else {
(0)         [noop] = noop
(0)       } # else = noop
(0)     } # policy remove_reply_message_if_eap = noop
(0)   } # post-auth = ok
(0) Login OK: [yverry/dp9GXbGcUc2JesbaEkahJzQhvDrVUI78] (from client 
localhost port 0)
(0) Sent Access-Accept Id 214 from 127.0.0.1:1812 to 127.0.0.1:59868 
length 0
(0)   Tunnel-Type := VLAN
(0)   Tunnel-Medium-Type := IEEE-802
(0)   Tunnel-Private-Group-Id := "10"
(0)   Cisco-AVPair = "shell:priv-lvl=15"
(0)   Juniper-Local-User-Name = "superuser"
(0) Finished request
Waking up in 4.9 seconds.
(0) Cleaning up request packet ID 214 with timestamp +3
Ready to process requests


oh, and ldap part:


dn: cn=yverry,ou=people,dc=verry,dc=org
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: radiusprofile
cn: yverry


dn: cn=netops,ou=profiles,ou=radius,dc=verry,dc=org
objectClass: radiusObjectProfile
objectClass: top
objectClass: radiusprofile
cn: netops
radiusTunnelMediumType: IEEE-802
radiusTunnelPrivateGroupId: 5
radiusTunnelType: VLAN


dn: cn=netops-admin-users,ou=groups,dc=verry,dc=org
objectClass: groupOfNames
objectClass: radiusprofile
cn: netops-admin-users
member: cn=yverry,ou=people,dc=verry,dc=org
ou: netops-admin-users
radiusProfileDN: cn=netops,ou=profiles,ou=radius,dc=verry,dc=org
radiusTunnelMediumType: IEEE-802
radiusTunnelPrivateGroupId: 5
radiusTunnelType: VLAN


dn: cn=default-vlan,ou=groups,dc=verry,dc=org
objectClass: groupOfNames
cn: default-vlan
member: cn=moi,ou=people,dc=verry,dc=org
ou: netops-admin-users



ldapsearch -x -LLL -H ldap:/// -b cn=yverry,ou=people,dc=verry,dc=org 
memberOf
dn: cn=yverry,ou=people,dc=verry,dc=org
memberOf: cn=netops-admin-users,ou=groups,dc=verry,dc=org


Thank you,
Yann




More information about the Freeradius-Users mailing list