RFC 4673

RADIUS Dynamic Authorization Server MIB

πŸ“… published September 2006, from ietf

RFC 4673: RADIUS Dynamic Authorization Server MIB πŸŽ€

Part 1 of 4 πŸ¦‹

  • Number: RFC 4673
  • Title: RADIUS Dynamic Authorization Server MIB
  • Authors: S. De Cnodder (Alcatel), N. Jonnala (Cisco Systems, Inc.), and M. Chiba (Cisco Systems, Inc.)
  • Working group: Network Working Group
  • Category: Informational
  • Date: September 2006
  • Obsoletes / Updates: The title block doesn't list anything this RFC obsoletes or updates.

Status of This Memo ✨

Okay so this memo is purely for information for the Internet community πŸ“š. It is not an Internet standard of any kind, so don't treat it like one. Distribution of this memo is unlimited πŸ’Œ.

Copyright (C) The Internet Society (2006).

Abstract 🌸

Okay, this memo defines a chunk of the Management Information Base (MIB) for network management protocols used across the Internet community. The main point is the Remote Authentication Dial-In User Service (RADIUS) (RFC 2865) Dynamic Authorization Server (DAS) functions, which support the dynamic authorization extensions defined in RFC 3576. It's giving "RADIUS gets a dashboard" energy πŸ’….

Table of Contents 🧚

   1. Introduction ....................................................2
      1.1. Requirements Notation ......................................2
      1.2. Terminology ................................................2
   2. The Internet-Standard Management Framework ......................2
   3. Overview ........................................................3
   4. RADIUS Dynamic Authorization Server MIB Definitions .............5
   5. Security Considerations ........................................20
   6. IANA Considerations ............................................21
   7. Acknowledgements ...............................................21
   8. References .....................................................21
      8.1. Normative References ......................................21
      8.2. Informative References ....................................22

1. Introduction ✨

Okay so this memo defines a piece of the Management Information Base (MIB) that network management protocols use across the Internet community. Dynamic Authorization extensions are becoming a must-have πŸ”₯ on network access server (NAS) devices, because those devices need to handle the Disconnect and Change-of-Authorization (CoA) messages described in [RFC3576]. That makes managing RADIUS Dynamic Authorization entities super important πŸ‘‘. This RADIUS Dynamic Authorization Server (DAS) MIB works alongside the managed objects for RADIUS authentication and accounting clients, described in [RFC4668] and [RFC4670] respectively. Iconic teamwork 🫢.

1.1. Requirements Notation πŸŽ€

When you see these words in capitals in this document, "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL", they carry the meaning given in [RFC2119]. Read them that way, bestie πŸ€“.

1.2. Terminology πŸ“–

Dynamic Authorization Server (DAS)

The component that lives on the NAS and processes the Disconnect and Change-of-Authorization (CoA) Request packets [RFC3576] sent by the Dynamic Authorization Client.

Dynamic Authorization Client (DAC)

The component that sends Disconnect and CoA-Request packets to the Dynamic Authorization Server. This component often lives on the RADIUS server, but it can also sit on a separate host, such as a Rating Engine 🧠.

Dynamic Authorization Server Port

The UDP port that the Dynamic Authorization Server listens on for the Disconnect and CoA requests sent by the Dynamic Authorization Client πŸ”Œ.

2. The Internet-Standard Management Framework 🌈

If you want a detailed overview of the documents describing the current Internet-Standard Management Framework, go check section 7 of [RFC3410]. It's worth the read πŸ“š.

Managed objects are accessed through a virtual information store called the Management Information Base, or MIB πŸ—‚οΈ. MIB objects are generally accessed through the Simple Network Management Protocol (SNMP). Objects in the MIB are defined using the mechanisms in the Structure of Management Information (SMI). This memo specifies a MIB module that is compliant to the SMIv2, which is described in STD 58, RFC 2578 [RFC2578], STD 58, RFC 2579 [RFC2579], and STD 58, RFC 2580 [RFC2580]. The SMIv2 is the rulebook, and this MIB follows it πŸ’….

3. Overview πŸ¦‹

"Dynamic Authorization Extensions to RADIUS" [RFC3576] defines how Disconnect-Request, Disconnect-ACK, Disconnect-NAK, CoA-Request, CoA-ACK, and CoA-NAK packets work. Typically, NAS devices implement the DAS function, so they're expected to implement the RADIUS Dynamic Authorization Server MIB. DACs implement the client function, so they're expected to implement the RADIUS Dynamic Authorization Client MIB. Division of labour, I love it πŸ’œ.

