Restrict user only to a NAS

Brian Candler B.Candler at pobox.com
Tue May 10 21:54:08 CEST 2011


On Tue, May 10, 2011 at 01:59:44PM -0300, Marcos TP wrote:
>    Huntgroups I know, but the functionality it provides me not for me.
>    I need the user only has permission to access a NAS, as much as I could
>    with Huntgroups was to restrict the access group, because several
>    groups have access, containing their speed and can not do the search
>    for access group, but by concentrator.

Read the "unlang" documentation; then add some logic in the "authorize"
section of your server config.  You don't even need huntgroups if you're
just authorizing a single NAS-IP-Address:

    if ("%{control:Permitted-NAS}" && "%{control:Permitted-NAS}" != NAS-IP-Address) {
        reject
    }

However I'd suggest you use huntgroups for greater flexibility.

    if ("%{control:Permitted-Huntgroup}" && "%{control:Permitted-Huntgroup}" != Huntgroup-Name) {
        reject
    }

Using this approach, you'd need to add a new attribute in your dictionary,
such as "Permitted-NAS" and "Permitted-Huntgroup" in the examples above (I
just picked these at random)

Then in the radcheck table for the user, set the control attribute:

     Permitted-NAS   :=   1.2.3.4

That's one way to do it anyway.

>    I think the lock should be in the Login table, where I have a field to
>    indicate which NAS that User has access.

Ah, well if you have a custom schema, then you need to show the schema.

If you have a "users" table and you do a join to select the radcheck
attributes, then you could just change the query you're using, limiting it
to only matching the expected NAS-IP-Address or Huntgroup-Name:

    ... AND (permitted_nas = '%{NAS-IP-Address}'
             OR permitted_nas IS NULL)

alternatively:

    ... AND (permitted_huntgroup = '%{Huntgroup-Name}'
             OR permitted_huntgroup IS NULL)

Regards,

Brian.



More information about the Freeradius-Users mailing list