Radius
Radius
Radius 简介
RADIUS(Remote Authentication Dial In User Service,远程用户拨号认证)是一种广泛支持的客户机 - 服务器协议,提供集中的身份验证、授权和计费功能。RADIUS 服务器使用 UDP 报文与网络中的 RADIUS 客户端通信,在允许用户访问网络之前对用户进行认证,授权适当的用户访问资源,并对所使用的资源进行说明。
配置 Radius 认证
1.配置接口地址及路由


ping 测试 FortiGate 与 Radius Server 之间的连通性。测试环境使用 FortiAuthenticator 作为 Radius 服务器,地址是 192.168.91.209。
# execute ping 192.168.91.209
PING 192.168.91.209 (192.168.91.209): 56 data bytes
64 bytes from 192.168.91.209: icmp_seq=0 ttl=63 time=0.3 ms
64 bytes from 192.168.91.209: icmp_seq=1 ttl=63 time=0.2 ms
64 bytes from 192.168.91.209: icmp_seq=2 ttl=63 time=0.1 ms
64 bytes from 192.168.91.209: icmp_seq=3 ttl=63 time=0.1 ms
64 bytes from 192.168.91.209: icmp_seq=4 ttl=63 time=0.2 ms
--- 192.168.91.209 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.1/0.1/0.3 ms2.配置 Radius 服务器
选择”用户与认证“-->” RADIUS“,点击”新建“。

配置参数:
名称:输入一个名称,不冲突即可;
认证方法:FortiGate 支持 CHAP,MS - CHAP,MS - CHAP,PAP 认证方法。如果认证方法是默认,则 FortiGate 会使用 PAP、MSCHAP_v2 和 CHAP 三种方式向 Radius 服务器发送请求,Radius 服务器的日志中往往会报一些错误,因此 请指定一种认证方法,这里使用 PAP;
IP/名称:在主服务器输入 Radius 服务器的 IP 地址;
密钥:FortiGate 和 Radius 服务器之间的共享密钥,这里设置为 fortinet。

点击”确认“,配置完成。

对应的命令行如下:
config user radius
edit "Radius209"
set server "192.168.91.209"
set secret ENC fJ6Xhg0wVEZyp8qAJfiuNSJLqyNVrWsRwQ1zELqWc7GnyBso4IrSelJJR4DBKmXQ/ex9cFWq3nJfoWEbWjRy1nrwUMl5HJGPiHO+c8MXXy6IAUE38ec4Y/x5VnRPZpEgPPiVIuCXZfbpnjcR1t5RdO8lgTTRkhiNqBFvrZtyxsucpqRYSH7eyTN0ih5nJigvUn8oAg==
set auth-type pap
next
endRadius 服务器测试
1.FortiGate 与 Radius 服务器之间连通性测试
GUI 编辑 Radius 服务器的配置界面,点击”测试连接性“。
CLI 的语法:
#diagnose test authserver radius-direct
<server_name or IP> <port number (0 default port)> <secret> <pap | chap | mschap | mschap2> <user> <password>如果连接状态是”成功“,则 FortiGate 与 Radius 服务器之间通信正常。

对应的 CLI 测试结果如下:
# diagnose test authserver radius-direct 192.168.91.209 1812 fortinet pap user1 12345678 RADIUS server '192.168.91.209' status is OK Access-Accept AVP: l=12 t=Vendor-Specific(26) v=Fortinet(12356) VSA: l=6 t=Fortinet-Group-Name(1) Value: 'grp1'如果连接状态是“对服务器密钥无效”,则 FortiGate 与 Radius 服务器之间的密钥不一致。

对应的 CLI 测试结果如下:
# diagnose test authserver radius-direct 192.168.91.209 1812 fortinet pap user1 12345678 RADIUS server '192.168.91.209' status is Secret invalid如果连接状态是“不能连接 RADIUS 服务器”,则 Radius 服务器的地址或者端口不正确,或者 Radius 服务器没有授权 FortiGate 作为客户端。

