Thanks Fabrice!  It might take me a while to get this all going.  We just
hit the end of the school year, and so now there's a long list of things to
do, and I think it will take me a bit to work through this process.

Joshua Nathan
*IT Supervisor*
Black Forest Academy

p: +49 (0) 7626 9161 630 m: +49 (0) 152 3452 0056
a:
w: Hammersteiner Straße 50, 79400 Kandern
bfacademy.de




On Thu, Jun 14, 2018 at 7:22 PM Fabrice Durand via PacketFence-users <
[email protected]> wrote:

> Hello Josh,
>
> Le 2018-06-14 à 03:42, Josh Nathan via PacketFence-users a écrit :
>
> Hi Fabrice,
>
> For what it's worth, I've found the same results on both PacketFence 6.4
> and 8.0.
>
> And yes, I did/do have packetfence-local-auth enabled.
>
> Our goal is to use an external RADIUS server for authentication.
>
> Only for bfacademy.de, right ?
>
>   However, the RADIUS server doesn't store the realm identification as
> part of the username, so I can't send "[email protected]", I must
> only send "josh.nathan" to the RADIUS server as the username.
>
> Which one, PacketFence or the cloud based RADIUS server ?
>
>   However, since this RADIUS server is cloud-based, it will only accept
> proxying the entire EAP conversation, and rejects he authentication request
> if I don't let the inner-tunnel do the EAP as well.
>
> You need to proxy the entire radius request based on the realm.
>
> What you can do apply this PR (
> https://github.com/inverse-inc/packetfence/pull/3278).
>
> cd /usr/local/pf
> curl https://github.com/inverse-inc/packetfence/pull/3278.diff | patch
> -p1 --dry-run
>
> If no conflicts
>
> curl https://github.com/inverse-inc/packetfence/pull/3278.diff | patch -p1
>
> mv conf/radiusd/proxy.conf.inc.example conf/radiusd/proxy.conf.inc
>
> Restart PacketFence and add your cloud Radius configuration as a Radius
> authentication source.
>
> Next in the Realm configuration add your realm and associate it to your
> Radius authentication source.
>
> And restart radius on the PacketFence server.
>
> With that configuration all authentication for the realm bfacademy.de
> will be forwarded to the remote radius server and the other will be
> authenticate locally.
>
> Let me know if works and btw let me know if you have an issue with the
> code.
>
> Regards
> Fabrice
>
>   The problem I ran into was that when stripping the domain from the
> username, it broke the EAP encryption, always resulting in authentication
> failure.  If instead, the user withholds the domain information (ie. only
> enters "josh.nathan" into their device), this allows the EAP to maintain
> its integrity.
>
> This, of course, opened up other issues.  PacketFence wouldn't proxy the
> connection if the realm wasn't set to match the Proxy realm ("bfacademy.de").
> In order to get PacketFence to do the proxy, I had to change where
> PacketFence defaults to the realm "LOCAL" to my desired proxy realm.  And
> now I've run into the issue that if the realm is not set to "LOCAL", it's
> not trying the SQL database, but as it loops through, it keeps seeing the
> realm as what I set it to be ("bfacademy.de"), and then skips the local
> database.
>
> We'll be looking to upgrade to PacketFence 8.x in the relatively near
> future, but for now we're still on 6.4.  Here's what our packetfence-tunnel
> config looks like:
>
> # -*- text -*-
> ######################################################################
> #
> #       This is a virtual server that handles *only* inner tunnel
> #       requests for EAP-TTLS and PEAP types.
> #
> #       $Id: c250afa30a78fe9ff7a97b6c9b8a7c3a419a6946 $
> #
> ######################################################################
>
> server packetfence-tunnel {
>
>
> #  Authorization. First preprocess (hints and huntgroups files),
> #  then realms, and finally look in the "users" file.
> #
> #  The order of the realm modules will determine the order that
> #  we try to find a matching realm.
> #
> #  Make *sure* that 'preprocess' comes before any realm if you
> #  need to setup hints for the remote radius server
> authorize {
>         #
>         #  Take a User-Name, and perform some checks on it, for spaces and
> other
>         #  invalid characters.  If the User-Name appears invalid, reject
> the
>         #  request.
>         #
>         #  See policy.d/filter for the definition of the filter_username
> policy.
>         #
>         filter_username
>
>
>         #
>         #  If the users are logging in with an MS-CHAP-Challenge
>         #  attribute for authentication, the mschap module will find
>         #  the MS-CHAP-Challenge attribute, and add 'Auth-Type := MS-CHAP'
>         #  to the request, which will cause the server to then use
>         #  the mschap module for authentication.
>         mschap
>
>         #
>         #  If you are using multiple kinds of realms, you probably
>         #  want to set "ignore_null = yes" for all of them.
>         #  Otherwise, when the first style of realm doesn't match,
>         #  the other styles won't be checked.
>         #
>         #  Note that proxying the inner tunnel authentication means
>         #  that the user MAY use one identity in the outer session
>         #  (e.g. "anonymous", and a different one here
>         #  (e.g. "[email protected]").  The inner session will then be
>         #  proxied elsewhere for authentication.  If you are not
>         #  careful, this means that the user can cause you to forward
>         #  the authentication to another RADIUS server, and have the
>         #  accounting logs *not* sent to the other server.  This makes
>         #  it difficult to bill people for their network activity.
>         #
>         suffix
>         ntdomain
>
>         %%multi_domain%%
>         #
>         #  The "suffix" module takes care of stripping the domain
>         #  (e.g. "@example.com") from the User-Name attribute, and the
>         #  next few lines ensure that the request is not proxied.
>         #
>         #  If you want the inner tunnel request to be proxied, delete
>         #  the next few lines.
>         #
>         update control {
> ###             &Proxy-To-Realm := LOCAL
>                 &Proxy-To-Realm := "bfacademy.de"
>         }
>
>         #
>         #  This module takes care of EAP-MSCHAPv2 authentication.
>         #
>         #  It also sets the EAP-Type attribute in the request
>         #  attribute list to the EAP type from the packet.
>         #
>         #  The example below uses module failover to avoid querying all
>         #  of the following modules if the EAP module returns "ok".
>         #  Therefore, your LDAP and/or SQL servers will not be queried
>         #  for the many packets that go back and forth to set up TTLS
>         #  or PEAP.  The load on those servers will therefore be reduced.
>         #
>         eap {
>                 ok = return
>         }
>
>         #
>         #  Read the 'users' file
>         #files
>
>         # Check if PacketFence local (SQL) authentication is enabled.
>         # Run the packetfence-local-auth policy if it is.
>         rewrite_called_station_id
>
>         # Uncomment the following line to enable local PEAP authentication
>         packetfence-local-auth
>
>
>
>         #
>         #  The ldap module reads passwords from the LDAP database.
>         #ldap
>
>
>
>         #
>         #  If no other module has claimed responsibility for
>         #  authentication, then try to use PAP.  This allows the
>         #  other modules listed above to add a "known good" password
>         #  to the request, and to do nothing else.  The PAP module
>         #  will then see that password, and use it to do PAP
>         #  authentication.
>         #
>         #  This module should be listed last, so that the other modules
>         #  get a chance to set Auth-Type for themselves.
>         #
>         pap
> }
>
>
> #  Authentication.
> #
> #
> #  This section lists which modules are available for authentication.
> #  Note that it does NOT mean 'try each module in order'.  It means
> #  that a module from the 'authorize' section adds a configuration
> #  attribute 'Auth-Type := FOO'.  That authentication type is then
> #  used to pick the appropriate module from the list below.
> #
>
> #  In general, you SHOULD NOT set the Auth-Type attribute.  The server
> #  will figure it out on its own, and will do the right thing.  The
> #  most common side effect of erroneously setting the Auth-Type
> #  attribute is that one authentication method will work, but the
> #  others will not.
> #
> #  The common reasons to set the Auth-Type attribute by hand
> #  is to either forcibly reject the user, or forcibly accept him.
> #
> authenticate {
>         #
>         #  PAP authentication, when a back-end database listed
>         #  in the 'authorize' section supplies a password.  The
>         #  password can be clear-text, or encrypted.
>         Auth-Type PAP {
>                 pap
>         }
>
>         #
>         #  Most people want CHAP authentication
>         #  A back-end database listed in the 'authorize' section
>         #  MUST supply a CLEAR TEXT password.  Encrypted passwords
>         #  won't work.
>         Auth-Type CHAP {
>                 chap
>         }
>
>         #
>         #  MSCHAP authentication
>         Auth-Type MS-CHAP {
>                 packetfence     # increment the StatsD counter
>                 if(PacketFence-Domain) {
>                         chrooted_mschap
>                 }
>                 else {
>                         mschap
>                 }
>         }
>
>
>         # Uncomment it if you want to use ldap for authentication
>         #
>         # Note that this means "check plain-text password against
>         # the ldap database", which means that EAP won't work,
>         # as it does not supply a plain-text password.
>         #
>         #  We do NOT recommend using this.  LDAP servers are databases.
>         #  They are NOT authentication servers.  FreeRADIUS is an
>         #  authentication server, and knows what to do with authentication.
>         #  LDAP servers do not.
>         #
> #               Auth-Type LDAP {
> #                       ldap
> #               }
>
>         #
>         #  Allow EAP authentication.
>         eap
> }
>
> ######################################################################
> #
> #       There are no accounting requests inside of EAP-TTLS or PEAP
> #       tunnels.
> #
> ######################################################################
>
>
> #  Session database, used for checking Simultaneous-Use. Either the radutmp
> #  or rlm_sql module can handle this.
> #  The rlm_sql module is *much* faster
> session {
>         radutmp
>
>         #
>         #  See "Simultaneous Use Checking Queries" in sql.conf
>         #       sql
> }
>
>
> #  Post-Authentication
> #  Once we KNOW that the user has been authenticated, there are
> #  additional steps we can take.
> #
> #  Note that the last packet of the inner-tunnel authentication
> #  MAY NOT BE the last packet of the outer session.  So updating
> #  the outer reply MIGHT work, and sometimes MIGHT NOT.  The
> #  exact functionality depends on both the inner and outer
> #  authentication methods.
> #
> #  If you need to send a reply attribute in the outer session,
> #  the ONLY safe way is to set "use_tunneled_reply = yes", and
> #  then update the inner-tunnel reply.
> post-auth {
>         #
>         rest
>         if (updated || ok || noop) {
>                 request-timing
>                 -sql
>         } else {
>                 request-timing
>                 -sql_reject
>         }
>
>         #
>         #  Un-comment the following if you have set
>         #  'edir_account_policy_check = yes' in the ldap module
> sub-section of
>         #  the 'modules' section.
>         #
>         #ldap
>
>
>
>         #
>         #  These attributes are for the inner session only.
>         #  They MUST NOT be sent in the outer reply.
>         #
>         #  If you uncomment the previous block and leave
>         #  this one commented out, WiFi WILL NOT WORK,
>         #  because the client will get two MS-MPPE-keys
>         #
>         update outer.session-state {
>                 &MS-MPPE-Encryption-Policy !* ANY
>                 &MS-MPPE-Encryption-Types !* ANY
>                 &MS-MPPE-Send-Key !* ANY
>                 &MS-MPPE-Recv-Key !* ANY
>                 &Message-Authenticator !* ANY
>                 &EAP-Message !* ANY
>                 &Proxy-State !* ANY
>         }
>
>         #
>         #  Access-Reject packets are sent through the REJECT sub-section
> of the
>         #  post-auth section.
>         #
>         #  Add the ldap module name (or instance) if you have set
>         #  'edir_account_policy_check = yes' in the ldap module
> configuration
>         #
>         Post-Auth-Type REJECT {
>                 request-timing
>                 # log failed authentications in SQL, too.
>                 -sql_reject
>                 attr_filter.access_reject
>
>                 #
>                 #  Let the outer session know which module failed, and why.
>                 #
>                 update outer.session-state {
>                         &Module-Failure-Message :=
> &request:Module-Failure-Message
>                 }
>         }
> }
>
> #
> #  When the server decides to proxy a request to a home server,
> #  the proxied request is first passed through the pre-proxy
> #  stage.  This stage can re-write the request, or decide to
> #  cancel the proxy.
> #
> #  Only a few modules currently have this method.
> #
> pre-proxy {
>         #  Uncomment the following line if you want to change attributes
>         #  as defined in the preproxy_users file.
>         #       files
>
>         #  Uncomment the following line if you want to filter requests
>         #  sent to remote servers based on the rules defined in the
>         #  'attrs.pre-proxy' file.
>         #       attr_filter.pre-proxy
>
>         #  If you want to have a log of packets proxied to a home
>         #  server, un-comment the following line, and the
>         #  'detail pre_proxy_log' section, above.
>         #       pre_proxy_log
> }
>
> #
> #  When the server receives a reply to a request it proxied
> #  to a home server, the request may be massaged here, in the
> #  post-proxy stage.
> #
> post-proxy {
>
>         #  If you want to have a log of replies from a home server,
>         #  un-comment the following line, and the 'detail post_proxy_log'
>         #  section, above.
>         #       post_proxy_log
>
>         #  Uncomment the following line if you want to filter replies from
>         #  remote proxies based on the rules defined in the 'attrs' file.
>         #       attr_filter.post-proxy
>
>         #
>         #  If you are proxying LEAP, you MUST configure the EAP
>         #  module, and you MUST list it here, in the post-proxy
>         #  stage.
>         #
>         #  You MUST also use the 'nostrip' option in the 'realm'
>         #  configuration.  Otherwise, the User-Name attribute
>         #  in the proxied request will not match the user name
>         #  hidden inside of the EAP packet, and the end server will
>         #  reject the EAP request.
>         #
>         eap
> }
>
> } # inner-tunnel server block
>
>
> Joshua Nathan
> *IT Supervisor*
> Black Forest Academy
>
> p: +49 (0) 7626 9161 630 m: +49 (0) 152 3452 0056
> a:
> w: Hammersteiner Straße 50, 79400 Kandern
> bfacademy.de
>
>
>
>
>
> On Wed, Jun 13, 2018 at 4:56 PM Fabrice Durand via PacketFence-users <
> [email protected]> wrote:
>
>> Hello Joshua,
>>
>> i don't know your setup but what exactly are you trying to do ?
>>
>> Based on the realm you want to forward to another radius server ?
>>
>> Did you enabled packetfence-local-auth in Freeradius ? (
>> https://packetfence.org/doc/PacketFence_Installation_Guide.html#_eap_guest_authentication_on_email_sponsor_and_sms_registration
>> )
>>
>>
>> Regards
>>
>> Fabrice
>>
>>
>>
>> Le 2018-06-13 à 09:03, Josh Nathan via PacketFence-users a écrit :
>>
>> Hello,
>>
>> So, I'm running into trouble with 802.1X authentication...
>>
>> When users include the domain name when authentication, EAP breaks with
>> the strip username command.  If they don't include the domain name, the
>> only way I've found to get PacketFence to perform the proxy is by forcing
>> the domain (inserting "&Proxy-To-Realm := "bfacademy.de" into the
>> authorize section packetfence-tunnel).  However, if I force the domain,
>> then it doesn't seem to search the local SQL database in the event that
>> we've created a guest account.  Is there a documented way to do both?  We
>> do need the 802.1X proxied to another RADIUS server.
>>
>> Thanks,
>>
>> Joshua Nathan
>> *IT Supervisor*
>> Black Forest Academy
>>
>> p: +49 (0) 7626 9161 630 m: +49 (0) 152 3452 0056
>> a:
>> w: Hammersteiner Straße 50, 79400 Kandern
>> bfacademy.de
>>
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>>
>>
>>
>> _______________________________________________
>> PacketFence-users mailing 
>> [email protected]https://lists.sourceforge.net/lists/listinfo/packetfence-users
>>
>>
>> --
>> Fabrice [email protected] ::  +1.514.447.4918 (x135) ::  
>> www.inverse.ca
>> Inverse inc. :: Leaders behind SOGo (http://www.sogo.nu) and PacketFence 
>> (http://packetfence.org)
>>
>>
>> ------------------------------------------------------------------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> _______________________________________________
>> PacketFence-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/packetfence-users
>>
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>
>
>
> _______________________________________________
> PacketFence-users mailing 
> [email protected]https://lists.sourceforge.net/lists/listinfo/packetfence-users
>
>
> --
> Fabrice [email protected] ::  +1.514.447.4918 (x135) ::  www.inverse.ca
> Inverse inc. :: Leaders behind SOGo (http://www.sogo.nu) and PacketFence 
> (http://packetfence.org)
>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> PacketFence-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/packetfence-users
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
PacketFence-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/packetfence-users

Reply via email to