Here's the plot twist πŸ™ˆ: a single RADIUS Dynamic Authorization entity can do both client and server jobs. For example, a RADIUS proxy can act as a DAS to one or more DACs while also acting as a DAC to one or more DASs. In those cases, RADIUS entities that combine client and server functionality are expected to support both the client and server MIBs. Main character multitasking πŸ’–.

This memo describes the MIB for Dynamic Authorization Servers and relates to the following documents:

[RFC4668] describes the MIB for a RADIUS Auth Client MIB.

[RFC4669] describes the MIB for a RADIUS Auth Server MIB.

[RFC4670] describes the MIB for a RADIUS Acct Client MIB.

[RFC4671] describes the MIB for a RADIUS Acct Server MIB.

[RFC4672] describes the MIB for a RADIUS Dynamic Auth Client.

A NAS typically implements the MIBs for a RADIUS Authentication Client, a RADIUS accounting client, and a RADIUS Dynamic Authorization Server. However, any one MIB can be implemented without implementing any of the others, so the MIBs have no dependencies on each other 🫧. A typical case would be a device implementing the RADIUS authentication server, RADIUS accounting server, and RADIUS Dynamic Authorization Client MIBs. A RADIUS proxy might implement any, all, or a subset of the MIBs listed above and the MIB defined in this document. Mix and match, babe πŸ“.

              +---------------+                      +---------------+
    User 1----|               |  Disconnect-Request  |               |
              |    Dynamic    |     CoA-Request      |    Dynamic    |
    User 2----| Authorization |<---------------------| Authorization |
              |    Server     |--------------------->|    Client     |
    User 3----|     (DAS)     |    Disconnect-Ack    |     (DAC)     |
              |               |    Disconnect-NAK    |               |
              +---------------+    CoA-Ack/CoA-NAK   +---------------+

Figure 1. Mapping of clients and servers πŸ—ΊοΈ

This MIB module for the Dynamic Authorization Server contains the following:

  1. Three scalar objects.
  2. One Dynamic Authorization Client Table. This table contains one row for each DAC that the DAS shares a secret with.

4. RADIUS Dynamic Authorization Server MIB Definitions πŸ’Ž

Here's where the MIB itself lives, so get comfy πŸ›‹οΈ.

RADIUS-DYNAUTH-SERVER-MIB DEFINITIONS ::= BEGIN

IMPORTS
       MODULE-IDENTITY, OBJECT-TYPE,
       Counter32, Integer32, mib-2,
       TimeTicks         FROM SNMPv2-SMI             -- [RFC2578]
       SnmpAdminString   FROM SNMP-FRAMEWORK-MIB     -- [RFC3411]
       InetAddressType,
       InetAddress       FROM INET-ADDRESS-MIB       -- [RFC4001]
       MODULE-COMPLIANCE,
       OBJECT-GROUP  FROM SNMPv2-CONF;               -- [RFC2580]

radiusDynAuthServerMIB MODULE-IDENTITY
       LAST-UPDATED "200608290000Z" -- 29 August 2006
       ORGANIZATION "IETF RADEXT Working Group"
       CONTACT-INFO
              " Stefaan De Cnodder
                Alcatel
                Francis Wellesplein 1
                B-2018 Antwerp
                Belgium

                Phone: +32 3 240 85 15
                EMail: stefaan.de_cnodder@alcatel.be

                Nagi Reddy Jonnala
                Cisco Systems, Inc.
                Divyasree Chambers, B Wing,
                O'Shaugnessy Road,
                Bangalore-560027, India.

                Phone: +91 94487 60828
                EMail: njonnala@cisco.com

                Murtaza Chiba
                Cisco Systems, Inc.
                170 West Tasman Dr.
                San Jose CA, 95134

                Phone: +1 408 525 7198
                EMail: mchiba@cisco.com "
       DESCRIPTION
           "The MIB module for entities implementing the server
            side of the Dynamic Authorization Extensions to the
            Remote Authentication Dial-In User Service (RADIUS)
            protocol.  Copyright (C) The Internet Society (2006).

            Initial version as published in RFC 4673; for full
            legal notices see the RFC itself."

       REVISION "200608290000Z" -- 29 August 2006
       DESCRIPTION "Initial version as published in RFC 4673."
       ::= { mib-2 146 }

radiusDynAuthServerMIBObjects OBJECT IDENTIFIER ::=
                                      { radiusDynAuthServerMIB 1 }

