<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 2.6.10) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dekok-radext-proxy-load-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="Proxy Load">Proxy Load Balancing in the Remote Authentication Dial In User Service (RADIUS) Protocol</title>
    <seriesInfo name="Internet-Draft" value="draft-dekok-radext-proxy-load-00"/>
    <author initials="A." surname="DeKok" fullname="Alan DeKok (Ed)">
      <organization>InkBridge Networks</organization>
      <address>
        <email>aland@inkbridgenetworks.com</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>Internet</area>
    <workgroup>RADEXT Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 51?>

<t>This document describes a few methods which can assist operators of
proxies in the in the Remote Authentication Dial In User Service
(RADIUS) Protocol.  The methods described here improve proxy load
balancing and rate limiting, without requiring any changes to the
underlying protocol.  While these methods have been shown to work in
practice, there has been insufficient experience with them to publish
this document either as standards track, or as a best current
practice.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dekok-radext-proxy-load/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        RADEXT Working Group mailing list (<eref target="mailto:radext@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/radext/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/radext/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/freeradius/proxy-bcp.git"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Remote Authentication Dial In User Service (RADIUS) protocol
defines proxying in <xref section="2.3" sectionFormat="comma" target="RFC2865"/>.  As discussed in
PROXY-BCP, there has been little progress in defining load-balancing
methods for proxying.  This document describes a number of methods
which have been shown to work, and do not require protocol changes.</t>
      <t>However, there has been insufficient experience with them to publish
this document either as standards track, or as a best current
practice.</t>
      <t>The following sections outline the underlying problems, and then the
specific methods which can be used to address those problems.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>Proxy</t>
      <ul empty="true">
        <li>
          <t>A RADIUS proxy as per <xref target="RFC2865"/>.</t>
          <t>Unless specifically mentioned, any discussion of proxying is assumed
to apply to all possible RADIUS packet Codes.</t>
          <t>Similarly, umless specifically mentioned, any discussion of proxying
is assumed to apply to all possible RADIUS transport protocols.</t>
        </li>
      </ul>
      <t>Home Server</t>
      <ul empty="true">
        <li>
          <t>A RADIUS server which authenticates the user, or performs the final
storage of accounting information.  i.e. The authoriative server
which does not proxy packets to any other destination.</t>
        </li>
      </ul>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
    </section>
    <section anchor="deterministic-load-balancing-to-home-servers">
      <name>Deterministic Load Balancing to Home Servers</name>
      <t>The RADIUS protocol does not define a way to deterministically load
balance packets across a set of Home Servers.  This section describes
a method which can do that, even when the set of active Home Servers
changes dynamically.</t>
      <t>The method outlined here is suitable only when a server is sending
packets to one or more Home Servers.  It MUST NOT be used then the
next hop is another proxy.  The method outlined here can also be used
by RADIUS clients.</t>
      <t>The method outlined here is also suitable only when the Access-Request
packets contain a State attribute, such as with EAP or any
challenge-response mechanism.</t>
      <section anchor="problem">
        <name>Problem</name>
        <t>In some cases, authentication requires one or more round trips of
Access-Request / Access-Challenge, before any Access-Accept or
Access-Reject is seen.  The challenge in a proxy environment is to
deterministically send all packets for one session to the same Home
Server.  When packets are for one session are sent to different Home
Servers, authentication is unlikely to succeed.</t>
        <t>The above requirement stands in conflict with the need to load-balance
requests across Home Servers.  While this load balancing can be done
via hashing the contents of User-Name or Calling-Station-Id, there is
a problem when set of Home Servers changes over time.</t>
        <t>This problem can largely be addressed by using consistent hashing for
Home Servers, but a naive consistent hashing is unaware of RADIUS
protocol issues.  The result of any consistent hashing will still
result in packets for one authentication session being sent to
different Home Servers, where authentication will fail.</t>
      </section>
      <section anchor="solution">
        <name>Solution</name>
        <t>TBD - full details.</t>
        <ul spacing="normal">
          <li>
            <t>Each Home Server has a statically configured and unique 8-bit identifier</t>
          </li>
          <li>
            <t>On receiving the initial Access-Request (without State), the proxy
does load balancing via some method.</t>
          </li>
          <li>
            <t>On receiving the Access-Challenge with a State attribute, it
increases the size of the State attribute by one octet, and adds the
unique Home Server identifier.  It then returns the response as normal</t>
          </li>
          <li>
            <t>On receiving an Access-Request with State, it removes the Home
Server Identifier, and then sends the modified request to the Home
Server.</t>
          </li>
          <li>
            <t>If the Home Server is down, then depending on the configurtion, the
proxy either discards the packet, or sends a synthesized
Access-Reject, or sends a Protocol-Error.</t>
          </li>
        </ul>
        <t>This method does not offer any different experience for the supplicant
or user being authenticated.  There is no magic way to force
authentication to succeed when the relevant Home Server is down.</t>
        <t>However, this method can decrease the load on the Home Servers
substantially when a failure occurs.  i.e. if there are 4 home servers
and one goes down, the load on the remaining ones will increase by
25%, all of which is useless traffic.  If there are two home servers,
then the load on the remaining one will double, at least temporarily.</t>
        <t>The cost here is a small amount of configuration, and a tiny amount of
extra work on the proxy.</t>
        <t>The benefit of this method is that less useless work is done, and
better decisions are made based on actual network status, instead of
on ad hoc guesses.  The result is a network which is more stable.</t>
      </section>
    </section>
    <section anchor="rate-limiting-high-volume-access-requests">
      <name>Rate Limiting High Volume Access-Requests</name>
      <t>Existing standards suggest that RADIUS clients rate limit their
requests (<xref section="2.2.2" sectionFormat="comma" target="RFC5080"/>).  Similarly, (802.1X) suggests
that supplicants and authenticators rate-limit the packets that they
send.  Unfortunately, experience shows that rate limiting is often not
performed.</t>
      <section anchor="problem-1">
        <name>Problem</name>
        <t>In practice, operators see one of two behaviors with badly behaved
supplicants and clients.  Either the client sends thousands of
Access-Requests a second without waiting for a response, or the client
sends an Access-Request immediately after receiving an Access-Reject.
These packets are nearly always for one particular user session, and
other user sessions on the same client generally behave correctly.</t>
        <t>This high rate of packets causes unnecessary load on RADIUS servers,
proxies, and proxy chains such as <xref target="EDUROAM"/> and <xref target="OPENROAMING"/>.  In
some cases, these problematic packets will be the majority of packets
seen by a RADIUS server.</t>
        <t>The cost of managing these packets is not small.  Proxies can apply
complex policies to each packet, which is expensive.  Home Servers can
apply complex policies, including multiple database lookups.</t>
        <t>As such, these packets increase the load on the entire RADIUS
infrastructure for no possible benefit.  It is therefore useful to
detect and block these packets, using a method which is both cheap and
has minimal impact on other users / packets / sessions which are
behaving properly.</t>
      </section>
      <section anchor="existing-solutions">
        <name>Existing Solutions</name>
        <t>The solution until now has been to simply block the offending RADIUS
client completely.  While this step protects the server which is
receiving those packets, it has unfortunate side effects.</t>
        <t>The client being blocked may be an Access Point (AP) which is managing
other user sessions.  Or, the client being blocked may be a RADIUS
proxy.  In either case, this blocking will negatively effect users are
are behaving properly.</t>
        <t>In addition, this blocking is generally added manually, and removed
manually.  This manual blocking is expensive and slow.  It relies on
people to notice problemn situations, and take action on human time
frames</t>
        <t>In some cases it is done automatically, based on packet rates.  This
automatic blocking cannot generally distinguish between high rates of
normal traffic due to an unusual situation (e.g. power outage and
restoral), or high rates due to one misbehaving supplicant or client.</t>
        <t>The proposal outlined below solves these issues.</t>
      </section>
      <section anchor="rate-limiting">
        <name>Rate Limiting</name>
        <t>The rate limiting method proposed here depends on a few key pieces of
information, and being performed at particular stages of a server
which processes packets.  This server is typically a proxy, but it
could also be a Home Server.</t>
        <t>The discussion below focusses on Access-Request packets, and
Access-Reject responses.  However, similar rate limiting could be
performed for Access-Accept responses, or Accounting-Request packets.
Since the main problem seen in practice is with Access-Request /
Access-Reject, those packets are what we focus on here.</t>
        <section anchor="utility">
          <name>Utility</name>
          <t>This method does not require protocol changes, and therefore does not
require coordination with other clients or servers.</t>
          <t>This method also has no negative interactions with itself.  Multiple
proxies can implement the same method, and there will be no negative
affects.  In short, if any one proxy implements this method, then all
"next hop" proxies and home servers are protected, whether or not they
implement this method.</t>
          <t>This method also has no effect on well-behaved sessions.  Sessions
which behave normally do not trigger the rate limiting method.
Sessions which are rejected and then rate-limit their own future
requests are also unaffected.</t>
          <t>The main cost to this method is one lookup for each Access-Request
packet received by a server.  Where the packet will not be
rate-limited, no further action is taken.  Additional work is only
performed if the the Access-Request packet is to be rate limited, or
where the server is processing an Access-Reject.</t>
        </section>
        <section anchor="algorithm">
          <name>Algorithm</name>
          <t>The rate limiting method is essentially a negative cache, with
extensions that allow it to be applied to RADIUS; to ensure that the
cache does not negatively affect normal traffic; and to allow it to be
managed within a RADIUS environment.</t>
          <t>The rate limit algorithm is performed as follows, via the pseudo-code
outlined below:</t>
          <ul empty="true">
            <li>
              <t>When receiving an Access-Request, look up the packet in the cache
based on a Key (see below).  The Key is typically either
Calling-Station-ID, User-Name, or some combination thereof.</t>
              <ul empty="true">
                <li>
                  <t>If there is no cache entry for that key, the server continues
processing the packet as normal.  No further changes to the cache
are made.</t>
                  <t>If the cache entry indicates that rate limiting is not being
performed, the server continues processing the packet as normal.
No further changes to the cache are made.</t>
                  <t>Otherwise, there is a cache entry for that key, and rate limiting
is being performed for it.  The system updates timers and counters
associated with the entry, and return the cached response.  This
response is typically an Access-Reject.  No further processing of
the packet is performed.</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>When receiving an Access-Reject, either create or update an entry in
the cache, based on the key which is taken from the Access-Request.</t>
              <ul empty="true">
                <li>
                  <t>When creating a cache entry, the cache entry contains both the
Access-Reject, along with various counters and timers which are
discussed below.  The initial state of the cache entry is set to
not rate limit input packets.  The response is then processed as
normal through the server, typically resulting in the response
being sent to the RADIUS client.</t>
                  <t>When updating a cache entry, the counters and timers are updated.
If a configurable threshhold is reached, then the cache entry is
set enable rate limiting.  The response is then processed as normal
through the server, typically resulting in the response being sent
to the RADIUS client.</t>
                  <t>Note that these checks are performed only for the initial
Access-Reject response.  If the server receives identical
retransmissions of one Access-Reject response, then those
retransmissions do not affect the cache in any way.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>As an extension to the above algorithm, the cache can also track the
number of requests which have been sent before any response is seen.
If many requests for the same Key are seen in a short time window,
then rate limiting can also be enabled, even before a response is
seen.  The cache parameters defined below provide for this capability,
even though the outline of the algorithm above does not discuss it.</t>
          <t>The system also tracks additional information which enables it to
manage the cache.  This management includes limiting the total size of
the cache, expiring old cache entries which have not been used in a
while, and any other necessary bookkeeping.</t>
          <t>The result of this process is minimal disruption to normal and
well-behaved traffic, while quickly blocking problematic sessions.</t>
          <t>The only real limitation of this method is that it depends on a fixed
key.  That is, it requires that misbehaving supplicants or clients are
sending essentially identical identifying information in each packet.
In practice, this behavior is what is seen.</t>
          <t>This cache does not protect against malicious attackers who either
gain trusted access to the RADIUS network, or from attackers who send
enormous amounts of requests via an untrusted supplicant.  Protection
against those attacks is a separate subject, and we do not further
address them here.</t>
        </section>
        <section anchor="cache-configuration-parameters">
          <name>Cache Configuration Parameters</name>
          <t>This section outlines the configuration parameters which can be used
to control both the cache as a whole.  It is possible to use other
parameters but those are not described here.</t>
          <t>The cache can also track any statistics which are useful to the local
administrator.  Common statistics may include maximum cache usage,
packets per second, cache hit rate, cache miss rate, etc.</t>
          <t>Cache implementations should also provide for interfaces to examine
the cache and to create, delete, or update individual entries.</t>
          <t>The cache as a whole has the following configuration parameters:</t>
          <t>Maximum Size</t>
          <ul empty="true">
            <li>
              <t>This parameter is an integer value which limits the total number of
entries.</t>
              <t>As the number of misbehaving sessions is typically tiny (and
typically one), this configuration parameter exists only to prevent
the cache itself from being attacked.</t>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <t>The default Maximum Size value should generally be a small number,
especially when Threshold (see below) is set to one (1).  Since the
cache is expected to have only one entry in the worst case, the
default values for Maximum Size can be kept low.</t>
              <t>Since each cache entry is small, there are minimal problems with
setting the Maximum Size to larger values.  The system may use more
memory, with minimal other side effects.</t>
              <t>However, if Threshold is set to a larger value (e.g. 2 or 3), then
the cache may have many entries, even though only a small numbef of
cache entries are being actively rate limited.  In that situation,
it is likely useful to increase the Maximum Size value to one which
allows a large number of cache entries to be maintained.</t>
              <t>That number should be large enough to create cache entries for all
possible Access-Rejects that are seen within the Window time period.</t>
            </li>
          </ul>
          <t>Key</t>
          <ul empty="true">
            <li>
              <t>This parameter is a field which contains the key used to uniquely
identify and index each cache entry.</t>
              <t>The default Key value should a combination of Calling-Station-Id,
User-Name, and possible Called-Station-Id.  That combination ensures
that the cache entries are scoped to the smallest possible source.</t>
            </li>
          </ul>
          <t>Initial Lifetime</t>
          <ul empty="true">
            <li>
              <t>This parameter is a time interval which sets the default lifetime of
a cache entry.</t>
              <t>When a cache entry is created, it has a Lifetime (see below) which
is set to this Default Lifetime.  If no further updates to the cache
are performed, the cache entry expires at its Lifetime, and is
deleted.</t>
              <t>The default Initial Lifetime value should be between one (1) and
five (5) seconds.  Using a "too low" value means that the system is
less likely to detect problematic packets.  Using a "too high" value
will not benefit the system in any way, but will also have little
impact due to the small number of entries in the cache.</t>
            </li>
          </ul>
          <t>Extension Time</t>
          <ul empty="true">
            <li>
              <t>This parameter is a time interval which extends the cache Lifetime
when an entry is updated.</t>
              <t>Note that updates to the cache entries should also be rate limited,
typically to once per second.  Otherwise, the system could receive
1000 packets each second, and then also update the cache entry
Lifetime 1000 times in that same second.</t>
              <t>Alternatively, the configuration could be simplified by using the
same parameter for both Initial Lifetime and Extension Time.  The
parameters are described separately here just to mak it clear that
there may be some benefit to making them different.</t>
              <t>The default Extension Time value should be between one (1) and five
(5) seconds.  Using a "too low" value means that many cache updates
are performed for no additional benefit.  Using a "too high" value
will not benefit the system in any way, but will also have little
impact due to the small number of entries in the cache.</t>
            </li>
          </ul>
          <t>Request Window</t>
          <ul empty="true">
            <li>
              <t>This parameter is a time interval which is used to detect
misbehaving sessions before any response has been received.</t>
              <t>Once a cache entry is created, it is set to not perform rate
limiting.  However, if the cache sees another Access-Request packet
using the same Key during the Request Window time interval, then rate
limiting may be enabled for that cache entry.</t>
              <t>The default Request Window values should be between one (1) second
and five (5) seconds.  Values much higher than that are likely to
be unhelpful, as few systems will be overloaded with one problematic
packet every 5-30 seconds.</t>
            </li>
          </ul>
          <t>Request Treshhold</t>
          <ul empty="true">
            <li>
              <t>This parameter is an integer which is used to initiate rate limiting
for a cache entry before any response has been received.</t>
              <t>Rate limiting is enabled when the cache sees "Request Threshold"
different Access-Request packets within the "Request Window" time
period.  Note that retransmitted packets are not counted as
different packets for the purposes of this counter.</t>
              <t>This parameter is here to allow better management of the cache, if
necessary.  In most situations, setting Request Threshold to one
(1) is sufficient.  Request Threshold values higher than that are less
likely to be useful, as they will minimize the utility of the cache.</t>
            </li>
          </ul>
          <t>Response Window</t>
          <ul empty="true">
            <li>
              <t>This parameter is a time interval which is used to detect
misbehaving sessions which receive Access-Rejects.</t>
              <t>Once a cache entry is created, it is set to not perform rate
limiting.  However, if the cache sees another Access-Reject packet
using the same Key during this Window time interval, then rate
limiting may be enabled for that cache entry.</t>
              <t>The default Response Window values should be between one (1) second
and five (5) seconds.  Values much higher than that are likely to be
unhelpful, as few systems will be overloaded with one problematic
packet every 5-30 seconds.</t>
            </li>
          </ul>
          <t>Response Treshhold</t>
          <ul empty="true">
            <li>
              <t>This parameter is an integer which is used to initiate rate limiting
for a cache entry.</t>
              <t>Rate limiting is enabled when the cache sees "Response Threshold"
different Access-Reject packets within the "Response Window" time
period.  Note that as discussed earlier, responses to retransmitted
packets are not counted as different packets.</t>
              <t>This parameter is here to allow better management of the cache, if
necessary.  In most situations, setting Response Threshold to one
(1) is sufficient.  Response Threshold values higher than that are
less likely to be useful, as they will minimize the utility of the
cache.</t>
              <t>Where the proxy chain experiences a high volume of rejects in normal
situations, the Response Threshold value SHOULD be set to value
higher than one (1), but which is still small.  It is difficult to
make a more specific recommendation, as the distribution of traffic
in each network can vary significantly.</t>
              <t>If the proxy chain experiences a high volume of rejects in normal
situations, the cache will contain a large number of cache entries,
even though only a small number may be actively rate limited.</t>
            </li>
          </ul>
        </section>
        <section anchor="cache-entry-parameters">
          <name>Cache Entry Parameters</name>
          <t>This section outlines the configuration parameters which can be used
to control both the cache as a whole.  It is possible to use other
parameters but those are not described here.</t>
          <t>The cache entry can also track any statistics which are useful to the
local administrator.  Common statistics may include the time at which
the entry was created, the time at which it was last updated, the time
at which it was last used, number of Access-Request packets which
match the Key, along with any other information which may be useful.</t>
          <t>Each cache entry tracks the following parameters:</t>
          <t>Key</t>
          <ul empty="true">
            <li>
              <t>The data used to find or index this cache entry.  This field
corresponds to the Key configuration for the cache.</t>
            </li>
          </ul>
          <t>Rate Limit</t>
          <ul empty="true">
            <li>
              <t>A boolean variable which indicates whether or not this cache entry
will result in rate limiting input packets that match the Key.</t>
              <t>On creation, this field is set to "false".  Once set to "true", it
is never changed to "false".  The better way to stop rate limiting
is to simply delete the cache entry.</t>
            </li>
          </ul>
          <t>Request Counter</t>
          <ul empty="true">
            <li>
              <t>An integer variable which tracks the number of different
Access-Requests seen that match this Key, before any response is
received.</t>
              <t>Each time that the Request Counter field is increased to values
higher than one (1), the Lifetime field (see below) should also be
increased by Extension Time.  This extension allows the cache to
better react to abusive packets, while quickly expiring entries that
may be associated with normal packets.</t>
              <t>When the Request Counter value exceeds the configured cache Request
Threshold value, the Rate Limit field is set to "true".  Once the
Rate Limit field is set to "true", the two Counter fields are no longer
updated</t>
            </li>
          </ul>
          <t>Response Counter</t>
          <ul empty="true">
            <li>
              <t>An integer variable which tracks the number of different
Access-Rejects seen that match this Key.</t>
              <t>Each time that the Counter field is increased to values higher than
one (1), the Lifetime field (see below) should also be increased by
Extension Time.  This extension allows the cache to better react to
abusive packets, while quickly expiring entries that may be
associated with normal packets.</t>
              <t>When the Response Counter value exceeds the configured cache
Threshold value, the Rate Limit field is set to "true".  Once the
Rate Limit field is set to "true", the two Counter fields teo no
longer updated</t>
            </li>
          </ul>
          <t>Lifetime</t>
          <ul empty="true">
            <li>
              <t>A time variable which indicates at which time the cache entry is
deleted.  As noted above, this variable can be updated when a cache
entry is extended due to repeated abusive packets.</t>
            </li>
          </ul>
          <t>Response</t>
          <ul empty="true">
            <li>
              <t>A copy of the Access-Reject response packet contents.</t>
              <t>When a particular Key is rate limited, the cache replies with a
cached copy of the response.  Note that this caching assumes that
all responses have identical packet contents, even if the RADIUS
header is different.</t>
              <t>Due to the requirements of <xref target="RFC3579"/>, the cached response SHOULD
include an EAP-Message attribute if the Access-Request contained an
EAP-Message attribute.  The EAP-Message in the response MUST be an
EAP Failure, and MUST be updated to include the same EAP Identifier
field as is seen in the current Access-Request.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="delay-instead-of-rate-limit">
        <name>Delay instead of Rate Limit</name>
        <t>Instead of rate limiting requests, the cache could be used to delay
them.  This approach is less rigid than rate limiting, but still
acheives many of the same results.  This possibility is noted
separately from rate limiting, because of the impact is has on proxy
chains.</t>
        <t>When packets are rate limited due to abuse, that rate limiting is
"safe", in that multiple servers in a proxy chain can each apply the
rate limiting, and there will be no negative interactions.  In
contrast, if a server delays a packet, those delays may add up across
a proxy chain, and cause negative outcomes.</t>
        <t>As such, only the first server in a proxy chain can delay requests.
That is when the client is known to be a NAS, delaying requests can be
useful.  When the client is known to be another proxy server, the
receiving server MUST NOT delay requests.</t>
        <t>When a server suspects that abuse is occuring, it can choose to delay
requests for a short period of time instead of forwarding them.  This
time period can be very short, such as 10ms, or 100ms.  That is, it
should be short enough to cause minimal noticable issues for
authentication, but long enough to catch the abusive packets described
above.</t>
        <t>This delay can increase the likelihood of the server catching abusive
packets, as noted above.</t>
      </section>
      <section anchor="inappropriate-use-cases">
        <name>Inappropriate Use Cases</name>
        <t>This method is intended to protect RADIUS systems from short bursts of
abusive traffic from a single source, which is sent at high rates.  As
such, it is NOT RECOMMENDED for other uses.  We describe some other
possible use cases here, and explain why this solution is not
appropriate for them.</t>
        <t>One issue which may seem useful is to address the problem of a large
volumes of otherwise normal traffic being rejected. For example, user
accounts could be authentic, but could not be authorized for a
particular network or location.  The network will reject the request,
and supplicant will see what it believes to be an erroneous reject for
authentic credentials.  The supplicant will then repeat its
authentication attempt, generally until such time as it is outside of
the problematic network.</t>
        <t>Another issue which could be addressed is the problem of devices still
having credentials for accounts which were removed a long time in the
past.  For example, information from the <xref target="EDUROAM"/> national proxies
indicate that a significant percentage of traffic is Access-Rejects
for accounts which have not existed for many years.</t>
        <t>A possible solution to these issues would be to extend the Window and
Default Lifetime configuration parameters to minutes or hours.  This
change would lower the number of repeated authentications being sent
across a chain of proxies.  However, these extensions can have
negative side effects which are not seen in the intended use-case.</t>
        <t>One negative side effect is simply the long lifetime of a negative
cache entry.  If the lifetime is a few seconds, then the network will
quickly recover from Access-Rejects that are sent to temporary
failures, or due to misconfigurations.  Longer lifetimes are much more
likely to affect users, and therefore increase the volume of support
queries,</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no actions for IANA.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>There are no privacy considerations in this specification.  It does
not add or change any transport protocols, and it does not change the
roles of any participant in the RADIUS ecosystem.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This specification has no direct impact on security.  It does not add
or change any existing cryprography in RADIUS.  It is compatible with
all RADIUS standards, including (ALPN draft).</t>
      <t>This specification does, however, recommend ways that networks can be
better protected from a variety of attacks, misconfiguration, and
improper implementations.  As a result, RADIUS proxy networks which
implement this specification should become more stable, and therefore
more secure.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document came out of discussions both in the RADEXT WG, and in
the 2025 RADIUS Technical Conference in Tampere, Finland.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC2865">
          <front>
            <title>Remote Authentication Dial In User Service (RADIUS)</title>
            <author fullname="C. Rigney" initials="C." surname="Rigney"/>
            <author fullname="S. Willens" initials="S." surname="Willens"/>
            <author fullname="A. Rubens" initials="A." surname="Rubens"/>
            <author fullname="W. Simpson" initials="W." surname="Simpson"/>
            <date month="June" year="2000"/>
            <abstract>
              <t>This document describes a protocol for carrying authentication, authorization, and configuration information between a Network Access Server which desires to authenticate its links and a shared Authentication Server. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2865"/>
          <seriesInfo name="DOI" value="10.17487/RFC2865"/>
        </reference>
        <reference anchor="RFC5080">
          <front>
            <title>Common Remote Authentication Dial In User Service (RADIUS) Implementation Issues and Suggested Fixes</title>
            <author fullname="D. Nelson" initials="D." surname="Nelson"/>
            <author fullname="A. DeKok" initials="A." surname="DeKok"/>
            <date month="December" year="2007"/>
            <abstract>
              <t>This document describes common issues seen in Remote Authentication Dial In User Service (RADIUS) implementations and suggests some fixes. Where applicable, ambiguities and errors in previous RADIUS specifications are clarified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5080"/>
          <seriesInfo name="DOI" value="10.17487/RFC5080"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="EDUROAM" target="https://eduroam.org">
          <front>
            <title>eduroam</title>
            <author initials="" surname="eduroam" fullname="eduroam">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="OPENROAMING" target="https://wballiance.com/openroaming/">
          <front>
            <title>OpenRoaming: One global Wi-Fi network</title>
            <author initials="W. B." surname="Alliance" fullname="Wireless Broadband Alliance">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC3579">
          <front>
            <title>RADIUS (Remote Authentication Dial In User Service) Support For Extensible Authentication Protocol (EAP)</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="P. Calhoun" initials="P." surname="Calhoun"/>
            <date month="September" year="2003"/>
            <abstract>
              <t>This document defines Remote Authentication Dial In User Service (RADIUS) support for the Extensible Authentication Protocol (EAP), an authentication framework which supports multiple authentication mechanisms. In the proposed scheme, the Network Access Server (NAS) forwards EAP packets to and from the RADIUS server, encapsulated within EAP-Message attributes. This has the advantage of allowing the NAS to support any EAP authentication method, without the need for method- specific code, which resides on the RADIUS server. While EAP was originally developed for use with PPP, it is now also in use with IEEE 802. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3579"/>
          <seriesInfo name="DOI" value="10.17487/RFC3579"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAOT39WgAA91d6ZIbx5H+X0/RO4qNIB2YEUlZtkxv0B6RlDRhXsvDlH9t
FLoLg9Y0urF9DAgz+C77LPtkm19m1tXAkBLDVyz1QxhMd1VWVh5fHlVzenpq
xnps3P3iRd+92xdPOlsV39rGtmXdXhZ1W4xrV7x0m250xflEP7RjXdqx7tri
UW2b4qIt3gyuL165/rouXXHr5fmjizevbmO8sSu7xtjlsnfX6QSm6srWbmjS
qrer8bRyV93VaW8r92483eKx04YeO71zx5hhtG31X7bpWnp87Cdn6m3Pn4bx
3p07v7tzz9je2ftEyOj61o1md3m/ICIe//i6eNv1V1jG9303bc3VLj51+ggz
G1rJfVrkqjPDtNzUw0Drer3f0lQXj19/Z8y2vl/Qvy+K0rbFNLjC9r3dF7fq
VWGbpti74XbR9cXaDuti7XpnioIWfR+/oI9D14+9Ww33eYjKrezUjAM94X+/
38iv8aOxxN2uv2/MKVFEX56fFY/cn7orelCYdU67Il8Vtx5Xt+n7rr/Ekq6+
7evq0hXP3LijFWNot7F1c7/ARlZ/rNurJT/R6gNnZbcxxrRdv6GtvHb36Y2X
3z385u5vf60f733zm6/149d3vrlDVIFLyeOPH715+fz8KT7SP5WhE1dNfWc3
J/KtX1Eh/2QV+oh8KUOGJ17/+Jp4tR7H7XD/yy/1yTNaJT3w/MXjZ5jx4tn3
s0mfb137kh6knb5fPG9dcdl0SxLNt/Xpd3Wha/4YSW/r3jVuGIpvab5qSSwj
Xjc16YD7GWTuaC55GGz9siNqeqHmS2OuXTsxvy4hgl4w6WfZH5H5P9ZuXOky
L+txPS3vF6veOfptPQ1fikYsy+0Z/ZLE4/S0sMth7G1JP71e10NB+jRtSDNJ
xoayr5duKGyxcrti42i51VDs1nW5ZiG2JOPDWBCVvR27fii6lcEENb2j2v6L
ld4cKP0ZMYmG8NN7sipWkqLe0IzXruCFFVB1swwmB9wn0lzR1Jt6pG8WxY54
0k1j0bv/nupeHtoX5dq2l47ViSg0U1u5vtnjt9tIxdt13Tj8fojUrC3NvXSu
LYZ1t2sxACSE1k2cIKbSihZ4hSglxZYnSSOn1aoua3DZvSPu0ScydyANz24w
ynZaNvWwNmO2J67GWMT4gm2Z7YkEbN7VAqbDYqtow8ainPqeng80nMlWb+qq
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
AA==

-->

</rfc>
