Inserting and/or replacing reply attributes on a proxy request

Jarrod Sayers jarrod at netleader.com.au
Sun Oct 15 23:43:18 CEST 2006


Thanks Peter, any tips on how you have done this?  I'll look at  
upgrading a development box to head today if it means I can resolve  
this problem.

Jarrod.

On 16/10/2006, at 12:45 AM, Peter Nixon wrote:

> This is trivial to do on CVS head (We are using these features in  
> production).
> 1.1.3 is pretty limited in this regard..
>
> Cheers
>
> Peter
> On Sun 15 Oct 2006 15:23, Jarrod Sayers wrote:
>> The concept is close, but the effect I need is silently add or  
>> replace
>> these attributes from any proxy reply.  While I am slightly concerned
>> that a realm neighbor would have the power to alter what tunnel group
>> they land in, I am also concerned about proxy replies that come back
>> without those variables.  Reason being is without those variables,
>> that username and realm pair can associate to any SSID where
>> FreeRADIUS is used to check their credentials.
>>
>> Picture Cisco Aironet 1200's with multiple SSID's, all pointing back
>> to a single instance of FreeRADIUS.  The access point is relying on
>> the RADIUS reply to determine if the user should be moved to another
>> SSID and without it, assumes the one they are attempting to  
>> connect to
>> is correct.
>>
>> Jarrod.
>>
>> On 15/10/2006, at 2:43 PM, Owen DeLong wrote:
>>> Seems to me that you need to know which RADIUS box you sent the
>>> proxy request
>>> to and which destinations it is allowed to return.  Then, you should
>>> be able to map
>>> any responses which don't match those tuples to proxy-reject with an
>>> error
>>> indicating that the proxy returned nefarious content.
>>>
>>> Perhaps, however, I simply am not understanding the problem  
>>> statement.
>>>
>>> Owen
>>>
>>> On Oct 14, 2006, at 9:59 PM, Jarrod Sayers wrote:
>>>> Hi,
>>>>
>>>> I have a FreeRADIUS 1.1.2 box which its only job in life is to
>>>> proxy requests based on realms, i.e., no local authentication is
>>>> done.  One of the realms is internal to the organisation (lets call
>>>> that internal.org.com.au) and I trust the variables being returned,
>>>> however I have no control over one external realm (lets call that
>>>> some.other.org.net.au) and the default realm.  The FreeRADIUS box
>>>> is used to proxy wireless requests which relies on the following
>>>> variables to dump users into their particular tunnel groups:
>>>>
>>>> 	Tunnel-Type:1 => VLAN
>>>> 	Tunnel-Medium-Type:1 => IEEE-802
>>>> 	Tunnel-Private-Group-Id:1 => 1234
>>>>
>>>> What I am trying to accomplish is to have replies from a certain
>>>> realm forced to be returned with set values either adding them in
>>>> if they are missing, or replacing them is they are not the same.
>>>> So, if the request is proxied to a trusted source then don't alter
>>>> the reply, though if its proxied to an external realm, force the
>>>> Tunnel-Private-Group-Id:1 attribute to be 1234, yet if its proxied
>>>> to the default realm, use 4321 instead.
>>>>
>>>> I had a go at this using the exec clause and had some success in
>>>> adding variables if they didn't exist in the reply, but it wouldn't
>>>> replace existing ones:
>>>>
>>>> 	modules {
>>>> 	  ...
>>>>
>>>> 	  exec vlan_assignment {
>>>> 	    wait = yes
>>>> 	    program = ${confdir}/vlan.sh
>>>> 	    input_pairs = proxy-request
>>>> 	    output_pairs = proxy-reply
>>>> 	    packet_type = Access-Accept
>>>> 	  }
>>>> 	}
>>>>
>>>> 	post-proxy {
>>>> 	  vlan_assignment
>>>> 	  ...
>>>> 	}
>>>>
>>>> The associated script that it ran:
>>>>
>>>> 	fruitbox# cat vlan.sh
>>>> 	#!/bin/sh
>>>>
>>>> 	# Set defaults.
>>>> 	TunnelType="VLAN"
>>>> 	TunnelMediumType="IEEE-802"
>>>> 	TunnelPrivateGroupId="200"
>>>>
>>>> 	# Only alter Wireless-802.11 requests.
>>>> 	if [ "${NAS_PORT_TYPE}" = "Wireless-802.11" -a "${REALM}" !=
>>>> "internal.org.com.au" ]; then
>>>> 	  # Determine VLAN to be used.
>>>> 	  if [ "${REALM}" = "some.other.org.net.au" ]; then
>>>> 	    # Force user into specific tunnel group.
>>>> 	    TunnelPrivateGroupId="1234"
>>>> 	  elif [ "${REALM}" = "DEFAULT" ]; then
>>>> 	    # Force user into specific tunnel group.
>>>> 	    TunnelPrivateGroupId="4321"
>>>> 	  fi
>>>>
>>>> 	  # Return actual VLAN assignment.
>>>> 	  echo "Tunnel-Type:1 = ${TunnelType}"
>>>> 	  echo "Tunnel-Medium-Type:1 = ${TunnelMediumType}"
>>>> 	  echo "Tunnel-Private-Group-Id:1 = \"${TunnelPrivateGroupId}\""
>>>> 	fi
>>>>
>>>> 	exit 0
>>>> 	fruitbox#
>>>>
>>>> Allowing these variables to pass though from untrusted sources may
>>>> allow a user to be placed in another organisations tunnel group
>>>> which I cannot allow.
>>>>
>>>> Any help or ideas appreciated :)
>>>>
>>>> Jarrod.
>>>> -List info/subscribe/unsubscribe? See
>>>> http://www.freeradius.org/list/users.html
>>>
>>> -
>>> List info/subscribe/unsubscribe? See
>>> http://www.freeradius.org/list/users.html
>>
>> -
>> List info/subscribe/unsubscribe? See
>> http://www.freeradius.org/list/users.html
>
> -- 
>
> Peter Nixon
> http://www.peternixon.net/
> PGP Key: http://www.peternixon.net/public.asc
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/ 
> users.html




More information about the Freeradius-Users mailing list