radiusDynAuthServerScalars    OBJECT IDENTIFIER ::=
                               { radiusDynAuthServerMIBObjects 1 }

radiusDynAuthServerDisconInvalidClientAddresses OBJECT-TYPE
      SYNTAX Counter32
      MAX-ACCESS read-only
      STATUS current
      DESCRIPTION
            "The number of Disconnect-Request packets received from
             unknown addresses.  This counter may experience a
             discontinuity when the DAS module (re)starts, as
             indicated by the value of
             radiusDynAuthServerCounterDiscontinuity."
      ::= { radiusDynAuthServerScalars 1 }

radiusDynAuthServerCoAInvalidClientAddresses OBJECT-TYPE
      SYNTAX Counter32
      MAX-ACCESS read-only
      STATUS current
      DESCRIPTION
            "The number of CoA-Request packets received from unknown
             addresses.  This counter may experience a discontinuity
             when the DAS module (re)starts, as indicated by the
             value of radiusDynAuthServerCounterDiscontinuity."
      ::= { radiusDynAuthServerScalars 2 }

radiusDynAuthServerIdentifier OBJECT-TYPE
      SYNTAX SnmpAdminString
      MAX-ACCESS read-only
      STATUS current
      DESCRIPTION
             "The NAS-Identifier of the RADIUS Dynamic Authorization
              Server.  This is not necessarily the same as sysName in
              MIB II."
      REFERENCE
             "RFC 2865, Section 5.32, NAS-Identifier."
      ::= { radiusDynAuthServerScalars 3 }

radiusDynAuthClientTable OBJECT-TYPE
      SYNTAX SEQUENCE OF RadiusDynAuthClientEntry
      MAX-ACCESS not-accessible
      STATUS     current
      DESCRIPTION
            "The (conceptual) table listing the RADIUS Dynamic
             Authorization Clients with which the server shares a
             secret."
      ::= { radiusDynAuthServerMIBObjects 2 }

radiusDynAuthClientEntry OBJECT-TYPE
       SYNTAX     RadiusDynAuthClientEntry
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
             "An entry (conceptual row) representing one Dynamic
              Authorization Client with which the server shares a
              secret."
       INDEX      { radiusDynAuthClientIndex }
       ::= { radiusDynAuthClientTable 1 }

Part 2 is next, and that's where the MIB gets even juicier πŸ¦‹βœ¨

okay so this is where the client table gets its row layout πŸ“’βœ¨ every entry is one SEQUENCE of counters plus the client's index and address, and the MIB spells out what each one tracks πŸ¦‹

RadiusDynAuthClientEntry ::= SEQUENCE {
       radiusDynAuthClientIndex                     Integer32,
       radiusDynAuthClientAddressType               InetAddressType,
       radiusDynAuthClientAddress                   InetAddress,
       radiusDynAuthServDisconRequests              Counter32,
       radiusDynAuthServDisconAuthOnlyRequests      Counter32,
       radiusDynAuthServDupDisconRequests           Counter32,
       radiusDynAuthServDisconAcks                  Counter32,
       radiusDynAuthServDisconNaks                  Counter32,
       radiusDynAuthServDisconNakAuthOnlyRequests   Counter32,
       radiusDynAuthServDisconNakSessNoContext      Counter32,
       radiusDynAuthServDisconUserSessRemoved       Counter32,
       radiusDynAuthServMalformedDisconRequests     Counter32,
       radiusDynAuthServDisconBadAuthenticators     Counter32,
       radiusDynAuthServDisconPacketsDropped        Counter32,
       radiusDynAuthServCoARequests                 Counter32,
       radiusDynAuthServCoAAuthOnlyRequests         Counter32,
       radiusDynAuthServDupCoARequests              Counter32,
       radiusDynAuthServCoAAcks                     Counter32,
       radiusDynAuthServCoANaks                     Counter32,
       radiusDynAuthServCoANakAuthOnlyRequests      Counter32,
       radiusDynAuthServCoANakSessNoContext         Counter32,
       radiusDynAuthServCoAUserSessChanged          Counter32,
       radiusDynAuthServMalformedCoARequests        Counter32,
       radiusDynAuthServCoABadAuthenticators        Counter32,
       radiusDynAuthServCoAPacketsDropped           Counter32,
       radiusDynAuthServUnknownTypes                Counter32,
       radiusDynAuthServerCounterDiscontinuity      TimeTicks
}

