其他文章:
Tacacs+ single-connection单连接模式测试
经测试单连接模式真正实现的效果就是:不论有多少用户同时登陆一台网络设备,不论同时执行多少条命令,设计到的认证,授权,计费报文都在同一个TCP连接中传输。
单连接模式相关概念:
单连接模式:https://tools.ietf.org/id/draft-ietf-opsawg-tacacs-18.html#rfc.section.4.3
单连接模式( Single Connection Mode)是为了提高性能,有很多客户端和服务器之间的流量通过允许复用多个会话在一个TCP连接。
数据包头包含客户端和服务器用来协商使用单连接模式的TAC_PLUS_SINGLE_CONNECT_FLAG。客户端设置此标志,以表明它支持在单个TCP连接上多路传输TACACS+会话。在单连接状态建立之前,客户端不能在连接上发送第二个数据包。
为了表示它将支持单一连接模式,服务器将在响应客户端的第一个请求的第一个应答包中设置此标志(Flag)。即使客户端没有设置该标志,服务器也可以设置该标志,但是客户端可以忽略该标志并在会话完成后关闭连接。
该标志只与连接上的前两个包相关,以允许客户端和服务器建立单一连接模式。在前两个包之后没有更改单个连接模式的规定:客户端和服务器必须忽略连接上第二个包之后的标志。
如果在TCP连接的前两个包中没有建立单连接模式,那么客户端和服务器都会在第一次会话结束时关闭连接。
客户端采用单连接模式,提高了效率。服务器可能拒绝允许客户端使用单连接模式。例如,在某些部署中,可能不适合将持久的TCP连接分配给特定的客户端。即使服务器被配置为允许特定客户端使用单一连接模式,服务器也可以关闭连接。例如:服务器必须配置为在一段特定的不活动时期后超时单个连接模式TCP连接,以保留其资源。即使建立了单个连接模式,客户端也必须在TCP会话上适应这种终止。
由于服务器或中间连接的超时,单连接模式下的TCP连接最终将关闭。如果一个会话正在进行,当客户端检测到断开连接,那么客户端应该处理它。如果会话没有进行,那么客户端将需要检测它,并在它启动下一个会话时重新启动单连接模式。
Tacacs+服务器端配置:
single-connection ( may-close ) = ( yes | no )
该指令可用于允许或拒绝特定主机对象的单连接功能。 may-close关键字告诉守护程序如果未使用则关闭连接。
Caveat Emptor(需留心):
单连接不按预期工作的可能性很小。路由器中的单连接实现,甚至在这个守护进程中实现的连接(或者可能两者都有)可能有问题。如果你注意到奇怪的AAA行为无法解释,那么尝试禁用路由器上的单连接。
Tacacs+ single-connection参数的测试结果:
-
Tacacs+配置文件默认不需要写single-connection = yes 就支持单连接。
-
通过实际测试:即使配置了single-connection = no, 只要客户端支持单连接模式,还是可以建立单连接模式。
-
如果配置single-connection may-close = yes, 如果客户端不是单连接模式,则每次建立TCP连接,认证或者计费完成后,Tacacs+服务器端会主动先发送FIN报文关闭TCP连接。若不配置may-close,客户端是单连接的话,每次是客户端主先发起FIN报文,关闭TCP连接。
各交换机厂商对单连接模式的支持情况:
H3C single-connection测试与总结:
H3C设备上解释:single-connection Transmit HWTACACS packets on an open TCP connection。
不开启单连接模式情况下:
交换机单连接配置:
主要在配置Tacacs+服务器时不携带single-connection参数:
hwtacacs scheme tacacs
primary authentication 192.168.147.135 49 key simple tacacs@123
primary authorization 192.168.147.135 49 key simple tacacs@123
primary accounting 192.168.147.135 49 key simple tacacs@123
user-name-format without-domain
在设备上执行命令,通过display tcp | in 49, 过滤Tacacs+服务器的端口号,查看网络设备于Tacacs+服务器建立的TCP连接情况。
可以总结出,每执行一条命令,会创建两条TCP链接,分别为授权和计费连接。且计费连接每次看到的状态都是 ESTABLISHED状态。
认证产生的TCP连接只会在登陆的时候产生,后续TCP连接超时后就会断掉,不会在触发认证。
通过抓包分析,从Tacacs+的报文交互过程来看,在登陆的时候交换机会向Tacacs+服务器发送1个认证请求报文,一个收认证回复报文。华三的设备用户命和密码会在第一个认证请求包中。在认证成功之后,后续在交换机输入的每条命令都会进行4个报文的交互,分别是授权请求报文,授权回应报文,计费请求报文,计费回应报文。
刚开始登陆时,会产生一条用于发送认证的TCP连接。
开启Tacacs+ 单连接模式的情况下:
主要在配置Tacacs+服务器时携带single-connection参数:
hwtacacs scheme tacacs
primary authentication 192.168.147.135 49 single-connection key simple tacacs@123
primary authorization 192.168.147.135 49 single-connection key simple tacacs@123
primary accounting 192.168.147.135 49 single-connection key single-connectionsimple tacacs@123
user-name-format without-domain
single-connection ( may-close) = yes ,加上may-close参数后,如果交换机未配置单连接模式,那么每次建立完TCP连接后,Tacacs+会主动断开TCP连接,但是不影响AAA功能。
通过观察总结,交换机开启single-connection模式后,不论Tacacs+服务器的single-connection ( may-close) = yes 该配置项如何调整,每新加一个用户,就会创建5条TCP连接,并且一直存活。
在这里为了区分这5条TCP连接分别用于传输什么数据,特意搭建了3个Tacacs+服务器:
- 认证服务器:192.168.147.135
- 授权服务器:192.168.147.136
- 计费服务器:192.168.147.137
通过抓包分析总结:
<H3C>dis tcp | in 49
192.168.1.1:48386 192.168.147.135:49 ESTABLISHED 1 0x000000000003bdf9
# 这一条TCP连接是用户登陆时创建的认证连接,只在登陆时会传输数据,后续不会再传输数据。
192.168.1.1:48387 192.168.147.136:49 ESTABLISHED 1 0x000000000003bdfa
# 第一条授权TCP连接,是授权 service=shell, cmd*, cvp-roles=network-admin,后续这条连接不会传输数据。
# 第一条授权TCP连接会回复cvp-roles=network-admin,priv-lvl=15信息,后续这条连接不会传输数据。
192.168.1.1:48388 192.168.147.137:49 ESTABLISHED 1 0x000000000003bdfb
# 第一条计费TCP连接,是对用户的默认权限,sevice=shell的计费。
192.168.1.1:48389 192.168.147.136:49 ESTABLISHED 1 0x000000000003bdfc
# 第二条授权TCP连接,是除了第一次登录时用户授权,后面每次执行的命令的授权都会在这个TCP连接中进行。
192.168.1.1:48390 192.168.147.137:49 ESTABLISHED 1 0x000000000003bdfd
# 第二条计费TCP连接,是除了第一次登陆的默认计费,后面每次执行的命令的计费都会在这个TCP连接中进行。
H3C Tacacs+配置单连接模式总结:
H3C的单连接实现方式是个假的单连接,交换机在与Tacacs+服务器发送的报文中,Single Connection字段没有置位,所有也没有实现真正的单连接模式。
配置单连接模式后,每次用户登陆会新建5条TCP连接,并保持一直连接。但是通过配置单链接也能减少H3C交换机和Tacacs+的TCP连接数。
华为单连接模式测试与总结:
首先通过测试华为支持配置单连接模式。
不配置单连接模式的情况:
hwtacacs server template tacacs
hwtacacs server authentication 192.168.147.135 49 shared-key tacacs@123
hwtacacs server authorization 192.168.147.135 49 shared-key tacacs@123
hwtacacs server accounting 192.168.147.135 49 shared-key tacacs@123
hwtacacs server source-ip 192.168.1.1
hwtacacs server timer response-timeout 3
hwtacacs server user-name domain-excluded
-
华为设备每次登陆认证会话只会建立一个TCP连接,认证完成后关闭TCP连接。
-
通过抓包分析,每次执行命令,会分别创建一条授权和计费TCP连接,且会发送RST报文断开TCP连接。后续发起的TCP连接使用随机端口号。
配置单连接模式后:
主要是配置mux-mode 参数。
hwtacacs server template tacacs
hwtacacs server authentication 192.168.147.135 49 shared-key tacacs@123 mux-mode
hwtacacs server authorization 192.168.147.135 49 shared-key tacacs@123 mux-mode
hwtacacs server accounting 192.168.147.135 49 shared-key tacacs@123 mux-mode
hwtacacs server source-ip 192.168.1.1
hwtacacs server timer response-timeout 3
hwtacacs server user-name domain-excluded
-
配置单连接模式后,不论有多少用户,不论执行多少条命令,认证,授权,计费报文只在一条TCP连接中传输。
-
华为设备配置单连接模式的参数是: mux-mode Configure the multiplex mode for a server
锐捷 Tacacs+配置单连接模式测试与总结:
锐捷不支持配置单连接模式。
Ruijie#show tacacs
Tacacs+ Server : 192.168.147.135/49
Socket Opens: 37 #通过show tacacs开看到打开和关闭的连接。
Socket Closes: 37
Total Packets Sent: 40
Total Packets Recv: 40
Reference Count: 1
Ruijie#show tacacs
Tacacs+ Server : 192.168.147.135/49
Socket Opens: 39 #通过show tacacs开看到打开和关闭的连接。
Socket Closes: 39
Total Packets Sent: 42
Total Packets Recv: 42
Reference Count: 1
通过在网络设备上查看建立的TCP连接数和抓包分析,在锐捷设备上,每次执行命令,都会新打开两条TCP连接。
通过抓包分析:
-
锐捷Tacacs+报文交互过程,锐捷的认证交互总数是4个包,且在一个TCP连接传输。在第一个认证请求报文中,只会携带用户名,第一个认证回应报文中携带server消息(\nPassword: ),请求密码:用户输入密码后,会发起第二个认证请求报文,第二个认证回复报文会是认证结果。认证报文交互只会创建一个TCP连接,传输完数据就关闭了。
-
锐捷的所有Tacacs+交互数据都在同一个TCP源端口中传输,使用的不是FIN,而是RST报文,每次交互完认证/授权/计费就发起一个RST,提前重置TCP连接,后续的收取,计费报文再使用同样的源端口发起SYN建立TCP连接交互数据。
-
锐捷设备不支持Tacacs+的认证,授权,计费分离。
思科设备Tacacs+配置单连接模式测试与总结:
Cisco设备支持Tacacs+配置单连接模式。
不配置单连接模式的情况:
tacacs-server host 192.168.147.135 key tacacs@123 port 49
- 不配置单连接模式情况下,每次登陆,或者执行命令,认证,授权,计费,都是单独创建一条TCP连接进行传输数据。传输完数据后,交换机主动发送FIN关闭TCP连接。
配置单连接模式的情况:
主要在执行Tacacs+服务器时配置:single-connection 参数。
tacacs-server host 192.168.147.135 key tacacs@123 port 49 single-connection
通过抓包分析:
-
Cisco交换机Tacacs+ 配置单连接模式后,不论多少用户在线,认证,授权,计费报文都会在同一条TCP连接中传输。
-
Cisco的认证报文是两个,用户账号和密码会在同一个报文中传输。
Arista设备Tacacs+配置单连接模式测试与总结:
Arista设备支持单连接模式。
不配置单连接模式:
tacacs-server host 192.168.147.135 port 49 key key tacacs@123
通过在设备上查看Tacacs+认证信息与抓包分析总结:
- 每次进行一次认证交互就会新建一个TCP连接,并且认证的4个认证报文使用1个TCP连接。
- 每次授权的授权请求报文和授权回应报文使用一个新TCP连接,且完成后交换机主动关闭TCP连接。
- 每次计费的计费请求报文和计费回应报文使用一个新TCP连接,且完成后交换机主动关闭TCP连接。
- Arista 不开启单连接模式,不论多少用户在线,只要执行一条命令,会创建2条TCP连接。
- 每个TCP连接使用的端口号不同。
- 多个用户同时登陆,和上述情况一致。
配置单连接模式情况:
tacacs-server host 192.168.147.135 port 49 key single-connection key tacacs@123
通过抓包分析:
Arista设备的Tacacs+认证交换报文和H3C的略有区别:
- H3C的认证报文只有2个,在第一个认证请求报文中,会同时携带用户名和密码。
- Arista的认证报文有4个,在第一个认证请求报文中,只会携带用户名,第一个认证回应报文中携带server消息(\nPassword: ),请求密码:用户输入密码后,会发起第二个认证请求报文,第二个认证回复报文会是认证结果
- Arista的单连接模式,真正做到了将认证,授权,计费,已经多用户的多个session在同一个TCP连接中传输。
- 但是Arista不支持将认证,授权,计费分离配置。
Tacacs+配置单连接模式总结
-
华为,思科,Arista,支持配置单连接模式,且不论多少用户同时登陆,认证,授权,计费报文都会在同一个TCP连接中传输。
且支持单连接模式的Tacacs+报文中的Single Conection 字段置1,表示使用Tacacs+单连接模式。
-
锐捷不支持配置单连接模式。
-
H3C的单链接模式是个假单链接模式,Tacacs+报文中的Single Connection字段不置位,配置单连接模式后,每次用户登陆会新建5条TCP连接,并保持一直连接。但是通过配置单链接也能减少H3C交换机和Tacacs+的TCP连接数。已和厂商提需求。
-
华为,锐捷,arista的认证报文分为4个报文交换,H3C,思科的认证报文只有2个。
-
配置single-connection模式后,如果交换机数量很大,且同时与Tacacs+服务器建立TCP连接的话,能减少大量Tacacs+服务器端的TCP连接。
-
配置single-connection,大量认证,授权,计费数据包在同一个TCP连接中传输,提高了传输效率,不必一直重复建立和销毁TCP连接。
其他Tacacs+学习资料:
Tacacs+协议最新IETF草案:https://tools.ietf.org/id/draft-ietf-opsawg-tacacs-18.html
Tacacs+服务器配置详解:http://www.pro-bono-publico.de/projects/tac_plus.html
Tacacs+各厂商交换机配置:
- H3C:http://www.h3c.com/cn/d_202004/1281127_30005_0.htm
- Huawei:https://support.huawei.com/hedex/hdx.do?docid=EDOC1100101225&lang=zh&idPath=24030814%7C21782165%7C21782236%7C22318638%7C7542409
- Ruijie: http://www.ruijie.com.cn/fw/wd/86309/
- Arista:https://eos.arista.com/introduction-to-managing-eos-devices-setting-up-management/#17_Local_and_remote_Authentication_Authorization_and_Accounting_AAA
- Cisco:https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/sec_usr_tacacs/configuration/xe-16/sec-usr-tacacs-xe-16-book/sec-cfg-tacacs.html
其他文章: