Add TLS version to logs with linelog

dominic.stalder at unibe.ch dominic.stalder at unibe.ch
Wed Apr 17 08:55:06 UTC 2024


Hi everyone

This is my very first contact with the FreeRadius users mailing list, so please feel free to point me into the right direction about the interaction with this mailing list. Happy to learn how to use it correctly / efficiently.


What I am trying to do and why I am trying to do it:

I am also very new to FreeRadius per se and I am in the middle of a server lifecycle. Our actual production servers run on version 3.0.12 and the new ones have version 3.0.26 installed. As we are an University with a lot of BYOD clients, we still support TLS 1.0 and TLS 1.1 and want to get rid of TLS 1.0 and TLS 1.1 in the near future. To know about the consequences, I would like to get a rough number of how many clients still using those old TLS versions.

I know I can enable / increase the debug level in /etc/freeradius/3.0/radiusd.conf to see the TLS version used for all authentications, BUT this will fill up our logging partition pretty quick.

***

What you expect the server to do:

I would like to have a way to log the client TLS version used in /var/log/authz.log via the linelog module. At the moment, the linelog configuration (/etc/freeradius/3.0/mods-available/linelog) looks like this:

linelog 802.1x_authz_log {
   filename = ${logdir}/authz.log
   reference = "sp.%{%{reply:Packet-Type}:-format}"

   sp {
      Access-Accept = "%t : AuthZ: (%I) Access-Accept: [%{%{reply:User-Name}:-%{User-Name}}] TLS=%{%{TLS-Client-Version}:-NULL} SSID=%{%{request:Called-Station-SSID}:-NULL} Calling-Station-Id=%{%{request:Calling-Station-Id}:-Unknown} Called-Station-Id=%{%{request:Called-Station-Id}:-Unknown} Filter-ID=%{%{reply:Filter-Id}:-NULL} VLAN=%{%{reply:Tunnel-Private-Group-Id}:-NULL} Class=%{%{reply:Class}:-NULL} (from client %{Client-Shortname} port %{%{request:Nas-Port}:-0} cli %{%{request:Calling-Station-Id}:-Unknown})"
   }
}

The post-auth configuration in /etc/freeradius/3.0/sites-available/default looks like this:

