(RADIATOR) Radiator setup for dual authentication

Jonathan K jonathan_k at iinet.net.au
Tue Apr 5 22:12:40 CDT 2005


Hi,

We've got a bit of a tricky setup here which we've solved by using a 
ReplyHook but i'd like to run it by the list to see if it's the best 
method for what we're trying to achieve.

We run a managed platform that handles authentication via radiator and a 
mysql backend, we have a new customer coming online who would like to 
have control over their user base via proxied RADIUS requests. This is 
all good, but because of the method that the client is using to 
synchronise their data from us, we need to also authenticate the user 
using our normal method (local sql database). The flow we are looking 
for is as follows:

1. Receive Access-Request from client
2. Proxy request to downstream RADIUS server
3a. If downstream server responds with Access-Reject, send Access-Reject 
to client
3b. If downstream server responds with Access-Accept, auth from local 
sql server
4a. If local auth fails, send Access-Reject to client
4b. If local auth succeeds, send Access-Accept to client


I thought this would be a simple matter of having a handler with 
ContinueWhileAccept and two consecutive AuthBy's but what we've found 
when using this method is that Radiator sends duplicate packets back to 
the requesting NAS (in our testing, radpwtst). While radpwtst only 
receives the one packet (tcpdump shows that two are being sent), we're 
not sure (and don't want to test) how a NAS will respond to this, or 
what will happen if the wrong AuthBy sends the first reply, which 
doesn't have the correct info.

Basically this is what happens:

1. Radiator gets Access-Request
2. First AuthBy (RADIUS) executes and proxies request to remote server
3. Second AuthBy (SQL) executes
4. Second AuthBy succeeds and sends Access-Accept back to client
5. Radiator receives reply from remote server and proxies Access-Accept 
back to client

We've managed to get the required behaviour by setting the Synchronous 
flag but this isn't acceptable for our installation, we've also 
experimented with  the Fork and Synchronous flags together which 
produces the same duplicate reply problem.

What we've done is written an external hook based on 
"AllocateIPAddressOnReplyFromProxy" which evaluates the remote servers 
response and goes off and runs our local AuthBy then allocates the IP in 
the normal way or rejects the client. It does what we want.

We have:

<Handler /matches_for_customer/>
	AuthByPolicy    ContinueWhileReject
	AuthBy          CustomerAuth
</Handler>

<AuthBy RADIUS>
	Identifier CustomerAuth
	<Host 111.111.111.111>
		secret	foo
	</Host>
	# Reply hook evaluates response from remote server
	# if success then points to our regular AuthBy SQL
	# then assigns address
	ReplyHook file:"%D/customer.hook"
</AuthBy>


So my question is, is this an optimal way of dealing with this? Can 
anyone see any room for improvement in our model? This customer has 
about 15,000 clients and we are looking at this solution for another 
client with a number of clients in the 1000's and need to know it scales.

Thanks in advance.

Jon

--
Archive at http://www.open.com.au/archives/radiator/
Announcements on radiator-announce at open.com.au
To unsubscribe, email 'majordomo at open.com.au' with
'unsubscribe radiator' in the body of the message.


More information about the radiator mailing list