对应的 CLI 测试结果如下:
# diagnose test authserver radius-direct 192.168.91.209 1812 fortinet pap user1 12345678 RADIUS server '192.168.91.209' status is Server unreachable
2.测试 Radius 服务器中的用户及密码
GUI 编辑 Radius 服务器的配置界面,点击”测试用户认证信息“。
CLI 的语法:
# diagnose test authserver radius
<server_name> <chap | pap | mschap | mschap2> <username> <password>用户名或者密码不正确

对应的 CLI 测试结果如下:
# diagnose test authserver radius Radius209 pap user1 test123 authenticate 'user1' against 'pap' failed, assigned_rad_session_id=730523922 session_timeout=0 secs idle_timeout=0 secs!用户名和密码正确
可以看到 Radius 服务器返回的状态是成功,以及用户属于,如 user1 属于用户组 grp1。

对应的 CLI 测试结果如下:
# diagnose test authserver radius Radius209 pap user1 12345678 authenticate 'user1' against 'pap' succeeded, server=primary assigned_rad_session_id=730523923 session_timeout=0 secs idle_timeout=0 secs! Group membership(s) - grp1
Radius 报文格式及交互过程
1.Radius 报文格式

Code:表示 Radius 报文的类型:
- Code = 1: Access-Request,认证请求报文;
- Code = 2: Access-Accept,认证成功报文;
- Code = 3: Access-Reject,认证拒绝报文;
- Code = 4: Accounting-Request,计费请求报文;
- Code = 5: Accounting-Response,计费响应报文;
- Code = 11: Access-Challenge,认证挑战报文;
- Code = 255: Reserved,保留;
Packet Identifier:用于匹配请求和回应报文。
Packet Length:Radius 报文长度;
Authenticator:用于认证来自服务端的响应,也用于用户密码的加密处理;
AVPs:属性字段,用于 RADIUS 服务器和 RADIUS 客户端之间的信息交换,Fortinet RADIUS 属性的供应商 ID 是 12356。
2.Radius 报文交互过程

FortiGate 向 RADIUS 服务器发送包含用户名和密码信息的认证请求报文。
RADIUS 服务器对用户身份的合法性进行检验:
如果用户身份合法,RADIUS 服务器向 FortiGate 返回认证接受报文。
如果用户身份不合法,RADIUS 服务器向 RADIUS 客户端返回认证拒绝报文。
PAP 和 CHAP 认证
1.PAP 认证
在认证请求报文 Access-Request 报文中,PAP 将用户和加密后的密码传递给 Radius 服务器。

Radius 服务器将解密后的密码,与用户的密码进行比较,如果一致, 则认为密码正确。

2.CHAP 认证
重要
CHAP 认证传递的是一个 HASH 值,不是密码,因此这要求用户的密码保存在 Radius 服务器本地。如果 Radius 服务器用户的密码不在本地,如 FortiGate----Radius 服务器 ----LDAP 服务器,像这样的部署方式,用户的密码保存在 LDAP 服务器中,Radius 服务器无法获取 LDAP 服务器中用户的密码,因此认证将失败。
在认证请求报文 Access-Request 报文中,CHAP 认证并不会直接在认证过程传递用户密码, 而是传递 chapID + 密码 + challenge 的 MD5 值。

Radius 服务器通过用户名找到对应的密码,计算 chapID + 密码 + challenge 的 MD5 值, 并判断是否与 chap-password 一致(从第 2 个字节开始比较),如果一致, 则认为密码正确。

