TP-Link Easy Smart Switch是一个能够支持QoS,VLAN和链接聚合组(LAGS)的托管开关系列。它们通过基于Web的接口进行管理,从而为访问多个功能,包括每个端口的基本数据包计数器。不幸的是,这些交换机并未实现SNMP来访问这些计数器,也没有实现离散URL以直接访问此信息。该项目解决了此问题,以从单个命令行调用中产生每端口统计信息,并具有输出,该输出可以用于格式化输出,或输入Zabbix之类的监视系统。
该项目已针对TP-Link开关模型TL-SG1016DE和TL-SG108E进行了测试。它也应与该家族的其他成员兼容,包括TL-SG105E和TL-SG1024DE。
*** 警告 ***
Easy Smart Switch家族具有许多未解决的漏洞,包括CVE-2017-17746。如https://seclists.org/fulldisclosure/2017/dec/67中所述,一旦来自给定源IP地址的用户对交换机的基于Web的管理接口进行了身份验证,则来自同一源IP地址的任何其他用户都被视为认证。
该项目中的python脚本应仅来自没有一般用户访问的主机。
ESSSTAT.PY是一种轻量级实用程序,用于以易于可拆卸格式从开关和输出中获取端口统计信息。其他代码将添加到解析并输出或存储这些统计信息。
此轻巧的Python应用程序通过开关基于Web的管理接口执行快速登录,然后对当前端口统计信息进行查询。访问该设备的凭据将在命令行中传递。该实用程序用Python 3.6编码,并使用美丽的汤库。
essstat.py [-h] [-1] [-d] -p TPpswd [-s] [-u TPuser] TPhost
TPhost IP address or hostname of switch
-h, --help show this help message and exit
-1, --1line output in a single line
-d, --debug activate debugging output
-j, --json output in JSON format
-p TPpswd, --password TPpswd
password for switch access
-s, --statsonly output post statistics only
-u TPuser, --username TPuser
username for switch access
$ essstat.py myswitch -p ChangeMe
2020-03-28 11:25:15
max_port_num=8
1;Enabled;Link Down;0,0,0,0
2;Enabled;10M Full;3568644976,0,3144940915,0
3;Enabled;1000M Full;237232286,0,66662515,0
4;Enabled;1000M Full;4019260430,0,3721138807,0
5;Enabled;1000M Full;1300360968,0,355032522,0
6;Enabled;Link Down;0,0,0,0
7;Enabled;1000M Full;2903398648,0,4293632425,5
8;Enabled;Link Down;0,0,0,0
从交换机中累积数据的最简单方法是使ESSSTAT.PY使用--1line选项执行并将输出附加到CSV文件。然后,您可以拉下CSV文件的副本,并通过此Excel Workbook处理原始数据,以生成动态图表,该图表将自动重新列为可用数据。
第一步是设置CSV文件将累积数据的目录。我选择在支持此主机上的监视应用程序的Zabbix用户下运行所有这些。您可以选择其他用户,但只需确保目录组与将要使用的用户组匹配。
$ ls -ald /var/log/essstat
drwxrwxr-x. 2 root zabbix 68 Mar 30 10:56 /var/log/essstat
接下来,为定期数据收集创建CRON作业。为此,请创建文件/etc/cron.d/essstat ,并为您要监视的每个开关添加一个时间表。为了使这一合理的自我维护,将本年度作为CSV文件规范的一部分。
*/10 * * * * zabbix /usr/local/bin/essstat.py -1 -p ChangeMe1 orange >> /var/log/essstat/essstat-orange-`date +%G`.csv
*/10 * * * * zabbix /usr/local/bin/essstat.py -1 -p ChangeMe2 black >> /var/log/essstat/essstat-black-`date +%G`.csv
在上面的示例中,有两个开关正在监视,命名为orange和black 。对于每个开关,每小时开始每10分钟收集数据收集每10分钟。 orange的数据将累积在2020日历年期间的文件/var/log/essstat/essstat-orange-2020.csv essstat/esstat-orange-2020.csv中。
该宏观支持的Excel工作簿可能是阅读和绘制端口统计信息的最佳方法。该工作簿将自动构建查询,并使用essstat2.cgi脚本对监视服务器执行Web Get操作。要为您的本地安装配置工作簿,必须修改定义的名称essstatBaseURL ,以指向监视主机上操作的Web服务器和CGI脚本的名称。要在Windows上的Excel 2019中进行此更新,请单击“ Excel公式”选项卡,然后单击功能区上的Name Manager按钮。单击essstatBaseURL的条目,然后修改条目以适合。请务必单击带有绿色检查标记的按钮以保存修改,关闭对话框并保存更新的工作簿。这仅需要一次。
使用工作簿时,在WebData选项卡的左上方的参数表中指定了开关的名称和到日期/时间的报告。单击Update From Web以将数据获取到表中,然后在“ PPS图表”选项卡上动态更新绘图。如果所研究的开关只有八个端口,则额外的端口将自动隐藏。
开关的名称和绘制的公制显示在图表标题中。一旦将指标加载到表中,可以通过从“图表度量label. Moving between theses metrics for the same switch does *not* require doing another更新。
* LocalPortNames选项卡上的表格允许您覆盖图表中显示的默认端口名称。该表完全是可选的,并且不需要给定开关上所有端口的所有端口定义条目(定义给定开关仅几个端口的端口名称覆盖是完全可以的)。如果您有多个开关,则可以在单个表中添加所有条目。
此Excel Workbook原型可用于处理从CSV文件中累积的ESSSTAT.PY的RAW --1line数据输出的副本。首先将文件复制到新名称,并包含正在监视的开关的名称。这将是开关监视笔记本。例如:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
接下来,下载已在监视主机上积累的CSV数据的副本,并在Excel中打开它,以及Switch Monitoring Workbook。在此阶段,您将需要将数据从CSV复制到开关监视笔记本电脑的RAWDATA选项卡。为此,请转到Excel中的CSV文件,然后选择左上角的单元格A1 。在Windows中,您可以使用密钥序列Ctrl-Shift-End选择所有数据,然后按Ctrl-Insert复制所有数据。然后转到Switch Monitoring Workbook,然后在A2的RAWDATA选项卡中选择第一个数据单元格(左上角电池,标题下方)。右键单击并选择粘贴值的选项。有了原始数据,您应该向下滚动以记下最后一个填充的行。现在可以关闭原始的CSV文件。
单击“ PPS表”选项卡以扩展分析表,然后选择要图表的度量标准。关键是扩展结构化表范围以匹配可用的RAWDATA 。按Ctrl-End定位表的末端。鼠标在细胞的左下角的小正方形上,直到鼠标指针变为十字路口。单击与RAWDATA选项卡中的最后一个填充的行号,然后将其拖到同一行号。 PPS表和PPS图中的所有公式和范围都将自动扩展。
每个端口都会跟踪四个指标:TX好包,TX BAD数据包,RX Good PKTS和RX Bad PKTS。 “ PPS表”选项卡上的单元格B2的下拉列表用于选择应在表中填充哪个度量并进行图表。
此CGI脚本用于查询监视主机和返回匹配条目上已累积的CSV数据。 CGI是独立的,仅依靠对尴尬的访问来执行简单的内联脚本。 CGI中暗示了三个变量:
请注意,允许部分日期/时间规格,因为匹配条目由简单的字符串比较确定。允许从和到日期跨越一年的边界(例如,从2019年到2020年)。
要查询监视服务器中的端口统计信息,以示查名为Orange的开关时间范围为2/23/2020 00:00到3/7/2020 11:30,URI看起来像:
http://monitoring.mydomain.com/cgi-bin/essstat.cgi?esTPLhost=orange&esTo=2020-03-07%2011:30&esFrom=2020-02-23
此CGI脚本旨在支持essstat.xlsm Excel工作簿的操作。该脚本支持与essstat.cgi相同的查询参数,并返回相同指标的数据。但是, essstat2.cgi不会在每个记录中返回原始数据包计数,而是将自上一张记录以来的平均数据包返回。脚本将计算当前和上一个记录之间的实际增量时间,以确保速率准确。该脚本还具有用于重置为零的单个计数器的处理,因为它们包装了计数器的最大整数大小。在这种情况下,将返回受影响的统计量的每一个间隔的数据包。
与完全不受管理的开关相比,TP-Link Easy Smart Switch具有更多的功能。但是,管理环境相对封闭,只有专有管理客户端(简单的智能配置实用程序)或可用的开关上的基于Web的管理页面。此外,没有支持使用SNMP监视开关的支持。这意味着,我们唯一进入交换机的输入将是通过专有客户端使用的协议,或者通过覆盖开关上的基于Web的管理接口。
首先,该项目不使用的UDP基本易于智能配置协议(ESCP)的一些背景。简单的智能配置实用程序与广播与UDP的开关相互作用。客户将将UDP从端口29809发送到特殊编码的发现数据包的29808。网络上的兼容开关将从端口29808传播到29809,而不是交换机的名称,模型和IP地址。从这一点开始,将由客户端编码登录序列并在网络上广播,并期望特定目标开关将接收并处理指令。这可能是在另一个广播数据包中寄回信息,修改交换机的配置,或采取其他操作。
这种设计和实施有许多问题,这些问题应引起安全研究人员(@chrisdcmoore)(@chrisdcmoore在TP-Link易于智能智能开关中的信息披露漏洞, @chmod7850 in Bliberability Pluserability Plusosile tp-link Multiples cves cves)。虽然进入ESCP非常容易,但我真的不喜欢定期在网络上播放凭据以获取统计数据的想法。
基于Web的客户端确实使用该项目所使用的评估也是有问题的。使用TCP单播连接更好,但是SSL并未由Switch实现。虽然可以重新配置开关以使用不同的管理用户名,但只有一个用户名可访问交换机。这排除了使用基于角色的访问的专用用户名仅用于阅读统计信息。我们用来获取统计信息的凭据也可以用来访问管理接口,允许重置计数器,重新配置开关甚至更换固件。
更糟糕的是,CVE-2017-17746报道的漏洞仍然是。如https://seclists.org/fulldisclosure/2017/dec/67中所述,一旦来自给定源IP地址的用户对交换机的基于Web的管理接口进行了身份验证,则来自同一源IP地址的任何其他用户都被视为认证。此条件是由该项目中的Python脚本执行创建的,在该项目中,其他用户登录或通过同一主机进行隧穿将无法对交换机的管理接口进行未经身份验证。通过从专用管理主机运行脚本可以缓解此问题。使用专用的带外管理LAN也可以提供保护,但是这些开关不太可能在如此精心的结构化环境中使用。
彼得·斯莫德(Peter Smode)
psmode [at] kitsnet.us