post-auth {
update {
          &reply: += &session-state:
     }

     if (EAP-Message) {
          802.1x_authz_log
     }

Is there a way to print out the TLS version in the AuthZ part and if yes, how?

freeradius -X:

id-radiustest1:~# freeradius -X
FreeRADIUS Version 3.0.26
Copyright (C) 1999-2021 The FreeRADIUS server project and contributors
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE
You may redistribute copies of FreeRADIUS under the terms of the
GNU General Public License
For more information about these matters, see the file named COPYRIGHT
Starting - reading configuration files ...
including dictionary file /usr/share/freeradius/dictionary
including dictionary file /usr/share/freeradius/dictionary.dhcp
including dictionary file /usr/share/freeradius/dictionary.vqp
including dictionary file /etc/freeradius/3.0/dictionary
including configuration file /etc/freeradius/3.0/radiusd.conf
including configuration file /etc/freeradius/3.0/proxy.conf
including configuration file /etc/freeradius/3.0/clients.conf
including files in directory /etc/freeradius/3.0/mods-enabled/
including configuration file /etc/freeradius/3.0/mods-enabled/preprocess
including configuration file /etc/freeradius/3.0/mods-enabled/expr
including configuration file /etc/freeradius/3.0/mods-enabled/sradutmp
including configuration file /etc/freeradius/3.0/mods-enabled/dynamic_clients
including configuration file /etc/freeradius/3.0/mods-enabled/always
including configuration file /etc/freeradius/3.0/mods-enabled/linelog
including configuration file /etc/freeradius/3.0/mods-enabled/files
including configuration file /etc/freeradius/3.0/mods-enabled/cache_eap
including configuration file /etc/freeradius/3.0/mods-enabled/eap
including configuration file /etc/freeradius/3.0/mods-enabled/attr_filter
including configuration file /etc/freeradius/3.0/mods-enabled/realm
including configuration file /etc/freeradius/3.0/mods-enabled/detail
including configuration file /etc/freeradius/3.0/mods-enabled/unpack
including configuration file /etc/freeradius/3.0/mods-enabled/detail.log
including files in directory /etc/freeradius/3.0/policy.d/
including configuration file /etc/freeradius/3.0/policy.d/operator-name
including configuration file /etc/freeradius/3.0/policy.d/debug
including configuration file /etc/freeradius/3.0/policy.d/filter
including configuration file /etc/freeradius/3.0/policy.d/accounting
including configuration file /etc/freeradius/3.0/policy.d/canonicalization
including configuration file /etc/freeradius/3.0/policy.d/rfc7542
including configuration file /etc/freeradius/3.0/policy.d/cui
including configuration file /etc/freeradius/3.0/policy.d/eap
including configuration file /etc/freeradius/3.0/policy.d/control
including files in directory /etc/freeradius/3.0/sites-enabled/
including configuration file /etc/freeradius/3.0/sites-enabled/default
including configuration file /etc/freeradius/3.0/sites-enabled/proxy-inner-tunnel
including configuration file /etc/freeradius/3.0/sites-enabled/control-socket
main {
security {
    user = "freerad"
    group = "freerad"
    allow_core_dumps = no
}
     name = "freeradius"
     prefix = "/usr"
     localstatedir = "/var"
     logdir = "/var/log/freeradius"
     run_dir = "/var/run/freeradius"
}
main {
     name = "freeradius"
     prefix = "/usr"
     localstatedir = "/var"
     sbindir = "/usr/sbin"
     logdir = "/var/log/freeradius"
     run_dir = "/var/run/freeradius"
     libdir = "/usr/lib/freeradius"
     radacctdir = "/var/log/freeradius/radacct"
     hostname_lookups = no
     max_request_time = 30
     cleanup_delay = 5
     max_requests = 16384
     postauth_client_lost = no
     pidfile = "/var/run/freeradius/freeradius.pid"
     checkrad = "/usr/sbin/checkrad"
     debug_level = 0
     proxy_requests = yes
log {
    stripped_names = no
    auth = yes
    auth_badpass = no
    auth_goodpass = no
    colourise = yes
    msg_denied = "You are already logged in - access denied"
}
resources {
}
security {
    max_attributes = 200
    reject_delay = 1.000000
    status_server = yes
}
}
radiusd: #### Loading Realms and Home Servers ####
proxy server {
    retry_delay = 5
    retry_count = 3
    default_fallback = no
    dead_time = 120
    wake_all_if_all_dead = no
}
...
radiusd: #### Loading Clients ####
...
Debugger not attached
systemd watchdog is disabled
# Creating Auth-Type = eap
# Creating Auth-Type = mschap
radiusd: #### Instantiating modules ####
modules {
  # Loaded module rlm_preprocess
  # Loading module "preprocess" from file /etc/freeradius/3.0/mods-enabled/preprocess
  preprocess {
     huntgroups = "/etc/freeradius/3.0/mods-config/preprocess/huntgroups"
     hints = "/etc/freeradius/3.0/mods-config/preprocess/hints"
     with_ascend_hack = no
     ascend_channels_per_line = 23
     with_ntdomain_hack = no
     with_specialix_jetstream_hack = no
     with_cisco_vsa_hack = no
     with_alvarion_vsa_hack = no
  }
  # Loaded module rlm_expr
  # Loading module "expr" from file /etc/freeradius/3.0/mods-enabled/expr
  expr {
     safe_characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /äéöüàâæçèéêëîïôœùûüaÿÄÉÖÜßÀÂÆÇÈÉÊËÎÏÔŒÙÛÜŸ"
  }
  # Loaded module rlm_radutmp
  # Loading module "sradutmp" from file /etc/freeradius/3.0/mods-enabled/sradutmp
  radutmp sradutmp {
     filename = "/var/log/freeradius/sradutmp"
     username = "%{User-Name}"
     case_sensitive = yes
     check_with_nas = yes
     permissions = 420
     caller_id = no
  }
  # Loaded module rlm_dynamic_clients
  # Loading module "dynamic_clients" from file /etc/freeradius/3.0/mods-enabled/dynamic_clients
  # Loaded module rlm_always
  # Loading module "reject" from file /etc/freeradius/3.0/mods-enabled/always
  always reject {
     rcode = "reject"
     simulcount = 0
     mpp = no
  }
  # Loading module "fail" from file /etc/freeradius/3.0/mods-enabled/always
  always fail {
     rcode = "fail"
     simulcount = 0
     mpp = no
  }
  # Loading module "ok" from file /etc/freeradius/3.0/mods-enabled/always
  always ok {
     rcode = "ok"
     simulcount = 0
     mpp = no
  }
  # Loading module "handled" from file /etc/freeradius/3.0/mods-enabled/always
  always handled {
     rcode = "handled"
     simulcount = 0
     mpp = no
  }
  # Loading module "invalid" from file /etc/freeradius/3.0/mods-enabled/always
  always invalid {
     rcode = "invalid"
     simulcount = 0
     mpp = no
  }
  # Loading module "userlock" from file /etc/freeradius/3.0/mods-enabled/always
  always userlock {
     rcode = "userlock"
     simulcount = 0
     mpp = no
  }
  # Loading module "notfound" from file /etc/freeradius/3.0/mods-enabled/always
  always notfound {
     rcode = "notfound"
     simulcount = 0
     mpp = no
  }
  # Loading module "noop" from file /etc/freeradius/3.0/mods-enabled/always
  always noop {
     rcode = "noop"
     simulcount = 0
     mpp = no
  }
  # Loading module "updated" from file /etc/freeradius/3.0/mods-enabled/always
  always updated {
     rcode = "updated"
     simulcount = 0
     mpp = no
  }
  # Loaded module rlm_linelog
  # Loading module "802.1x_authz_log" from file /etc/freeradius/3.0/mods-enabled/linelog
  linelog 802.1x_authz_log {
     filename = "/var/log/freeradius/authz.log"
     escape_filenames = no
     syslog_severity = "info"
     permissions = 384
     reference = "sp.%{%{reply:Packet-Type}:-format}"
  }
  # Loading module "acct_log" from file /etc/freeradius/3.0/mods-enabled/linelog
  linelog acct_log {
     filename = "/var/log/freeradius/acct.log"
     escape_filenames = no
     syslog_severity = "info"
     permissions = 384
     format = "Something has gone wrong with the acct_log"
     reference = "Accounting-Request.%{%{Acct-Status-Type}:-unknown}"
  }
  # Loaded module rlm_files
  # Loading module "files" from file /etc/freeradius/3.0/mods-enabled/files
  files {
     filename = "/etc/freeradius/3.0/mods-config/files/authorize"
     acctusersfile = "/etc/freeradius/3.0/mods-config/files/accounting"
     preproxy_usersfile = "/etc/freeradius/3.0/mods-config/files/pre-proxy"
  }
  # Loaded module rlm_cache
  # Loading module "cache_eap" from file /etc/freeradius/3.0/mods-enabled/cache_eap
  cache cache_eap {
     driver = "rlm_cache_rbtree"
     key = "%{%{control:State}:-%{%{reply:State}:-%{State}}}"
     ttl = 15
     max_entries = 0
     epoch = 0
     add_stats = no
  }
  # Loaded module rlm_eap
  # Loading module "eap" from file /etc/freeradius/3.0/mods-enabled/eap
  eap {
     default_eap_type = "PEAP"
     timer_expire = 60
     ignore_unknown_eap_types = yes
     cisco_accounting_username_bug = no
     max_sessions = 8192
  }
  # Loaded module rlm_attr_filter
  # Loading module "attr_filter.post-proxy" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.post-proxy {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/post-proxy"
     key = "%{Realm}"
     relaxed = no
  }
  # Loading module "attr_filter.pre-proxy" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.pre-proxy {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/pre-proxy"
     key = "%{Realm}"
     relaxed = no
  }
  # Loading module "attr_filter.access_reject" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.access_reject {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/access_reject"
     key = "%{User-Name}"
     relaxed = no
  }
  # Loading module "attr_filter.access_challenge" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.access_challenge {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/access_challenge"
     key = "%{User-Name}"
     relaxed = no
  }
  # Loading module "attr_filter.accounting_response" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.accounting_response {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/accounting_response"
     key = "%{User-Name}"
     relaxed = no
  }
  # Loading module "attr_filter.coa" from file /etc/freeradius/3.0/mods-enabled/attr_filter
  attr_filter attr_filter.coa {
     filename = "/etc/freeradius/3.0/mods-config/attr_filter/coa"
     key = "%{User-Name}"
     relaxed = no
  }
  # Loaded module rlm_realm
  # Loading module "IPASS" from file /etc/freeradius/3.0/mods-enabled/realm
  realm IPASS {
     format = "prefix"
     delimiter = "/"
     ignore_default = no
     ignore_null = no
  }
  # Loading module "suffix" from file /etc/freeradius/3.0/mods-enabled/realm
  realm suffix {
     format = "suffix"
     delimiter = "@"
     ignore_default = no
     ignore_null = no
  }
  # Loading module "bangpath" from file /etc/freeradius/3.0/mods-enabled/realm
  realm bangpath {
     format = "prefix"
     delimiter = "!"
     ignore_default = no
     ignore_null = no
  }
  # Loading module "realmpercent" from file /etc/freeradius/3.0/mods-enabled/realm
  realm realmpercent {
     format = "suffix"
     delimiter = "%"
     ignore_default = no
     ignore_null = no
  }
  # Loading module "ntdomain" from file /etc/freeradius/3.0/mods-enabled/realm
  realm ntdomain {
     format = "prefix"
     delimiter = "\\"
     ignore_default = no
     ignore_null = no
  }
  # Loaded module rlm_detail
  # Loading module "detail" from file /etc/freeradius/3.0/mods-enabled/detail
  detail {
     filename = "/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/detail-%Y%m%d"
     header = "%t"
     permissions = 384
     locking = no
     escape_filenames = no
     log_packet_header = no
  }
  # Loaded module rlm_unpack
  # Loading module "unpack" from file /etc/freeradius/3.0/mods-enabled/unpack
  # Loading module "auth_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  detail auth_log {
     filename = "/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/auth-detail-%Y%m%d"
     header = "%t"
     permissions = 384
     locking = no
     escape_filenames = no
     log_packet_header = no
  }
  # Loading module "reply_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  detail reply_log {
     filename = "/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/reply-detail-%Y%m%d"
     header = "%t"
     permissions = 384
     locking = no
     escape_filenames = no
     log_packet_header = no
  }
  # Loading module "pre_proxy_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  detail pre_proxy_log {
     filename = "/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/pre-proxy-detail-%Y%m%d"
     header = "%t"
     permissions = 384
     locking = no
     escape_filenames = no
     log_packet_header = no
  }
  # Loading module "post_proxy_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  detail post_proxy_log {
     filename = "/var/log/freeradius/radacct/%{%{Packet-Src-IP-Address}:-%{Packet-Src-IPv6-Address}}/post-proxy-detail-%Y%m%d"
     header = "%t"
     permissions = 384
     locking = no
     escape_filenames = no
     log_packet_header = no
  }
  instantiate {
  }
  # Instantiating module "preprocess" from file /etc/freeradius/3.0/mods-enabled/preprocess
reading pairlist file /etc/freeradius/3.0/mods-config/preprocess/huntgroups
reading pairlist file /etc/freeradius/3.0/mods-config/preprocess/hints
  # Instantiating module "reject" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "fail" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "ok" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "handled" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "invalid" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "userlock" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "notfound" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "noop" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "updated" from file /etc/freeradius/3.0/mods-enabled/always
  # Instantiating module "802.1x_authz_log" from file /etc/freeradius/3.0/mods-enabled/linelog
  # Instantiating module "acct_log" from file /etc/freeradius/3.0/mods-enabled/linelog
  # Instantiating module "files" from file /etc/freeradius/3.0/mods-enabled/files
reading pairlist file /etc/freeradius/3.0/mods-config/files/authorize
reading pairlist file /etc/freeradius/3.0/mods-config/files/accounting
reading pairlist file /etc/freeradius/3.0/mods-config/files/pre-proxy
  # Instantiating module "cache_eap" from file /etc/freeradius/3.0/mods-enabled/cache_eap
rlm_cache (cache_eap): Driver rlm_cache_rbtree (module rlm_cache_rbtree) loaded and linked
  # Instantiating module "eap" from file /etc/freeradius/3.0/mods-enabled/eap
   # Linked to sub-module rlm_eap_peap
   peap {
     tls = "tls-common"
     default_eap_type = "mschapv2"
     copy_request_to_tunnel = yes
     use_tunneled_reply = yes
     proxy_tunneled_request_as_eap = yes
     virtual_server = "proxy-inner-tunnel"
     soh = no
     require_client_cert = no
   }
   tls-config tls-common {
     verify_depth = 0
     ca_path = "/etc/freeradius/3.0/certs"
     pem_file_type = yes
     private_key_file = "/etc/freeradius/3.0/certs/server.key"
     certificate_file = "/etc/freeradius/3.0/certs/server.crt"
     fragment_size = 1024
     include_length = yes
     auto_chain = yes
     check_crl = no
     check_all_crl = no
     ca_path_reload_interval = 0
     cipher_list = "DEFAULT at SECLEVEL=0"
     reject_unknown_intermediate_ca = no
     ecdh_curve = "prime256v1"
     tls_max_version = "1.3"
     tls_min_version = "1.0"
    cache {
    enable = no
    lifetime = 12
    name = "EAP module"
    max_entries = 0
    persist_dir = "/var/log/freeradius/tlscache"
    }
    verify {
    skip_if_ocsp_ok = no
    }
    ocsp {
    enable = no
    override_cert_url = no
    use_nonce = yes
    timeout = 0
    softfail = no
    }
   }
   # Linked to sub-module rlm_eap_mschapv2
   mschapv2 {
     with_ntdomain_hack = no
     send_error = no
   }
  # Instantiating module "attr_filter.post-proxy" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/post-proxy
  # Instantiating module "attr_filter.pre-proxy" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/pre-proxy
  # Instantiating module "attr_filter.access_reject" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/access_reject
  # Instantiating module "attr_filter.access_challenge" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/access_challenge
  # Instantiating module "attr_filter.accounting_response" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/accounting_response
  # Instantiating module "attr_filter.coa" from file /etc/freeradius/3.0/mods-enabled/attr_filter