radiusDynAuthClientIndex

this one is the row's little ID tag πŸŽ€ it's a positive integer that the agent hands out itself, and it's only unique inside this table, so it's not a global name or anything 🌸

radiusDynAuthClientIndex OBJECT-TYPE
       SYNTAX     Integer32 (1..2147483647)
       MAX-ACCESS not-accessible
       STATUS     current
       DESCRIPTION
             "A number uniquely identifying each RADIUS Dynamic
              Authorization Client with which this Dynamic
              Authorization Server communicates.  This number is
              allocated by the agent implementing this MIB module
              and is unique in this context."
       ::= { radiusDynAuthClientEntry 1 }

radiusDynAuthClientAddressType

this tells you what kind of IP address the client has, so you know how to read the next column πŸ’…

radiusDynAuthClientAddressType OBJECT-TYPE
       SYNTAX     InetAddressType
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The type of IP address of the RADIUS Dynamic
              Authorization Client referred to in this table entry."
       ::= { radiusDynAuthClientEntry 2 }

radiusDynAuthClientAddress

the actual address of the client, written in the version-neutral format, so IPv4 and IPv6 both fit in the same column πŸ¦‹ the address type column is what tells you which one you're looking at πŸ’œ

radiusDynAuthClientAddress OBJECT-TYPE
       SYNTAX     InetAddress
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The IP address value of the RADIUS Dynamic
              Authorization Client referred to in this table entry,
              using the version neutral IP address format.  The type
              of this address is determined by the value of
              the radiusDynAuthClientAddressType object."
       ::= { radiusDynAuthClientEntry 3 }

radiusDynAuthServDisconRequests

the big headline counter for Disconnect-Requests from this client πŸ“ˆ it also counts the ones marked 'Authorize Only' πŸ‘‘ and it can get a little reset when the DAS module restarts, which the discontinuity counter helps you track πŸ™ˆ

radiusDynAuthServDisconRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-Requests received
              from this Dynamic Authorization Client.  This also
              includes the RADIUS Disconnect-Requests that have a
              Service-Type attribute with value 'Authorize Only'.
              This counter may experience a discontinuity when the
              DAS module (re)starts as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 4 }

radiusDynAuthServDisconAuthOnlyRequests

this one zooms in on just the Disconnect-Requests that carry the 'Authorize Only' Service-Type πŸŽ€ it's a subset of the main one above, so the numbers are related 🫢

radiusDynAuthServDisconAuthOnlyRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-Requests that include
              a Service-Type attribute with value 'Authorize Only'
              received from this Dynamic Authorization Client.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 5 }

radiusDynAuthServDupDisconRequests

this counts the duplicate Disconnect-Request packets that show up from this client πŸ” it's giving "I already heard you the first time" energy 😭

radiusDynAuthServDupDisconRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of duplicate RADIUS Disconnect-Request
              packets received from this Dynamic Authorization
              Client.  This counter may experience a discontinuity
              when the DAS module (re)starts, as indicated by the
              value of radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 6 }

radiusDynAuthServDisconAcks

this is the tally of Disconnect-ACK replies the server sent back to this client βœ… the counter is measured in replies πŸ“

radiusDynAuthServDisconAcks  OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-ACK packets sent to
              this Dynamic Authorization Client.  This counter may
              experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."

       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 7 }

radiusDynAuthServDisconNaks

the Disconnect-NAK tally πŸ™…β€β™€οΈ this one is a bit of a roll-up, since it includes the 'Authorize Only' NAKs and the NAKs sent because no session context was found 🧚

radiusDynAuthServDisconNaks OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-NAK packets
              sent to this Dynamic Authorization Client.  This
              includes the RADIUS Disconnect-NAK packets sent
              with a Service-Type attribute with value 'Authorize
              Only' and the RADIUS Disconnect-NAK packets sent
              because no session context was found.  This counter
              may experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 8 }

radiusDynAuthServDisconNakAuthOnlyRequests

the NAKs that carry the 'Authorize Only' Service-Type, counted on their own 🎯

radiusDynAuthServDisconNakAuthOnlyRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-NAK packets that
              include a Service-Type attribute with value
              'Authorize Only' sent to this Dynamic Authorization
              Client.  This counter may experience a discontinuity
              when the DAS module (re)starts, as indicated by the
              value of radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 9 }

radiusDynAuthServDisconNakSessNoContext

