default.conf
# 指出这是FreeRADIUS 2.0.0版本开始支持的虚拟主机配置文件。
# 虚拟主机配置应放置在sites-available目录中,并通过软链接放置在sites-enabled目录中,以便正常安装。
# 如果使用802.1X (EAP)认证,还需编辑inner-tunnel虚拟服务器。
# 强调在编辑此文件前应阅读man radiusd和man unlang文档,了解调试方法和配置文件格式。
# 此配置旨在在最广泛的环境下工作,使用最广泛的认证方法,因此通常不需要对此文件进行大量修改。
# 建议管理员仔细编辑此文件,大量修改可能会导致服务器故障。应小规模修改并使用radiusd -X测试服务器。
# 有许多模块(如ldap、sql等)的引用被注释掉了,它们作为占位符。如果需要这些模块的功能,则应在radiusd.conf中配置它们,并取消此文件中对应引用的注释。
server default {
# 如果服务器需要监听额外的地址或端口,可以使用多个"listen"部分。
# 每个部分只让服务器监听一种数据包类型,因此认证和计费需要在不同的部分中配置。
# 如果在命令行中使用'-i'和'-p',则服务器将忽略所有"listen"部分。
listen {
# 要监听的数据包类型:
# auth 监听认证数据包
# acct 监听计费数据包
# auth+acct 同时监听认证和计费数据包
# proxy 用于发送代理数据包的IP
# detail 从detail文件读取。示例见raddb/sites-available/copy-acct-to-home-server
# status 监听Status-Server数据包。示例见raddb/sites-available/status
# coa 监听CoA-Request和Disconnect-Request数据包。示例见raddb/sites-available/coa
type = auth
# 要监听的IP地址。
# ipv4addr = *
# ipv6addr = *
ipaddr = *
# 要监听的端口。例如:1812
# 0 表示 "使用/etc/services中的适当端口"
port = 0
# 有的系统除了支持IP地址外,还支持绑定到接口
# interface = eth0
# 里的名称是对radiusd.conf或clients.conf中其他部分的引用。如果使用此配置,则会忽略此“侦听”部分的全局客户端列表。有关“per_socket_clients”的配置,请参阅clients.conf。
# clients = per_socket_clients
# 设置默认的UDP接收缓冲区大小,一般不需要,内核设置的默认值已经满足大多数场景,特殊情况下可以设置。
# recv_buff = 65536
# 连接数限制,仅适用于TCP场景
limit {
# 限制socket上最大tcp连接数为16,若设置为0则为不限制。
max_connections = 16
# TCP链接的生命周期,单位s,设置为0则是永远。
lifetime = 0
# TCP连接的空闲超时,以秒为单位。0表示不超时。
idle_timeout = 30
}
}
# 第二个listen用于监听计费
listen {
ipaddr = *
# ipv6addr = ::
port = 0
type = acct
# interface = eth0
# clients = per_socket_clients
limit {
# 计费数据包的最大速率,当超过最大速率的时候将计费报文将被丢弃。推荐将其设置为比正常计费负载多50%。0表示不限制。
# max_pps = 0
# 仅适用于"proto = tcp"。对于"udp"套接字,这些将被忽略。
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
}
}
# IPv6的认证监听
listen {
type = auth
ipv6addr = :: # any. ::1 == localhost
port = 0
# interface = eth0
# clients = per_socket_clients
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
# IPv6的计费监听
listen {
ipv6addr = ::
port = 0
type = acct
# interface = eth0
# clients = per_socket_clients
limit {
# max_pps = 0
# idle_timeout = 0
# lifetime = 0
# max_connections = 0
}
}
# 授权
#首先预处理 (hints and huntgroups files),然后是 realms, 最后在 "users" 文件中查找。
# 在这里做的任何更改也应该应用于“inner-tunnel”虚拟服务器。
#
# realm模块的顺序将决定我们尝试找到匹配 realm的顺序。
#
# 如果需要为远程RADIUS服务器设置提示,则'preprocess'在任何realm之前加载。
authorize {
# 检查用户名是有有效,无效将被拒绝,参见policy.d/filter中filter_username策略的定义。
filter_username
# 检查密码,一些nas将发送格式不标准的密码,例如User-Password = "password\000\000",将被转换为User-Password = "password"
# filter_password
# preprocess模块负责清理请求中的一些奇怪的属性,并将其转换为更标准属性。
# 它负责处理'raddb/mods-config/preprocess/hints'和'raddb/mods-config/preprocess/huntgroups'文件。
preprocess
# 如果您打算使用CUI(客户端唯一标识),并且需要为CUI生成设置Operator-Name,并且您想为本地客户端也生成CUI,则取消下面operator-name的注释,并在clients.conf中为您的客户端设置operator-name
# operator-name
#
# If you want to generate CUI for some clients that do not
# send proper CUI requests, then uncomment the
# 如果您想为一些不发送适当CUI请求的客户端生成CUI,那么取消下面cui的注释,并在clients.conf中为这些客户端设置"add_cui = yes"
# cui
# 如果您想记录认证请求,取消下面一行的注释。
# auth_log
# chap模块将设置'Auth-Type := CHAP'
chap
# mschap模块将设置'Auth-Type := MSCHAP',这将导致服务器随后使用mschap模块进行认证。
mschap
# Cisco SIP服务器对接FreeRADIUS进行认证,取消下面一行的注释,以及在'authenticate'部分的'digest'行。
digest
# WiMAX规范称Calling-Station-Id是6个八位位组的MAC。如果您正在使用WiMAX 2.1(LTE),取消注释将允许模块处理SQN重新同步。
# wimax
# 查找IPASS风格的'realm/',如果没有找到,查找'@realm',并根据此决定是否代理。
# IPASS
#
# Look for realms in user@domain format
suffix
ntdomain
# EAP模块:在FreeRADIUS中负责处理EAP认证的模块,支持多种EAP方法,如EAP-MD5、EAP-TLS和EAP-LEAP。
# EAP-Type属性:EAP模块会在请求的属性列表中设置EAP-Type属性,这个属性指示了数据包中的EAP类型。
# 返回值"ok"或"updated":EAP模块在不同情况下会返回不同的值。如果模块还没有准备好进行用户认证,它会返回"ok"或"updated"。在这种情况下,"ok"表示EAP交换尚未完成,而"updated"表示EAP交换已经更新了请求但还没有完成。
# 停止处理"authorize"部分:如果EAP模块返回"ok",配置文件中的指令会停止进一步处理"authorize"部分。这意味着在EAP认证过程完成之前,不会执行任何后续的授权检查。
# 不查询LDAP和/或SQL服务器:在TTLS(隧道传输层安全)或PEAP(受保护的EAP)的初始设置阶段,不会对LDAP(轻量级目录访问协议)和/或SQL(结构化查询语言)服务器进行查询。
# 注释掉的"updated"检查:原始配置中"updated = return"这一行被注释掉了,这是为了与旧版本的配置兼容。如果取消注释,当EAP模块返回"updated"时,也会停止处理"authorize"部分。这可以减少在TTLS或PEAP认证过程中对LDAP和/或SQL服务器的查询次数。
eap {
ok = return
# updated = return
}
# 使用存储在/etc/passwd或/etc/shadow中的加密密码
# unix
# 读取'users'文件。在v3中,它位于raddb/mods-config/files/authorize文件中
# files
# 从数据库中查询用户,参见mods-available/sql中的"Authorization Queries"
sql
# 如果您正在使用/etc/smbpasswd,并且还正在进行mschap认证,取消下面一行的注释,并配置'smbpasswd'模块。
# smbpasswd
# ldap模块从LDAP数据库中读取密码。
-ldap
# 如果您正在使用活动目录和PAP,则取消下面几行的注释,这将允许您对AD进行PAP认证。
# if ((ok || updated) && User-Password && !control:Auth-Type) {
# update control {
# &Auth-Type := ldap
# }
# }
#
# 强制执行每天登录时间的限制。
# daily
#
expiration
logintime
# 如果没有其他模块声称负责认证,则尝试使用PAP。这个模块应该列在最后,以便其他模块有机会为自己设置Auth-Type。
pap
# 如果"status_server = yes",则Status-Server消息将通过以下部分传递,并且仅通过以下部分传递。
# Autz-Type Status-Server {
#
# }
# RADIUS/TLS(或RadSec)连接通过本节处理。有关更多信息,请参见sites-available/tls和配置项"check_client_connections"。如果本节返回"ok"或"updated",则接受连接。否则,终止连接。
Autz-Type New-TLS-Connection {
ok
}
}
# 通常,您不应设置Auth-Type属性。服务器将自行弄清楚,并会做正确的事情。手动设置Auth-Type属性的常见原因是强制拒绝用户(Auth-Type := Reject),或强制接受用户(Auth-Type := Accept)。
authenticate {
# 当'authorize'部分中列出的后端数据库提供密码时,进行PAP认证。
Auth-Type PAP {
pap
}
# 大多数人想要CHAP认证
# 'authorize'部分中列出的后端数据库必须提供明文密码。加密密码不会起作用。
Auth-Type CHAP {
chap
}
#
# MSCHAP authentication.
Auth-Type MS-CHAP {
mschap
}
# 对于旧名称也是如此。
mschap
# Cisco SIP服务器对接FreeRADIUS进行认证,取消下面一行的注释,以及在'authenticate'部分的'digest'行。
digest
#
# 可插拔认证模块。
# pam
# 如果您想使用ldap进行认证,请取消下面一行的注释。
# Auth-Type LDAP {
# ldap
# }
# 允许EAP认证。
eap
# 旧的配置在Access-Challenge数据包中发送了一些属性,这在严格意义上是不正确的。如果您想过滤掉这些属性,请取消下面几行的注释。
# Auth-Type eap {
# eap {
# handled = 1
# }
# if (handled && (Response-Packet-Type == Access-Challenge)) {
# attr_filter.access_challenge.post-auth
# handled # override the "updated" code from attr_filter
# }
# }
}
# 预计费。决定使用哪种计费类型。
preacct {
preprocess
#将Acct-[Input|Output]-Gigawords和Acct-[Input-Output]-Octets合并为单个64位计数器Acct-[Input|Output]-Octets64。
# acct_counters64
# NAS从不发送"开始时间"。相反,它发送一个开始数据包,*可能*带有Acct-Delay-Time。服务器应该得出结论,开始时间是"Acct-Delay-Time"秒前。开始时间是:NOW - delay - session_length
# update request {
# &FreeRADIUS-Acct-Session-Start-Time = "%{expr: %l - %{%{Acct-Session-Time}:-0} - %{%{Acct-Delay-Time}:-0}}"
# }
# 确保会话的唯一性
acct_unique
# 查找IPASS风格的'realm/',如果没有找到,查找'@realm',并根据此决定是否代理。
# IPASS
suffix
# ntdomain
#
# 读取'acct_users'文件
files
}
#
# 计费,记录计费数据
#
accounting {
# 通过添加CUI属性更新计费数据包,仅在NAS本身不支持CUI时使用
# cui
# 创建数据包的"详细"日志。代理的计费请求也记录在详细文件中。
detail
# daily
# 更新wtmp文件,如果您不使用"radlast",则可以删除此行。
unix
# FreeRADIUS提供了用于跟踪用户会话以防止同时登录的模块,但是由于网络中可能发生的数据包丢失,这些跟踪数据可能不完全准确。如果你想要启用会话跟踪功能,你需要去掉radutmp或sradutmp前面的注释符号#
# radutmp # 是一个传统的会话跟踪模块。
# sradutmp # 是一个会话跟踪模块,它使用更安全的方法来存储会话状态,以抵抗某些类型的网络攻击。
# sqlippool是FreeRADIUS中的一个模块,用于管理SQL数据库中的IP地址池。它负责在会话开始时分配IP地址,以及在会话结束时将IP地址返还回池中。
# sqlippool
# 使用sql模块将流量记录到SQL数据库中。如果你想查看或修改用于记录流量的SQL查询语句,你应该参考mods-available/sql目录下的相应模块配置文件。
-sql
# 如果您收到具有零会话长度的停止数据包,它们将不会被记录在数据库中。SQL模块将打印一条消息(仅在调试模式下),并将返回"noop"。
# 您可以通过取消下面三行注释来忽略这些数据包。否则,服务器将不会响应会计请求,NAS将重新传输。
# if (noop) {
# ok
# }
# Cisco VoIP特定的批量会计
# pgsql-voip
# For Exec-Program and Exec-Program-Wait
exec
# 从计费响应中过滤属性。
attr_filter.accounting_response
# 参见"Autz-Type Status-Server"了解此功能的工作原理。
# Acct-Type Status-Server {
#
# }
}
# FreeRADIUS提供了两种不同的模块来处理会话数据库和同时使用检查:radutmp和rlm_sql。注释中提到rlm_sql模块在性能上要快得多,因此推荐使用rlm_sql模块而不是radutmp。
session {
# radutmp
# See "Simultaneous Use Checking Queries" in mods-available/sql
# sql
}
# 认证后
post-auth {
# 如果您的网络策略需要在后续的CoA-Request中使用State属性,或者您想要设置Service-Type为Authorize-Only,您可以取消注释并启用下面的配置块。这样做将会在回复消息中添加一个随机生成的State属性,该属性随后可以被用来标识特定的会话,以便进行动态授权更改
# if (!&reply:State) {
# update reply {
# State := "0x%{randstr:16h}"
# }
# }
# 通常User-Name == EAP Identity == TLS-Client-Cert-Common-Name
# 拒绝User-Name != TLS-Client-Cert-Common-Name的数据包,如果启用了verify_tls_client_common_name模块,FreeRADIUS服务器将检查传入的RADIUS请求中的User-Name属性,确保它与客户端TLS证书中的Common Name一致。如果不一致,服务器将拒绝该请求。
# verify_tls_client_common_name
# 如果用户认证的radius报文中缺少Stripped-User-Name,将使用证书中的名称作为Stripped-User-Name,服务器还将创建一个包含多个属性值的MD5哈希的Class属性,并将其添加到回复消息中。这些属性包括客户端证书的详细信息和NAS(网络访问服务器)的信息。
# if (&EAP-Message && !&Stripped-User-Name && &TLS-Client-Cert-Serial) {
# update request {
# &Stripped-User-Name := "%{%{TLS-Client-Cert-Subject-Alt-Name-Email}:-%{%{TLS-Client-Cert-Common-Name}:-%{TLS-Client-Cert-Serial}}}"
# }
#
# update reply {
# Class += "%{md5:%{Calling-Station-Id}%{Called-Station-Id}%{TLS-Client-Cert-Subject-Alt-Name-Email}%{TLS-Client-Cert-Common-Name}%{TLS-Client-Cert-Serial}%{NAS-IPv6-Address}%{NAS-IP-Address}%{NAS-Identifier}%{NAS-Port}"
# }
#
# }
# 在EAP-TTLS或PEAP认证过程中,会缓存部分数据,等认证完成之后就会自动删除,为了避免在回复消息中重复包含User-Name属性,配置中包含了一个条件语句,它会检查reply和request中是否有相同的User-Name属性,如果有,它会从reply中移除这个属性。最后,使用update指令将session-state中的所有属性追加到回复消息中
if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
update reply {
&User-Name !* ANY
}
}
update {
&reply: += &session-state:
}
# 当收到开始或者更新报文的时候将会刷新地址租约,收到停止报文的时候就回收地址,若启用就取消掉下面的注释
# sqlippool
# 创建CUI值并将属性添加到Access-Accept。
# cui
# 在用户认证成功后,但在实际网络计费开始之前,创建一个不包含任何网络使用数据的计费会话记录。这可以用于初始化会话跟踪,同时确保在网络会话的整个生命周期中,计费信息的记录是连续和完整的。
# sql_session_start
# 如果您想记录认证回复日志,取消下面一行的注释,并启用'detail reply_log'模块。
# reply_log
# 用户认证之后,再执行一次SQL查询。参见mods-available/sql中的"Authentication Logging Queries"
-sql
# 在成功登录后修改用户在LDAP中的对象。
# ldap
# For Exec-Program and Exec-Program-Wait
exec
# 启用wimax
# wimax
# 在处理EAP-TLS、PEAP和TTLS认证时,服务器可以在证书验证后更新一系列与证书相关的属性,并将这些属性添加到回复消息中
# update reply {
# Reply-Message += "%{TLS-Cert-Serial}"
# Reply-Message += "%{TLS-Cert-Expiration}"
# Reply-Message += "%{TLS-Cert-Subject}"
# Reply-Message += "%{TLS-Cert-Issuer}"
# Reply-Message += "%{TLS-Cert-Common-Name}"
# Reply-Message += "%{TLS-Cert-Subject-Alt-Name-Email}"
#
# Reply-Message += "%{TLS-Client-Cert-Serial}"
# Reply-Message += "%{TLS-Client-Cert-Expiration}"
# Reply-Message += "%{TLS-Client-Cert-Subject}"
# Reply-Message += "%{TLS-Client-Cert-Issuer}"
# Reply-Message += "%{TLS-Client-Cert-Common-Name}"
# Reply-Message += "%{TLS-Client-Cert-Subject-Alt-Name-Email}"
# }
# 启用该指令,FreeRADIUS服务器将在每次认证响应中插入一个包含唯一值的Class属性,这有助于确保Acct-Session-Id的唯一性,并提高会话匹配的准确性。不过,为了使这个功能正常工作,你的NAS设备需要支持RFC 2865中定义的Class属性行为,并且能够处理长类属性。
# insert_acct_class
# MacSEC需要使用EAP-Key-Name。EAP模块将所需数据放入EAP-Session-Id属性中。这个属性从不放入请求或响应数据包中。取消下面几行注释可以将所需数据复制到EAP-Key-Name属性中
# if (&reply:EAP-Session-Id) {
# update reply {
# EAP-Key-Name := &reply:EAP-Session-Id
# }
# }
# 如果你希望FreeRADIUS服务器在发送包含EAP-Message属性的响应时不包含任何额外的文本消息,你可以通过取消注释来启用remove_reply_message_if_eap指令。这样做可以确保在EAP认证过程中,只有EAP相关的信息被传输,而不会有额外的文本消息干扰。
remove_reply_message_if_eap
# 在处理被拒绝的认证请求时,服务器会通过REJECT子部分定义的逻辑来构造Access-Reject响应。在这个过程中,服务器可能会记录失败的认证尝试到SQL数据库,应用属性过滤器,插入EAP-Failure消息,并在必要时移除Reply-Message属性。这些操作有助于提供更多关于认证失败的信息,同时保持响应的整洁和清晰。
Post-Auth-Type REJECT {
-sql
attr_filter.access_reject
eap
remove_reply_message_if_eap
}
# 处理Access-Challenge响应时,可以通过特定的配置来过滤包含在响应中的属性
Post-Auth-Type Challenge {
# remove_reply_message_if_eap
# attr_filter.access_challenge.post-auth
}
#当客户端在EAP协商过程中停止响应时,FreeRADIUS服务器将执行Client-Lost部分的配置。这可以用于记录和调试EAP协商问题,尤其是当客户端因为某些原因(如证书不可接受)而停止响应时。在这种情况下,只有会话状态列表中的属性是可用的,因为原始的请求属性已经不可用。如果你想要调试信息,你需要取消注释并启用相关的调试指令。此外,如果客户端请求中包含了EAP-Key-Name,FreeRADIUS可以将其值回显到回复中。
Post-Auth-Type Client-Lost {
# 调试EAP协商期间执行的所有TLS状态变化。
# %{debug_attr:&session-state:TLS-Session-Information[*]}
# 调试EAP协商期间执行的最后一个TLS状态变化。对于错误,这通常是来自客户端的TLS警报
# %{debug_attr:&session-state:TLS-Session-Information[n]}
# 调试最后一次模块失败消息。
# %{debug_attr:&session-state:Module-Failure-Message}
}
# 如果客户端在请求中发送了EAP-Key-Name,那么在回复中回显实际值。
if (EAP-Key-Name && &reply:EAP-Session-Id) {
update reply {
&EAP-Key-Name := &reply:EAP-Session-Id
}
}
}
# 当服务器决定将请求代理到主服务器时,被代理的请求首先通过预代理阶段。在这个阶段可以重写请求,或决定取消代理。
pre-proxy {
# 在代理请求之前添加一个Operator-Name属性,以标识是否为此客户端找到了operator-name。如果您已经在authorize部分启用了此功能,则无需取消注释。
# operator-name
# 客户端通过发送包含一个零字节的CUI属性来请求CUI。
# cui
# 如果您想根据preproxy_users文件中定义的规则更改属性,请取消下面一行的注释。
# files
# 如果您想根据'attrs.pre-proxy'文件中定义的规则过滤发送到远程服务器的请求,请取消下面一行的注释。
# attr_filter.pre-proxy
# 如果您想记录代理到主服务器的数据包,请取消下面一行的注释,并取消上面'detail pre_proxy_log'部分的注释。
# pre_proxy_log
}
# 当服务器接收到它代理到主服务器的请求的回复时,请求可能在后代理阶段这里被处理。
post-proxy {
# 如果您想记录来自主服务器的回复,请取消下面一行的注释,并取消上面'post_proxy_log'部分的注释。
# post_proxy_log
# 如果您想根据'attrs'文件中定义的规则过滤来自远程代理的回复,请取消下面一行的注释。
# attr_filter.post-proxy
# 如果您正在代理LEAP,您必须配置EAP模块,并且必须在后代理阶段列出它。您还必须在'realm'配置中使用'nostrip'选项。
# 否则,代理请求中的User-Name属性将不匹配隐藏在EAP数据包中的用户名,并且最终服务器将拒绝EAP请求。
eap
# 如果FreeRADIUS服务器在尝试代理会计数据包时失败,服务器将启用一系列备用处理措施。这些措施包括将会计数据包记录到本地的detail文件中,以便在主服务器恢复后可以重新发送这些数据包。同时,服务器会向NAS发送响应,以确保网络的连续性。
# Post-Proxy-Type Fail-Accounting {
# detail.example.com
# 确保现在向NAS发送响应,因为数据包已被写入detail文件。
# acct_response
# }
}
}
posted on 2024-04-29 21:11 torotoise512 阅读(23) 评论(0) 收藏 举报
浙公网安备 33010602011771号