reading pairlist file /etc/freeradius/3.0/mods-config/attr_filter/coa
  # Instantiating module "IPASS" from file /etc/freeradius/3.0/mods-enabled/realm
  # Instantiating module "suffix" from file /etc/freeradius/3.0/mods-enabled/realm
  # Instantiating module "bangpath" from file /etc/freeradius/3.0/mods-enabled/realm
  # Instantiating module "realmpercent" from file /etc/freeradius/3.0/mods-enabled/realm
  # Instantiating module "ntdomain" from file /etc/freeradius/3.0/mods-enabled/realm
  # Instantiating module "detail" from file /etc/freeradius/3.0/mods-enabled/detail
  # Instantiating module "auth_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
rlm_detail (auth_log): 'User-Password' suppressed, will not appear in detail output
  # Instantiating module "reply_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  # Instantiating module "pre_proxy_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
  # Instantiating module "post_proxy_log" from file /etc/freeradius/3.0/mods-enabled/detail.log
} # modules
radiusd: #### Loading Virtual Servers ####
server { # from file /etc/freeradius/3.0/radiusd.conf
} # server
server default { # from file /etc/freeradius/3.0/sites-enabled/default
# Loading authenticate {...}
Compiling Auth-Type eap for attr Auth-Type
# Loading authorize {...}
# Loading preacct {...}
# Loading accounting {...}
# Loading pre-proxy {...}
# Loading post-proxy {...}
# Loading post-auth {...}
Compiling Post-Auth-Type REJECT for attr Post-Auth-Type
} # server default
server proxy-inner-tunnel { # from file /etc/freeradius/3.0/sites-enabled/proxy-inner-tunnel
# Loading authenticate {...}
Compiling Auth-Type mschap for attr Auth-Type
# Loading authorize {...}
} # server proxy-inner-tunnel
radiusd: #### Opening IP addresses and Ports ####
listen {
    type = "control"
listen {
    socket = "/var/run/freeradius/control/freeradius.sock"
    uid = "freerad"
    gid = "freerad"
    mode = "rw"
    peercred = no
}

Thanks a lot for any advice and best regards
Dominic


More information about the Freeradius-Users mailing list