the NAKs that went out because the server couldn't find a session context πŸ•΅οΈβ€β™€οΈ it's the "nothing to disconnect here, bestie" counter πŸ’€

radiusDynAuthServDisconNakSessNoContext OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-NAK packets
              sent to this Dynamic Authorization Client
              because no session context was found.  This counter may
              experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 10 }

radiusDynAuthServDisconUserSessRemoved

this counts the user sessions that got removed because of this client's Disconnect-Requests 🌈 it's measured in sessions, not requests, and one request can knock out more than one session depending on site policy πŸ‘‘ if the server doesn't know how many sessions a request hit, each request just counts as one πŸ¦‹

radiusDynAuthServDisconUserSessRemoved OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "sessions"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of user sessions removed for the
              Disconnect-Requests received from this
              Dynamic Authorization Client.  Depending on site-
              specific policies, a single Disconnect request
              can remove multiple user sessions.  In cases where
              this Dynamic Authorization Server has no
              knowledge of the number of user sessions that
              are affected by a single request, each such
              Disconnect-Request will count as a single
              affected user session only.  This counter may experience
              a discontinuity when the DAS module (re)starts, as
              indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM)."
       ::= { radiusDynAuthClientEntry 11 }

radiusDynAuthServMalformedDisconRequests

this one is for Disconnect-Requests that came in badly formed πŸ™ˆ bad authenticators and unknown types don't count here, they have their own homes 🏠

radiusDynAuthServMalformedDisconRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of malformed RADIUS Disconnect-Request
              packets received from this Dynamic Authorization
              Client.  Bad authenticators and unknown types are not
              included as malformed Disconnect-Requests.  This counter
              may experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM), and
              Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 12 }

radiusDynAuthServDisconBadAuthenticators

this one counts the Disconnect-Requests whose Authenticator field was invalid πŸ” these are the ones that failed the authenticator check, so they're tracked separately 🫢

radiusDynAuthServDisconBadAuthenticators OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS Disconnect-Request packets
              that contained an invalid Authenticator field
              received from this Dynamic Authorization Client.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM), and
              Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 13 }

radiusDynAuthServDisconPacketsDropped

the last Disconnect counter πŸŽ€ it tracks the incoming Disconnect-Requests from this client that the server application quietly threw away for reasons that aren't malformed, bad authenticators, or unknown types 🧚

radiusDynAuthServDisconPacketsDropped OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of incoming Disconnect-Requests
              from this Dynamic Authorization Client silently
              discarded by the server application for some reason
              other than malformed, bad authenticators, or unknown
              types.  This counter may experience a discontinuity
              when the DAS module (re)starts, as indicated by the
              value of radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.1, Disconnect Messages (DM), and
              Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 14 }

Okay bestie, the CoA counters are where it gets spicy 🌢️ Every one of these is a Counter32 that's read-only and tied to the radiusDynAuthClientEntry row. Let's go πŸ’…

radiusDynAuthServCoARequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-requests received from this
              Dynamic Authorization Client.  This also includes
              the CoA requests that have a Service-Type attribute
              with value 'Authorize Only'.  This counter may
              experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."

       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 15 }

radiusDynAuthServCoAAuthOnlyRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-requests that include a
              Service-Type attribute with value 'Authorize Only'
              received from this Dynamic Authorization Client.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 16 }


radiusDynAuthServDupCoARequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of duplicate RADIUS CoA-Request packets
              received from this Dynamic Authorization Client.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 17 }

radiusDynAuthServCoAAcks  OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-ACK packets sent to this
              Dynamic Authorization Client.  This counter may
              experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 18 }

radiusDynAuthServCoANaks OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-NAK packets sent to
              this Dynamic Authorization Client.  This includes
              the RADIUS CoA-NAK packets sent with a Service-Type
              attribute with value 'Authorize Only' and the RADIUS
              CoA-NAK packets sent because no session context was
              found.  This counter may experience a discontinuity
              when the DAS module (re)starts, as indicated by the
              value of radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 19 }

radiusDynAuthServCoANakAuthOnlyRequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-NAK packets that include a
              Service-Type attribute with value 'Authorize Only'
              sent to this Dynamic Authorization Client.  This counter
              may experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 20 }

radiusDynAuthServCoANakSessNoContext OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "replies"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-NAK packets sent to this
              Dynamic Authorization Client because no session context
              was found.  This counter may experience a discontinuity
              when the DAS module (re)starts, as indicated by the
              value of radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 21 }

