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