Radius 认证 Debug
1.认证成功
```
[1906] handle_req-Rcvd auth req 730524052 for user1 in Radius209 opt=0000001d prot=0
[466] __compose_group_list_from_req-Group 'Radius209', type 1
[616] fnbamd_pop3_start-user1
[518] __fnbamd_cfg_get_radius_list_by_server-Loading RADIUS server 'Radius209'
[342] fnbamd_create_radius_socket-Opened radius socket 12
[342] fnbamd_create_radius_socket-Opened radius socket 13
[1394] fnbamd_radius_auth_send-Compose RADIUS request
[1351] fnbamd_rad_dns_cb-192.168.91.209->192.168.91.209
认证请求,radius服务器是192.168.91.209,用户名user1,认证方法是PAP
[1323] __fnbamd_rad_send-Sent radius req to server 'Radius209': fd=12, IP=192.168.91.209(192.168.91.209:1812) code=1 id=6 len=101 user="user1" using PAP
[319] radius_server_auth-Timer of rad 'Radius209' is added
[633] create_auth_session-Total 1 server(s) to try
[1360] fnbamd_auth_handle_radius_result-Timer of rad 'Radius209' is deleted
认证响应,响应code 2,认证成功,返回的用户属性
[1802] fnbamd_radius_auth_validate_pkt-RADIUS resp code 2
[320] extract_success_vsas-FORTINET attr, type 1, val grp1
[1385] fnbamd_auth_handle_radius_result-->Result for radius svr 'Radius209' 192.168.91.209(1) is 0
[266] find_matched_usr_grps-Skipped group matching
[216] fnbamd_comm_send_result-Sending result 0 (nid 0) for req 730524052, len=2154
[789] destroy_auth_session-delete session 730524052
```
2.认证失败
```
[1906] handle_req-Rcvd auth req 730524053 for user1 in Radius209 opt=0000001d prot=0
[466] __compose_group_list_from_req-Group 'Radius209', type 1
[616] fnbamd_pop3_start-user1
[518] __fnbamd_cfg_get_radius_list_by_server-Loading RADIUS server 'Radius209'
[342] fnbamd_create_radius_socket-Opened radius socket 12
[342] fnbamd_create_radius_socket-Opened radius socket 13
[1394] fnbamd_radius_auth_send-Compose RADIUS request
[1351] fnbamd_rad_dns_cb-192.168.91.209->192.168.91.209
认证请求,radius服务器是192.168.91.209,用户名user1,认证方法是PAP
[1323] __fnbamd_rad_send-Sent radius req to server 'Radius209': fd=12, IP=192.168.91.209(192.168.91.209:1812) code=1 id=7 len=101 user="user1" using PAP
[319] radius_server_auth-Timer of rad 'Radius209' is added
[633] create_auth_session-Total 1 server(s) to try
[1360] fnbamd_auth_handle_radius_result-Timer of rad 'Radius209' is deleted
认证响应,响应code 3,认证拒绝
[1802] fnbamd_radius_auth_validate_pkt-RADIUS resp code 3
[1385] fnbamd_auth_handle_radius_result-->Result for radius svr 'Radius209' 192.168.91.209(1) is 1
[216] fnbamd_comm_send_result-Sending result 1 (nid 0) for req 730524053, len=3172
[789] destroy_auth_session-delete session 730524053
```
其他 Radius 配置参数
1.修改 Radius 端口
config user radius
edit Radius209
set radius-port xxx
next
end2.指定原 IP 地址
config user radius
edit Radius209
set source-ip x.x.x.x
next
end创建 radius 用户
选择“用户与认证”-->“设置用户”,点击“新建”

选择 "远程 RADIUS 用户",点击“下一步”

输入“用户名”和“RADIUS 服务器”,点击“下一步”

如果 Radius 用户需要绑定 FortiGate 本地的 Fortitoken,则勾选“双因子认证”。这里不需要,直接点击“下一步”

如果需要现在为 Radius 用户指定一个用户组,可以勾选“用户组”来指定,也可以等创建完用户后,在用户组菜单中添加。这里不勾选,直接点击“提交”

创建完成

创建 radius 用户组
选择“用户与认证”-->"用户组",点击 "新建"

配置参数
输入用户组名称 group1,在远程组下,点击“添加”,在”远程服务器“中选择已配置的 Radius 服务器。
指定 Radius 的用户组,这里使用 grp1,表示 group1 匹配 Radius 用户组 grp1 下的用户,可以添加多个组;如果组选择“Any”,表示匹配 Radius 服务器下的所用用户。

选择完成后,点击“确认”。

配置完成