radiusDynAuthServCoAUserSessChanged OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "sessions"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of user sessions authorization
              changed for the CoA-Requests received from this
              Dynamic Authorization Client.  Depending on site-
              specific policies, a single CoA request can change
              multiple user sessions' authorization.  In cases where
              this Dynamic Authorization Server has no knowledge of
              the number of user sessions that are affected by a
              single request, each such CoA-Request will
              count as a single affected user session only.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA)."
       ::= { radiusDynAuthClientEntry 22 }

Ngl, the NAK counters are a little bit of a web πŸ•ΈοΈ CoANaks covers the Authorize Only NAKs AND the no-session NAKs, and then the two sub-counters break those out. Keep that picture in your head and it all clicks 🧠✨

radiusDynAuthServMalformedCoARequests OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of malformed RADIUS CoA-Request packets
              received from this Dynamic Authorization Client.  Bad
              authenticators and unknown types are not included as
              malformed CoA-Requests.  This counter may experience a
              discontinuity when the DAS module (re)starts, as
              indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE

             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA), and Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry  23 }

radiusDynAuthServCoABadAuthenticators OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of RADIUS CoA-Request packets that
              contained an invalid Authenticator field received
              from this Dynamic Authorization Client.  This counter
              may experience a discontinuity when the DAS module
              (re)starts, as indicated by the value of
                radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA), and Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 24 }

radiusDynAuthServCoAPacketsDropped OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of incoming CoA packets from this
              Dynamic Authorization Client silently discarded
              by the server application for some reason other than
              malformed, bad authenticators, or unknown types.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.2, Change-of-Authorization
              Messages (CoA), and Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 25 }

radiusDynAuthServUnknownTypes OBJECT-TYPE
       SYNTAX     Counter32
       UNITS      "requests"
       MAX-ACCESS read-only
       STATUS     current
       DESCRIPTION
             "The number of incoming packets of unknown types that
              were received on the Dynamic Authorization port.  This
              counter may experience a discontinuity when the DAS
              module (re)starts, as indicated by the value of
              radiusDynAuthServerCounterDiscontinuity."
       REFERENCE
             "RFC 3576, Section 2.3, Packet Format."
       ::= { radiusDynAuthClientEntry 26 }

radiusDynAuthServerCounterDiscontinuity OBJECT-TYPE
       SYNTAX TimeTicks
       UNITS  "hundredths of a second"
       MAX-ACCESS read-only
       STATUS current
       DESCRIPTION
             "The time (in hundredths of a second) since the
              last counter discontinuity.  A discontinuity may
              be the result of a reinitialization of the DAS
              module within the managed entity."
       ::= { radiusDynAuthClientEntry 27 }

Okay, the discontinuity timer is the one that tells you when your counters might have reset, so it's basically the receipts 🧾 Now the conformance bit, the part where the spec gets organised into little boxes πŸ“¦

-- conformance information

radiusDynAuthServerMIBConformance
       OBJECT IDENTIFIER ::= { radiusDynAuthServerMIB 2 }
radiusDynAuthServerMIBCompliances
       OBJECT IDENTIFIER ::= { radiusDynAuthServerMIBConformance 1 }
radiusDynAuthServerMIBGroups
       OBJECT IDENTIFIER ::= { radiusDynAuthServerMIBConformance 2 }

-- compliance statements

radiusAuthServerMIBCompliance MODULE-COMPLIANCE
       STATUS  current
       DESCRIPTION
             "The compliance statement for entities implementing
              the RADIUS Dynamic Authorization Server.  Implementation
              of this module is for entities that support IPv4 and/or
              IPv6."
       MODULE  -- this module
       MANDATORY-GROUPS { radiusDynAuthServerMIBGroup }

       OBJECT             radiusDynAuthClientAddressType
       SYNTAX             InetAddressType { ipv4(1), ipv6(2) }
       DESCRIPTION
           "An implementation is only required to support IPv4 and
            globally unique IPv6 addresses."

       OBJECT             radiusDynAuthClientAddress
       SYNTAX             InetAddress (SIZE(4|16))
       DESCRIPTION
           "An implementation is only required to support IPv4 and
            globally unique IPv6 addresses."

       GROUP              radiusDynAuthServerAuthOnlyGroup
       DESCRIPTION
             "Only required for Dynamic Authorization Clients that
              are supporting Service-Type attributes with value
              'Authorize-Only'."


       GROUP              radiusDynAuthServerNoSessGroup
       DESCRIPTION
             "This group is not required if the Dynamic
              Authorization Server cannot easily determine whether
              a session exists (e.g., in case of a RADIUS
              proxy)."

       ::= { radiusDynAuthServerMIBCompliances 1 }

