RADIUS 身份验证
Junos OS 演化版 支持 RADIUS 对网络设备上的用户进行集中身份验证。要在设备上使用 RADIUS 身份验证,您(网络管理员)必须配置有关网络上一个或多个 RADIUS 服务器的信息。您还可以在设备上配置 RADIUS 计费,以收集有关登录或注销 LAN 的用户的统计数据,并将这些数据发送到 RADIUS 计费服务器。
配置 RADIUS 服务器身份验证
RADIUS 身份验证是一种对试图访问网络设备的用户进行身份验证的方法。以下部分介绍为什么要使用 RADIUS 以及如何进行配置。
为什么使用 RADIUS
您(网络管理员)可以使用不同的协议对网络设备上的用户进行集中身份验证,包括 RADIUS 和 TACACS+。我们推荐使用 RADIUS,因为它是多供应商 IETF 标准,其功能比 TACACS+ 或其他专有系统更广泛地被接受。此外,我们建议使用一次性密码系统来提高安全性,这些系统的所有供应商都支持 RADIUS。
当您的优先级是互操作性和性能时,应使用 RADIUS:
-
互操作性 — RADIUS 比 TACACS+ 更具可互操作性,这主要是因为 TACACS+ 的专有性质。虽然 TACACS+ 支持更多协议,但普遍支持 RADIUS。
-
性能 — 路由器和交换机上的 RADIUS 重量要轻得多。因此,网络工程师通常更喜欢 RADIUS 而不是 TACACS+。
配置 RADIUS 服务器详细信息
要在设备上使用 RADIUS 身份验证,请通过在层次结构级别为[edit system]每台 RADIUS 服务器添加一个radius-server语句,来配置有关网络上一个或多个 RADIUS 服务器的信息。设备将按配置顺序查询 RADIUS 服务器。如果主服务器(配置的第一个服务器)不可用,设备将尝试联系列表中的每台服务器,直到收到响应。
网络设备可以将经过 RADIUS 身份验证的用户映射到本地定义的用户帐户或用户模板帐户,由此决定授权。默认情况下,在以下情况下, Junos OS 演化版 会将经过 RADIUS 身份验证的用户分配给用户模板帐户 remote(如果已配置):
-
经过身份验证的用户没有在本地设备上配置用户帐户。
-
RADIUS 服务器未将用户分配给本地用户模板,或服务器分配的模板未在本地设备上配置。
RADIUS 服务器可以将经过身份验证的用户分配给其他用户模板,以便向该用户授予不同的管理权限。用户在 CLI 中保留相同的登录名,但从分配的模板继承登录类、访问权限和有效用户 ID。如果经过 RADIUS 身份验证的用户未映射到任何本地定义的用户帐户或用户模板,并且 remote 未配置该模板,则身份验证将会失败。
用户名是 remote Junos OS 演化版 中的特殊情况,必须始终使用小写。它充当由远程服务器进行身份验证但在设备上没有本地配置用户帐户的用户的模板。 Junos OS 演化版 会将模板的 remote 权限应用于那些没有本地定义帐户的经过身份验证的用户。映射到 remote 模板的所有用户都在同一登录类中。
由于要在多台设备上配置远程身份验证,因此通常在配置组中进行配置。此处显示的步骤位于名为 global的配置组中。使用配置组是可选的。
要配置 RADIUS 服务器的身份验证,请执行以下操作:
配置基于 TLS 的 RADIUS (RADSEC) 进行系统认证
基于 TLS 的 RADIUS (RADSEC) 可在 Junos 设备与 RADIUS 服务器之间进行安全加密通信,以进行系统身份验证和计费。系统使用 OpenSSL API 建立 SSL/TLS 会话并执行证书验证。
system系统级身份验证(管理访问)。对于网络访问控制的 RADSEC 配置,请在层次结构下
access配置 RADSEC。
RADSEC 在 TCP 端口 2083(而不是 UDP 端口 1812/1813)上使用 TLS 加密来保护管理身份验证流量。RADSEC 支持两种身份验证模式:
- 单向 TLS: 客户端使用受信任的 CA 证书验证服务器的证书颁发机构证书。
- 相互 TLS (mTLS): 客户端和服务器都使用证书相互验证。
开始之前:
确保以下几点:
- 证书颁发机构证书可用于服务器验证
- 客户端证书可用(仅相互身份验证需要)
配置 CA 证书颁发机构证书:
您可以复制该文件并将其重命名为主题 <hash>.0 /var/tmp/certs/<trusted-ca-group>/。或者,您还可以创建一个带有主题 <hash>.0 /var/tmp/certs/<trusted-ca-group> 的符号链接,并将其链接到实际的证书文件。
- 生成主题名称哈希:
openssl x509 -in <CA-file-name> -noout -subject_hash
- 创建符号链接:
ln -s <CA-file-name> <hash>.0
如果有多个证书颁发机构文件具有相同的主题名称哈希值,则它们的扩展名应该不同;例如,“E5D93F80.1”等。搜索将根据分机号码的相应排序方式进行。
示例:
cd /var/tmp/certs/grp1/ openssl x509 -in root-ca.crt -noout -subject_hash ln -s root-ca.crt e5d93f80.0
配置客户端证书(仅限相互认证):
为了进行相互身份验证,请将客户端证书和私钥 /var/tmp/certs/<certificate-id>/放在 中。
该文件夹必须包含:
client.crt- 客户端证书文件client.key- 客户端私钥文件
示例:
mkdir -p /var/tmp/certs/ca1/ cp client.crt /var/tmp/certs/ca1/ cp client.key /var/tmp/certs/ca1/
要为系统身份验证配置 RADSEC:
以下示例显示了具有相互身份验证的完整 RADSEC 配置:
[edit]
user@host# show system
login {
user remote {
class operator;
}
}
authentication-order [ radius password ];
radius-server {
1.1.1.1 {
port 2083;
tls {
trusted-ca-group grp1;
mutual-authentication {
certificate-id ca1;
}
}
secret "$9$ABC123"; ## SECRET-DATA
}
}
accounting {
destination {
radius {
server {
1.1.1.1 {
accounting-port 2083;
tls {
trusted-ca-group grp1;
mutual-authentication {
certificate-id ca1;
}
}
secret "$9$ABC123"; ## SECRET-DATA
}
}
}
}
}
验证:
登录网络设备并验证身份验证成功。要确认 RADSEC 正常工作,请尝试使用未配置本地密码的帐户登录。
配置参数:
trusted-ca-group- 与 下/var/tmp/certs/包含证书颁发机构证书的文件夹相对应的可信证书颁发机构组名称。OpenSSL 使用这些 证书颁发机构证书来验证 RADIUS 服务器的证书。certificate-id- 与 下/var/tmp/certs/包含客户端证书和私钥的文件夹相对应的证书标识符。相互身份验证所必需。
配置 RADIUS 以使用管理实例
默认情况下, Junos OS 演化版 通过默认路由实例路由 RADIUS 的身份验证、授权和计费数据包。您还可以通过非默认 VRF 实例中的管理接口路由 RADIUS 数据包。
要通过 mgmt_junos 管理实例路由 RADIUS 数据包,请执行以下操作:
-
启用
mgmt_junos管理实例。[edit system] user@host# set management-instance
-
为 RADIUS 身份验证服务器和 RADIUS 计费服务器(如果已配置)配置
routing-instance mgmt_junos该语句。[edit system] user@host# set radius-server server-address routing-instance mgmt_junos user@host# set accounting destination radius server server-address routing-instance mgmt_junos
示例:为系统身份验证配置 RADIUS 服务器
此示例通过 RADIUS 服务器配置系统身份验证。
要求
开始之前:
-
执行初始设备配置。请参阅您设备的入门指南。
-
在网络上至少设置一台 RADIUS 服务器。
概述
在此示例中,您将添加 IP 地址为 172.16.98.1 的新 RADIUS 服务器。将 RADIUS 服务器的共享密钥密码指定为 Radiussecret1。设备将密钥作为加密值存储在配置数据库中。最后,指定设备在 RADIUS 服务器请求中使用的源地址。大多数情况下,您可以使用设备的环路地址,在本例中为 10.0.0.1。
您可以在网络设备上配置对多种用户身份验证方法的支持,例如本地密码身份验证、RADIUS 和 TACACS+,当您配置多种身份验证方式时,可以确定设备尝试不同方式的顺序的优先级。在此示例中,您先将设备配置为使用 RADIUS 身份验证服务,如果失败,则尝试本地密码身份验证。
经过 RADIUS 身份验证的用户必须映射到网络设备上的本地用户帐户或本地用户模板帐户,这决定了授权。默认情况下,如果经过 RADIUS 身份验证的用户未映射到本地用户帐户或特定用户模板,则会将该用户分配到 remote 用户模板(如果已配置)。此示例配置用户 remote 模板。
配置
过程
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set system radius-server 172.16.98.1 set system radius-server 172.16.98.1 secret Radiussecret1 set system radius-server 172.16.98.1 source-address 10.0.0.1 set system authentication-order [radius password] set system login user remote class operator
分步程序
要为系统身份验证配置 RADIUS 服务器:
-
添加新的 RADIUS 服务器并设置其 IP 地址。
[edit system] user@host# set radius-server 172.16.98.1
-
指定 RADIUS 服务器的共享密钥(密码)。
[edit system] user@host# set radius-server 172.16.98.1 secret Radiussecret1
-
将设备的环路地址指定为源地址。
[edit system] user@host# set radius-server 172.16.98.1 source-address 10.0.0.1
-
指定设备的身份验证顺序,并包括该
radius选项。[edit system] user@host# set authentication-order [radius password]
- 配置
remote用户模板及其登录类。[edit system] user@host# set login user remote class operator
结果
在配置模式下,输入 show system 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
以下输出仅包含与此示例相关的配置层次结构部分。
[edit]
user@host# show system
login {
user remote {
class operator;
}
}
authentication-order [ radius password ];
radius-server {
172.16.98.1 {
secret "$9$ABC123"; ## SECRET-DATA
source-address 10.0.0.1;
}
}
配置设备后,进入 commit 配置模式。
瞻博网络供应商特定 RADIUS 属性
Junos OS 演化版支持在 RADIUS 服务器上配置瞻博网络 RADIUS 供应商特定属性 (VSA)。这些 VSA 封装在特定于 RADIUS 供应商的属性中,供应商 ID 设置为瞻博网络 ID 号 2636。
表 1 列出了可以配置的瞻博网络 VSA。
某些属性接受扩展正则表达式,如 POSIX 1003.2 中所定义。如果正则表达式包含任何空格、运算符或通配符,请用引号将其括起来。有关详细信息,请参阅:
| 姓名 |
描述 |
类型 |
长度 |
字符串 |
|---|---|---|---|---|
| 瞻博网络本地用户名称 |
指示在用户登录设备时分配给此用户的用户模板的名称。此属性仅用于访问-接受数据包。 |
1 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组。 |
| 瞻博网络允许命令 |
包含一个扩展正则表达式,使用户能够运行命令以及由用户的登录类权限位授权的命令。此属性仅用于访问-接受数据包。 |
2 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
| 瞻博网络拒绝命令 |
包含一个扩展正则表达式,该正则表达式拒绝用户运行由用户的登录类权限位授权的命令的权限。此属性仅用于访问-接受数据包。 |
3 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
| 瞻博网络允许配置 |
包含一个扩展正则表达式,除了由用户的登录类权限位授权的语句之外,还允许用户查看和修改配置语句。此属性仅用于访问-接受数据包。 |
4 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
| 瞻博网络拒绝配置 |
包含一个扩展正则表达式,拒绝用户查看或修改由用户的登录类权限位授权的配置语句的权限。此属性仅用于访问-接受数据包。 |
5 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
| 瞻博网络交互命令 |
指示用户输入的交互式命令。此属性仅用于计费请求数据包。 |
8 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组。 |
| 瞻博网络-配置-更改 |
指示导致配置(数据库)更改的交互式命令。此属性仅用于计费请求数据包。 |
9 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组。 |
| 瞻博网络用户权限 |
包含服务器用于指定用户权限的信息。此属性仅用于访问-接受数据包。
注意:
当 RADIUS 服务器定义 |
10 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组。 字符串是用空格分隔的权限标志列表。必须完整指定每个标志的确切名称。 |
| 瞻博网络身份验证类型 |
指示用于对用户进行身份验证的身份验证方法(本地数据库或 RADIUS 服务器)。如果使用本地数据库对用户进行身份验证,则属性值显示“本地”。如果使用 RADIUS 或 LDAP 服务器对用户进行身份验证,则属性值会显示“远程”。 |
11 |
≥5 |
一个或多个包含可打印 ASCII 字符的八位位组。 |
| 瞻博网络会话端口 |
指示已建立会话的源端口号。 |
12 |
整数大小 |
整数 |
| 瞻博网络-允许-配置-正则表达式 |
包含一个扩展正则表达式,除了由用户的登录类权限位授权的语句之外,还允许用户查看和修改配置语句。此属性仅用于访问-接受数据包。 |
13 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
| 瞻博网络-拒绝-配置-正则表达式 |
包含一个扩展正则表达式,拒绝用户查看或修改由用户的登录类权限位授权的配置语句的权限。此属性仅用于访问-接受数据包。 |
14 |
≥3 |
一个或多个包含可打印 ASCII 字符的八位位组,形式为扩展正则表达式。 |
有关 VSA 的详细信息,请参阅 RFC 2138,远程认证拨号用户服务 (RADIUS)。
在RADIUS或TACACS+服务器上使用正则表达式允许或拒绝命令
Junos OS 演化版 可以将经过 RADIUS 和 TACACS+ 身份验证的用户映射到本地定义的用户帐户或用户模板帐户,用于定义用户的访问权限。您还可以通过在相应的身份验证服务器上定义瞻博网络 RADIUS 和 TACACS+ 供应商特定属性 (VSA) 来选择配置用户的访问权限。
用户的登录类定义了一组权限,这些权限决定了用户有权执行哪些操作模式和配置模式命令,以及用户可以查看和修改哪些配置区域。登录类还可以定义正则表达式,这些正则表达式允许或拒绝用户执行某些命令或查看和修改配置的某些区域,以及权限标志授权的内容。登录类可以包含以下语句来定义用户授权:
-
permissions -
allow-commands -
allow-commands-regexps -
allow-configuration -
allow-configuration-regexps -
deny-commands -
deny-commands-regexps -
deny-configuration -
deny-configuration-regexps
同样,RADIUS 或 TACACS+ 服务器配置可以使用瞻博网络 VSA 来定义确定用户访问权限的特定权限或正则表达式。有关受支持的 RADIUS 和 TACACS+ VSA 列表,请参阅以下内容:
- 瞻博网络供应商特定 RADIUS 属性
- ../concept/../topic-map/user-access-tacacs-身份验证.html#id-juniper-networks-vendor-specific-tacacs-attributes
您可以将 RADIUS 或 TACACS+ 服务器上的用户权限定义为以空格分隔的值列表。
-
RADIUS 服务器使用以下属性和语法:
Juniper-User-Permissions += "flag1 flag2 flag3",
例如:
Juniper-User-Permissions += "interface interface-control configure",
-
TACACS+服务器使用以下属性和语法:
user-permissions = "flag1 flag2 flag3"
例如:
user-permissions = "interface interface-control configure"
RADIUS 或 TACACS+ 服务器还可以定义使用单个扩展正则表达式(如 POSIX 1003.2 中所定义)的瞻博网络 VSA,以允许或拒绝用户执行某些命令或查看和修改配置区域。将多个命令或配置层次结构括在括号中,并使用管道符号将它们分隔开。如果正则表达式包含任何空格、运算符或通配符,请用引号将其括起来。在本地和远程配置授权参数时,设备会将 TACACS+ 或 RADIUS 授权期间收到的正则表达式与本地设备上定义的任何正则表达式合并。
-
RADIUS 服务器使用以下属性和语法:
Juniper-Allow-Commands += "(cmd1)|(cmd2)|(cmdn)", Juniper-Deny-Commands += "(cmd1)|(cmd2)|(cmdn)", Juniper-Allow-Configuration += "(config1)|(config2)|(confign)", Juniper-Deny-Configuration += "(config1)|(config2)|(confign)",
例如:
Juniper-Allow-Commands += "(test)|(ping)|(quit)", Juniper-Deny-Commands += "(request)|(restart)", Juniper-Allow-Configuration += "(groups re0)|(system radius-server)", Juniper-Deny-Configuration += "(system radius-options)|(system accounting)",
-
TACACS+服务器使用以下属性和语法:
allow-commands = "(cmd1)|(cmd2)|(cmdn)" deny-commands = "(cmd1)|(cmd2)|(cmdn)" allow-configuration = "(config1)|(config2)|(confign)" deny-configuration = "(config1)|(config2)|(confign)"
例如:
allow-commands = "(test)|(ping)|(quit)" deny-commands = "(request)|(restart)" allow-configuration = "(groups re0)|(system tacplus-server)" deny-configuration = "(system tacplus-options)|(system accounting)"
RADIUS 和 TACACS+ 服务器还支持配置与可在本地设备上配置的相同 *-regexps 语句相对应的属性。 *-regexps TACACS+属性和 *-Regexps RADIUS属性使用与先前属性相同的正则表达式语法,但使您能够使用变量配置正则表达式。
-
RADIUS 服务器使用以下属性和语法:
Juniper-Allow-Configuration-Regexps += "(config1)|(config2)|(confign)", Juniper-Deny-Configuration-Regexps += "(config1)|(config2)|(confign)",
-
TACACS+服务器使用以下属性和语法:
allow-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" deny-commands-regexps = "(cmd1)|(cmd2)|(cmdn)" allow-configuration-regexps = "(config1)|(config2)|(confign)" deny-configuration-regexps = "(config1)|(config2)|(confign)"
例如,TACACS+ 服务器配置可能定义以下属性:
allow-commands-regexps = "(show cli .*)|(ping 10.1.1..*)" deny-commands-regexps = "(configure .*)|(edit)|(commit)|(rollback .*)"
在RADIUS或TACACS+服务器上,您还可以使用简化的语法来定义属性,在单独的行上指定每个单独的表达式。
对于 RADIUS 服务器,请使用以下语法指定各个正则表达式:
Juniper-User-Permissions += "permission-flag1", Juniper-User-Permissions += "permission-flag2", Juniper-User-Permissions += "permission-flagn", Juniper-Allow-Commands += "cmd1", Juniper-Allow-Commands += "cmd2", Juniper-Allow-Commands += "cmdn", Juniper-Deny-Commands += "cmd1", Juniper-Deny-Commands += "cmd2", Juniper-Deny-Commands += "cmdn", Juniper-Allow-Configuration += "config1", Juniper-Allow-Configuration += "config2", Juniper-Allow-Configuration += "confign", Juniper-Deny-Configuration += "config1", Juniper-Deny-Configuration += "config2", Juniper-Deny-Configuration += "confign",
对于 TACACS+ 服务器,请使用以下语法指定各个正则表达式:
user-permissions1 = "permission-flag1" user-permissions2 = "permission-flag2" user-permissionsn = "permission-flagn" allow-commands1 = "cmd1" allow-commands2 = "cmd2" allow-commandsn = "cmdn" deny-commands1 = "cmd1" deny-commands2 = "cmd2" deny-commandsn = "cmdn" allow-configuration1 = "config1" allow-configuration2 = "config2" allow-configurationn = "confign" deny-configuration1 = "config1" deny-configuration2 = "config2" deny-configurationn = "confign"
-
在TACACS+服务器语法中,1到 n 数值必须是唯一的,但不必是顺序的。例如,以下语法是有效的:
allow-commands1="cmd1" allow-commands3="cmd3" allow-commands2="cmd2" deny-commands3="cmd3" deny-commands2="cmd2" deny-commands1="cmd1"
-
RADIUS 或 TACACS+ 服务器对单个正则表达式行的数量施加限制。
-
发出命令
show cli authorization时,命令输出将以单行显示正则表达式,即使您在单独的行上指定了每个单独的表达式也是如此。
用户可以通过发出 show cli authorization 操作模式命令来验证其类别、权限以及命令和配置授权。
user@host> show cli authorization
在网络设备上本地配置授权参数并在 RADIUS 或 TACACS+ 服务器上远程配置授权参数时,设备会将 TACACS+ 或 RADIUS 授权期间收到的正则表达式与任何本地配置的正则表达式合并。如果最终表达式包含语法错误,则总体结果为无效正则表达式。
了解 RADIUS 记账
网络设备支持 IETF RFC 2866 RADIUS 记账。您可以在设备上配置 RADIUS 计费,以收集有关用户登录或注销 LAN 的统计数据,并将这些数据发送到 RADIUS 计费服务器。统计数据可用于一般网络监控、分析和跟踪使用模式,或根据会话持续时间或访问的服务类型向用户计费。
要配置 RADIUS 记帐,请指定:
-
一个或多个 RADIUS 计费服务器,用于从设备接收统计数据
-
要收集的会计数据类型
您可以将同一台服务器用于 RADIUS 核算和身份验证,也可以使用单独的服务器。您可以指定 RADIUS 计费服务器的列表。设备将按服务器的配置顺序查询服务器。如果主服务器(配置的第一个服务器)不可用,设备将尝试联系列表中的每台服务器,直到收到响应。
设备与 RADIUS 服务器之间的 RADIUS 计费过程的工作方式如下:
-
RADIUS 计费服务器侦听特定端口上的用户数据报协议 (UDP) 数据包。RADIUS 记账的默认端口为 1813。
-
设备将包含事件记录的 计费请求 数据包转发至计费服务器。与此请求方关联的事件记录包含一个 Acct-Status-Type 属性,其值指示此请求方的用户服务开始。当请求方的会话结束时,计费请求将包含一个 Acct-Status-Type 属性值,该属性值指示用户服务的结束。RADIUS 计费服务器会将此记录为停止计费记录,其中包含会话信息和会话长度。
-
RADIUS 计费服务器将这些事件记录在文件中,作为启动计费或停止计费记录。在 FreeRADIUS 上,文件名是服务器的地址,例如 192.0.2.0。
-
计费服务器向设备发送计 费响应 数据包,确认其已收到计费请求。
-
如果设备未收到来自服务器的计费-响应数据包,它将继续发送计费请求,直到服务器返回响应。
您可以在 RADIUS 服务器上查看通过此过程收集的统计信息。要查看这些统计信息,请访问配置为接收这些统计信息的日志文件。
配置 RADIUS 系统计费
启用 RADIUS 记账后,充当 RADIUS 客户端的瞻博网络设备可以向 RADIUS 服务器通知用户活动,例如软件登录、配置更改和交互式命令。RFC 2866,RADIUS 核算中介绍了 RADIUS 核算的框架。
配置 RADIUS 服务器上的用户事件审核
要配置 RADIUS 记账:
以下示例为 RADIUS 记帐配置三台服务器(10.5.5.5、10.6.6.6 和 10.7.7.7):
system {
accounting {
events [ login change-log interactive-commands ];
destination {
radius {
server {
10.5.5.5 {
accounting-port 3333;
secret $ABC123;
source-address 10.1.1.1;
retry 3;
timeout 3;
}
10.6.6.6 secret $ABC123;
10.7.7.7 secret $ABC123;
}
}
}
}
}