# eap_tls_proxy.cfg
#
# Example Radiator configuration file.
# This very simple file will allow you to get started with proxying of
# EAP TTLS authentication as used by Funk Odyssey.
# With this example, you can proxy handle TTLS requests and send the inner authenbticaiton
# requests to a remote Radius server, which does not need to be TTLS enabled.
#
# We suggest you start simple, prove to yourself that it
# works and then develop a more complicated configuration.
#
# This example will received EAP TTLS requests, unpack the inner authenticaiton requests
# and proxy the inner authenitation to a remote server, based on the realm and
# username of the inner authentication.
#
# Alternatively, you can service the inner requests locally within this server. See
# goodies/eap_ttls.cfg for an example.
#
# In order to test this, you can user the sample test certificates
# supplied with Radiator. For production, you
# WILL need to install a real valid server certificate and
# key for Radiator to use. Runs with openssl on Unix and Windows.
#
# There is a helpful tutorial for testing EAP TLS with Aironet wireless cards
# on Linux at http://www.missl.cs.umd.edu/wireless/eaptls/
# other references for other OSs at http://www.denobula.com/EAPTLS.pdf and
# You can debug EAP on an Aironet AP by telnetting and then :eap_diag1_on or :eap_diag2_on
#
# The example below is configured to work with the example test certificates
# mentioned in http://www.missl.cs.umd.edu/wireless/eaptls/, which were
# installed in /home/mikem/os/linux/cert. The configuration
# may be different for your system.
#
# See radius.cfg for more complete examples of features and
# syntax, and refer to the reference manual for a complete description
# of all the features and syntax.
#
# Requires Net_SSLeay.pm-1.21
# Requires openssl 0.9.7beta or later from www.openssl.org
# Requires Digest-HMAC from CPAN
# Requires Digest-SHA1 from CPAN
#
# You should consider this file to be a starting point only
# $Id: eap_ttls_proxy.cfg,v 1.7 2005/03/16 21:58:47 mikem Exp $
Foreground
#LogStdout
# User a lower trace level in production systems:
Trace 3
PidFile /var/run/radius.pid
DictionaryFile /etc/radiator/dictionary
LogDir /var/log/radius
DbDir /var/db
Identifier SessionDB
DBSource DBI:mysql:database=radiator;host=mysql.example.org
DBUsername radiator
DBAuth mySqlPassword
AddQuery insert into RADONLINE (USERNAME, NASIDENTIFIER, NASPORT, ACCTSESSIONID, TIME_STAMP, FRAMEDIPADDRESS, NASPORTTYPE, SERVICETYPE) values ('%u', '%1', %2, %3, %{Timestamp}, '%{Framed-IP-Address}', '%{NAS-Port-Type}', '%{Service-Type}')
# You will probably want to add other Clients to suit your site,
# one for each NAS you want to work with
Identifier Meru
Secret donttell
DupInterval 0
# if we don't add this and remove it later, we keep going back to the same handler every time
AddToRequest MeruOuterAuth = 1
Identifier CiscoVPN
Secret donttell
DupInterval 2
Identifier CheckPass
#StripFromRequest ConvertedFromEAPMSCHAPV2
# Tell Radiator how to talk to the LDAP server
Host 127.0.0.1
Version 3
BaseDN dc=example,dc=org
UsernameAttr uid
FailureBackoffTime 30
# don't try uid=DEFAULT
NoDefault
PasswordAttr authAuthority
# log to syslog
LogHost syslog.example.org
Facility local2
Trace 3
# You can enable debugging of the Net::LDAP
# module with this:
#Debug 255
Identifier CheckGroupMembership
#StripFromRequest ConvertedFromEAPMSCHAPV2
# Tell Radiator how to talk to the LDAP server
Host 127.0.0.1
Version 3
BaseDN dc=example,dc=org
UsernameAttr uid
FailureBackoffTime 30
# don't try uid=DEFAULT
NoDefault
# we're not checking passwords here, but if this isn't here we get a
# warmning in the logs
PasswordAttr
# Check in LDAP to make sure this user is allowed to use the network.
# This filter returns the DN of the wireless.users group if the user
# is a member of that group. If the results are empty, the
# user is denied.
SearchFilter (&(memberuid=%1)(cn=wireless.users))
# log to syslog
LogHost syslog.example.org
Facility local2
Trace 3
# You can enable debugging of the Net::LDAP
# module with this:
# Debug 255
# keep this one around for VPN server. Folks with a Crypt password will fail an
# LDAP_APS authentication attempt.
Identifier CheckBind
# Tell Radiator how to talk to the LDAP server
Host 127.0.0.1
Version 3
BaseDN dc=example,dc=org
UsernameAttr uid
FailureBackoffTime 30
# don't try uid=DEFAULT
NoDefault
# do a bind as the user instead of trying to compare passwords
ServerChecksPassword
# log to syslog
LogHost syslog.example.org
Facility local2
Trace 3
# You can enable debugging of the Net::LDAP
# module with this:
# Debug 255
# This handler intercepts the inner authentication requests and sends them to another
# server. The remote Radius server does not need to know anything about TTLS.
# try each of the following methods, until something rejects us
AuthByPolicy ContinueUntilReject
AuthBy CheckPass
AuthBy CheckGroupMembership
# This is where the inner EAP-MSCHAPV2 request appears, after being converted to
# a conventional Radius-MSCHAPV2 request. You can proxy or handle locally.
# Since its an odinary Radius request, it can be proxied to non-EAP capable Radius
# servers.
# try each of the following methods, until something rejects us
AuthByPolicy ContinueUntilReject
AuthBy CheckPass
AuthBy CheckGroupMembership
# handle web-based captive-portal wireless requests
# this must be above the 802.1x authentication section in the config file
# enable accounting
AcctLogFileName /var/log/radius/vpn-acct.log
# try each of the following methods, until something rejects us
AuthByPolicy ContinueUntilReject
AuthBy CheckPass
AuthBy CheckGroupMembership
# This is where the PEAP inner request appears
# The username of the inner request will be anonymous, although
# the identity of the EAP request will be the real username we are
# trying to authenticate.
# With the EAP_PEAP_MSCHAP_Convert flag set, the EAP-MSCHAPV2 request is converted
# into conventional Radius-MSCHAPV2 and redespatched to the
# above.
# This tells the PEAP client what types of inner EAP requests
# we will honour
EAPType MSCHAP-V2
# This flag tells EAPType MSCHAP-V2 to convert the inner EAP-MSCHAPV2 request into
# an ordinary Radius-MSCHAPV2 request and redespatch to to a Handler
# that matches ConvertedFromEAPMSCHAPV2=1 (see above)
EAP_PEAP_MSCHAP_Convert 1
# This is where the inner EAP-MSCHAPV2 request appears, after being converted to
# a conventional Radius-MSCHAPV2 request. You can proxy or handle locally.
# Since its now an ordinary Radius MSCHAP request, it can be proxied to non-EAP capable Radius
# servers.
# Proxy to a non-EAP capable server
# try each of the following methods, until something rejects us
AuthByPolicy ContinueUntilReject
AuthBy CheckPass
AuthBy CheckGroupMembership
# The original TTLS request from a NAS will be sent to a matching
# Realm or Handler in the usual way, where it will be unpacked inm the inner authentication
# extracted.
# The inner authentication request will sent again to a matching
# Realm or Handler. The special check item TunnelledByTTLS=1 can be used to select
# a specific handler
# This allows you to select an inner authentication method based on Realm, or the
# fact that they were tunnelled. You can therfore act just as a TTLS server, or also
# act as the AAA/H home server, and authenticate TTLS requests locally or proxy
# them to another remote server based on the realm of the inner authenticaiton request.
# The following handler gets the outer authentication request, authenticates it against the user
# anonymous in a FILE. The inner authentication is then redespatched where it will
# be handled by the clause above
#
# if we don't remove this, we keep going back to the same handler every time
StripFromRequest MeruOuterAuth
# Users must be in this file to get anywhere. IN this example,
# it reques an entry for 'anonymous' which is the username
# in the outer requests
Filename /etc/radiator/users
# EAPType sets the EAP type(s) that Radiator will honour.
# Options are: MD5-Challenge, One-Time-Password
# Generic-Token, TLS, TTLS, PEAP, MSCHAP-V2
# Multiple types can be comma separated. With the default (most
# preferred) type given first
EAPType TTLS,PEAP,LEAP
EAP_LEAP_MSCHAP_Convert
# EAPTLS_CAFile is the name of a file of CA certificates
# in PEM format. The file can contain several CA certificates
# Radiator will first look in EAPTLS_CAFile then in
# EAPTLS_CAPath, so there usually is no need to set both
#EAPTLS_CAFile /etc/radiator/certificates/demoCA/cacert.pem
# EAPTLS_CAPath is the name of a directory containing CA
# certificates in PEM format. The files each contain one
# CA certificate. The files are looked up by the CA
# subject name hash value
# EAPTLS_CAPath
# EAPTLS_CertificateFile is the name of a file containing
# the servers certificate. EAPTLS_CertificateType
# specifies the type of the file. Can be PEM or ASN1
# defaults to ASN1
#EAPTLS_CertificateFile /etc/radiator/certificates/cert-srv.pem
#EAPTLS_CertificateType PEM
EAPTLS_CertificateFile /private/etc/certificates/cert.example.org.crt
EAPTLS_CertificateType PEM
# EAPTLS_PrivateKeyFile is the name of the file containing
# the servers private key. It is sometimes in the same file
# as the server certificate (EAPTLS_CertificateFile)
# If the private key is encrypted (usually the case)
# then EAPTLS_PrivateKeyPassword is the key to descrypt it
#EAPTLS_PrivateKeyFile /etc/radiator/certificates/cert-srv.pem
#EAPTLS_PrivateKeyPassword whatever
EAPTLS_PrivateKeyFile /private/etc/certificates/cert.example.org.key
EAPTLS_PrivateKeyPassword myCertSecret
# EAPTLS_RandomFile is an optional file containing
# randdomness
# EAPTLS_RandomFile /etc/radiator/certificates/random
# EAPTLS_MaxFragmentSize sets the maximum TLS fragemt
# size that will be replied by Radiator. It must be small
# enough to fit in a single Radius request (ie less than 4096)
# and still leave enough space for other attributes
# Aironet APs seem to need a smaller MaxFragmentSize
# (eg 1024) than the default of 2048. Others need even smaller sizes.
EAPTLS_MaxFragmentSize 1000
# EAPTLS_DHFile if set specifies the DH group file. It
# may be required if you need to use ephemeral DH keys.
# EAPTLS_DHFile /etc/radiator/certificates/dh
# Some clients, depending on their configuration, may require you to specify
# MPPE send and receive keys. This _will_ be required if you select
# 'Keys will be generated automatically for data privacy' in the Funk Odyssey
# client Network Properties dialog.
# Automatically sets MS-MPPE-Send-Key and MS-MPPE-Recv-Key
# in the final Access-Accept
AutoMPPEKeys
# You can enable some warning messages from the Net::SSLeay
# module by setting SSLeayTrace to an integer from 1 to 4
# 1=ciphers, 2=trace, 3=dump data
SSLeayTrace 4
# You can configure the User-Name that will be used for the inner
# authentication. Defaults to 'anonymous'. This can be useful
# when proxying the inner authentication. If tehre is a realm, it can
# be used to choose a local Realm to handle the inner authentication.
# EAPAnonymous anonymous@some.other.realm
# Handle requests from the Cisco VPN3000 server
# enable accounting
AcctLogFileName /var/log/radius/vpn-acct.log
# try each of the following methods, until something rejects us
AuthByPolicy ContinueUntilReject
AuthBy CheckBind
AuthBy CheckGroupMembership