-- units of conformance
radiusDynAuthServerMIBGroup OBJECT-GROUP
       OBJECTS { radiusDynAuthServerDisconInvalidClientAddresses,
                 radiusDynAuthServerCoAInvalidClientAddresses,
                 radiusDynAuthServerIdentifier,
                 radiusDynAuthClientAddressType,
                 radiusDynAuthClientAddress,
                 radiusDynAuthServDisconRequests,
                 radiusDynAuthServDupDisconRequests,
                 radiusDynAuthServDisconAcks,
                 radiusDynAuthServDisconNaks,
                 radiusDynAuthServDisconUserSessRemoved,
                 radiusDynAuthServMalformedDisconRequests,
                 radiusDynAuthServDisconBadAuthenticators,
                 radiusDynAuthServDisconPacketsDropped,
                 radiusDynAuthServCoARequests,
                 radiusDynAuthServDupCoARequests,
                 radiusDynAuthServCoAAcks,
                 radiusDynAuthServCoANaks,
                 radiusDynAuthServCoAUserSessChanged,
                 radiusDynAuthServMalformedCoARequests,
                 radiusDynAuthServCoABadAuthenticators,
                 radiusDynAuthServCoAPacketsDropped,
                 radiusDynAuthServUnknownTypes,
                 radiusDynAuthServerCounterDiscontinuity
               }
       STATUS  current
       DESCRIPTION
             "The collection of objects providing management of
              a RADIUS Dynamic Authorization Server."
       ::= { radiusDynAuthServerMIBGroups 1 }

radiusDynAuthServerAuthOnlyGroup OBJECT-GROUP
       OBJECTS { radiusDynAuthServDisconAuthOnlyRequests,
                 radiusDynAuthServDisconNakAuthOnlyRequests,
                 radiusDynAuthServCoAAuthOnlyRequests,
                 radiusDynAuthServCoANakAuthOnlyRequests
               }
       STATUS  current
       DESCRIPTION
             "The collection of objects supporting the RADIUS
              messages including Service-Type attribute with
              value 'Authorize Only'."
       ::= { radiusDynAuthServerMIBGroups 2 }

radiusDynAuthServerNoSessGroup OBJECT-GROUP
       OBJECTS { radiusDynAuthServDisconNakSessNoContext,
                 radiusDynAuthServCoANakSessNoContext
               }
       STATUS  current
       DESCRIPTION
             "The collection of objects supporting the RADIUS
              messages that are referring to non-existing sessions."
       ::= { radiusDynAuthServerMIBGroups 3 }


END

5. Security Considerations πŸ”

Okay, bestie, security is serious, so let's get into it. πŸ’… There are no management objects in this MIB module with a MAX-ACCESS clause of read-write and/or read-create. So if this MIB module is implemented correctly, there's no risk that an intruder can alter or create any of its management objects with direct SNMP SET operations. Iconic. πŸ™Œ

Some of the readable objects (the ones with a MAX-ACCESS other than not-accessible) might be sensitive or vulnerable depending on the network. So it's really important to control even GET and/or NOTIFY access to them, and maybe even encrypt their values when they travel over the network via SNMP. 🫣 Here are the tables and objects and why they're sensitive:

  • radiusDynAuthClientAddress and radiusDynAuthClientAddressType

These can be used to figure out the address of the DAC that the DAS is talking to. That info could be super useful for mounting an attack on the DAC. πŸ’€

  • radiusDynAuthServerIdentifier

This can be used to find out the Identifier of the DAS. That info could be useful for impersonating the DAS. πŸ‘€

SNMP versions before SNMPv3 did not include adequate security. Even if the network itself is secure (for example by using IPsec), there's still no control over who on that secure network gets to access and GET/SET (read/change/create/delete) the objects in this MIB module. Not it. πŸ™…β€β™€οΈ

It is RECOMMENDED that implementers consider the security features provided by the SNMPv3 framework (see [RFC3410], section 8), including full support for the SNMPv3 cryptographic mechanisms (for authentication and privacy). πŸ”’

Further, deployment of SNMP versions prior to SNMPv3 is NOT RECOMMENDED. Instead, it is RECOMMENDED to deploy SNMPv3 and to enable cryptographic security. Then it's a customer/operator responsibility to make sure the SNMP entity giving access to an instance of this MIB module is properly configured, so the objects are only accessible to the principals (users) who have legitimate rights to GET or SET (change/create/delete) them. Main character energy for the people doing the locking. 🧚


6. IANA Considerations 🧚

Here's the quick one: the IANA has assigned OID number 146 under mib-2. ✨

7. Acknowledgements 🫢

The authors want to give a shoutout to the following people for their comments on this document: Bernard Aboba, Alan DeKok, David Nelson, Anjaneyulu Pata, Dan Romascanu, Juergen Schoenwaelder, Greg Weber, Bert Wijnen, and Glen Zorn. You all ate this. πŸ‘‘

8. References πŸ“š

8.1. Normative References

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
  • [RFC2578] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Structure of Management Information Version 2 (SMIv2)", STD 58, RFC 2578, April 1999.
  • [RFC2579] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Textual Conventions for SMIv2", STD 58, RFC 2579, April 1999.
  • [RFC2580] McCloghrie, K., Perkins, D., and J. Schoenwaelder, "Conformance Statements for SMIv2", STD 58, RFC 2580, April 1999.
  • [RFC3411] Harrington, D., Presuhn, R., and B. Wijnen, "An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks", STD 62, RFC 3411, December 2002.
  • [RFC3576] Chiba, M., Dommety, G., Eklund, M., Mitton, D., and B. Aboba, "Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)", RFC 3576, July 2003.
  • [RFC4001] Daniele, M., Haberman, B., Routhier, S., and J. Schoenwaelder, "Textual Conventions for Internet Network Addresses", RFC 4001, February 2005.

8.2. Informative References

  • [RFC2865] Rigney, C., Willens, S., Rubens, A., and W. Simpson, "Remote Authentication Dial In User Service (RADIUS)", RFC 2865, June 2000.
  • [RFC3410] Case, J., Mundy, R., Partain, D., and B. Stewart, "Introduction and Applicability Statements for Internet-Standard Management Framework", RFC 3410, December 2002.
  • [RFC4668] Nelson, D., "RADIUS Authentication Client MIB for IPv6", RFC 4668, August 2006.
  • [RFC4669] Nelson, D., "RADIUS Authentication Server MIB for IPv6", RFC 4669, August 2006.
  • [RFC4670] Nelson, D., "RADIUS Accounting Client MIB for IPv6", RFC 4670, August 2006.
  • [RFC4671] Nelson, D., "RADIUS Accounting Server MIB for IPv6", RFC 4671, August 2006.
  • [RFC4672] De Cnodder, S., Jonnala, N., and M. Chiba, "RADIUS Dynamic Authorization Client MIB", RFC 4672, September 2006.

Authors' Addresses πŸ–ŠοΈ

Stefaan De Cnodder Alcatel Francis Wellesplein 1 B-2018 Antwerp Belgium

Phone: +32 3 240 85 15 EMail: stefaan.de_cnodder@alcatel.be

Nagi Reddy Jonnala Cisco Systems, Inc. Divyasree Chambers, B Wing, O'Shaugnessy Road Bangalore-560027, India

Phone: +91 94487 60828 EMail: njonnala@cisco.com

Murtaza Chiba Cisco Systems, Inc. 170 West Tasman Dr. San Jose CA, 95134

Phone: +1 408 525 7198 EMail: mchiba@cisco.com

Copyright (C) The Internet Society (2006).

This document is subject to the rights, licenses and restrictions contained in BCP 78, and except as set forth therein, the authors retain all their rights.

This document and the information contained herein are provided on an "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Intellectual Property πŸ¦‹

The IETF takes no position on the validity or scope of any Intellectual Property Rights or other rights that might be claimed to apply to the implementation or use of the technology described in this document, or on whether any license under such rights might or might not be available. It also doesn't claim to have made any independent effort to identify such rights. Info on the procedures for rights in RFC documents can be found in BCP 78 and BCP 79.

Copies of IPR disclosures made to the IETF Secretariat, any assurances of licenses to be made available, or the result of an attempt to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification can be obtained from the IETF on-line IPR repository at http://www.ietf.org/ipr.

The IETF invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights that may cover technology needed to implement this standard. Please send that info to the IETF at ietf-ipr@ietf.org. πŸ’Œ

Acknowledgement 🌈

Funding for the RFC Editor function is provided by the IETF Administrative Support Activity (IASA). πŸ’–

πŸ“¦ where this page comes from