TP-Link Easy Smart Switches sind eine Familie von verwalteten Switches, die QoS-, VLAN- und Verbindungsaggregationsgruppen (LAGs) unterstützen können. Sie werden über eine webbasierte Schnittstelle verwaltet, die Zugriff auf eine Reihe von Funktionen bietet, einschließlich grundlegender Pakete pro Port. Leider implementieren diese Switches SNMP weder für den Zugriff auf diese Zähler noch scheinen sie eine diskrete URL für den direkten Zugriff auf diese Informationen zu implementieren. Dieses Projekt befasst sich mit diesem Problem, um statistik pro Port aus einem einzigen Befehlszeilenaufruf mit Ausgabe zu erstellen, der für formatierte Ausgaben trivial analysiert oder in ein Überwachungssystem wie Zabbix eingegeben werden kann.
Dieses Projekt wurde gegen TP-Link-Switch-Modelle TL-SG1016DE und TL-SG108E getestet. Es sollte auch mit den anderen Mitgliedern dieser Familie kompatibel sein, einschließlich des TL-SG105E und TL-SG1024DE.
*** Warnung ***
Die einfache Smart Switch-Familie verfügt über eine Reihe ungelöster Schwachstellen, darunter CVE-2017-17746. Wie in https://seclists.org/fulldisclosierung/2017/dec/67 beschrieben, wird ein Benutzer von einer bestimmten Quell-IP-Adresse, die sich mit der webbasierten Verwaltungsschnittstelle des Switchs befasst, nach dem authentifizierten Switch behandelt.
Die Python -Skripte in diesem Projekt sollten nur von einem Host verwendet werden, der keinen allgemeinen Benutzerzugriff hat.
EsStat.py ist ein leichtes Dienstprogramm, mit dem die Anschlussstatistiken aus dem Schalter und Ausgabe in einem leicht sparbaren Format ausgegeben werden. Zusätzlicher Code wird hinzugefügt, um diese Statistiken zu analysieren und entweder auszugeben oder zu speichern.
Diese leichte Python -Anwendung führt eine schnelle Anmeldung über die webbasierte administrative Schnittstelle des Switchs durch und fragt dann das Gerät für die aktuellen Portstatistiken ab. Die Anmeldeinformationen für den Zugriff auf die Einheit werden an der Befehlszeile übergeben. Das Dienstprogramm wurde mit Python 3.6 codiert und verwendet die schöne Suppenbibliothek.
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
Die einfachste Möglichkeit, Daten aus den Switches zu sammeln, besteht darin, dass essStat.py mit der Option --1line ausgeführt und die Ausgabe an eine CSV -Datei angehängt wird. Sie können dann eine Kopie der CSV -Datei abrufen und die Rohdaten über diese Excel -Arbeitsmappe verarbeiten, um ein dynamisches Diagramm zu erstellen, das automatisch nach den verfügbaren Daten setzt.
Der erste Schritt besteht darin, ein Verzeichnis einzurichten, in dem die CSV -Dateien die Daten ansammeln. Ich habe mich dafür entschieden, all dies unter dem Zabbix -Benutzer auszuführen, der die Überwachungsanwendung auf diesem Host unterstützt. Sie können einen anderen Benutzer auswählen, aber stellen Sie einfach sicher, dass die Gruppe des Verzeichnisses mit der Gruppe des Benutzers übereinstimmt, die Sie verwenden.
$ ls -ald /var/log/essstat
drwxrwxr-x. 2 root zabbix 68 Mar 30 10:56 /var/log/essstat
Erstellen Sie als nächstes die Cron -Jobs für die periodische Datenerfassung. Erstellen Sie dazu die Datei /etc/cron.d/essstat und fügen Sie einen Zeitplan für jeden von Ihnen überwachte Switch hinzu. Um dies einigermaßen selbst zu behalten, geben Sie das laufende Jahr als Teil der CSV-Dateispezifikation ein.
*/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
Im obigen Beispiel werden zwei Schalter überwacht, orange und black . Für jeden Switch wird die Datenerfassung alle 10 Minuten ab jeder Stunde ausgeführt. Die Daten für orange werden im Kalenderjahr 2020 in der Datei /var/log/essstat/essstat-orange-2020.csv akkumuliert.
Diese makro-fähige Excel-Arbeitsmappe ist wahrscheinlich die beste Möglichkeit, die Portstatistiken zu lesen und darzustellen. Das Arbeitsbuch erstellt automatisch eine Abfrage und führt ein Web -Get -Betrieb mit dem Überwachungsserver mit dem Skript essstat2.cgi aus. Um die Arbeitsmappe für Ihre lokale Installation zu konfigurieren, muss der definierte Name essstatBaseURL geändert werden, um auf den Webserver zu verweisen, der auf Ihrem Überwachungshost und dem Namen des CGI -Skripts betrieben wird. Um dieses Update in Excel 2019 unter Windows durchzuführen, klicken Sie auf die Registerkarte Excel -Formeln und klicken Sie dann auf die Schaltfläche Name Manager auf dem Band. Klicken Sie auf den Eintrag für essstatBaseURL und ändern Sie den Eintrag angemessen. Klicken Sie auf die Schaltfläche mit dem Green Checkmark, um die Änderung zu speichern, das Dialogfeld zu schließen und die aktualisierte Arbeitsmappe zu speichern. Dies muss nur einmal erledigt werden.
Bei Verwendung der Arbeitsmappe werden der Name des Switchs und die Berichterstattung von und bisher/Zeiten in der Parametertabelle oben links auf der Registerkarte WebData angegeben. Klicken Sie auf das Update From Web -Schaltflächen, um die Daten in die Tabelle abzurufen und das Diagramm dynamisch auf der Registerkarte PPS -Diagramm zu aktualisieren. Wenn der untersuchte Schalter nur acht Ports enthält, werden die zusätzlichen Ports automatisch versteckt.
Der Name des Schalters und der aufgetragene metrische erscheint im Titel des Diagramms. Sobald die Metriken in die Tabelle geladen wurden, können die verschiedenen Metriken in das Diagramm geladen werden, indem aus den Auswahlmöglichkeiten in der Dropdown -Zelle neben der Metrik label. Moving between theses metrics for the same switch does *not* require doing another .
Mit der Tabelle auf der Registerkarte * LocalPortNames können Sie die in der Tabelle angezeigten Standardportnamen überschreiben. Diese Tabelle ist völlig optional, und es ist nicht in Ordnung, Einträge für alle Ports in einem bestimmten Switch auf einem bestimmten Switch zu definieren (es ist vollkommen in Ordnung, Portnamen -Überschüsse für nur ein paar Ports für einen bestimmten Switch zu definieren). Wenn Sie mehrere Schalter haben, können Sie Einträge für alle in einer einzelnen Tabelle hinzufügen.
Dieser Excel Workbook -Prototyp kann verwendet werden, um eine Kopie der RAW --1line -Datenausgabe von EsStat.py zu verarbeiten, die in einer CSV -Datei akkumuliert wurde. Beginnen Sie mit dem Kopieren der Datei in einen neuen Namen und integrieren Sie den Namen des zu überwachten Schalters. Dies ist das Switch Monitoring Notebook. Zum Beispiel:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
Laden Sie als Nächstes eine Kopie der CSV -Daten herunter, die auf Ihrem Überwachungshost angesammelt und in Excel sowie in der Arbeitsmappe zur Switch -Überwachung geöffnet wurden. Zu diesem Zeitpunkt müssen Sie die Daten vom CSV auf die Registerkarte Rawdata des Notebooks für Switch -Überwachung kopieren. Gehen Sie dazu in Excel zur CSV-Datei und wählen Sie die obere linke Zelle A1 aus. In Windows können Sie die Taste-Sequenz Ctrl-Shift-End verwenden, um alle Daten auszuwählen und dann Ctrl-Insert zu drücken, um alles zu kopieren. Gehen Sie dann zur Workbook für Switch Monitoring und wählen Sie die erste Datenzelle in der Registerkarte Rawdata unter A2 (obere linke Zelle unter den Überschriften). Klicken Sie mit der rechten Maustaste und wählen Sie die Option zum Einfügen von Werten. Mit den vorhandenen Rohdaten sollten Sie nach unten scrollen, um die zuletzt besiedelte Zeile zu notieren. Die ursprüngliche CSV -Datei kann jetzt geschlossen werden.
Klicken Sie auf die Registerkarte PPS -Tabelle, um die Analysetabelle zu erweitern und die zu kartierende Metrik auszuwählen. Der Schlüssel besteht darin, den strukturierten Tabellenbereich auf den verfügbaren RAWData zu erweitern. Drücken Sie Ctrl-End , um das Ende der Tabelle zu lokalisieren. Maus über das winzige Quadrat in der unteren linken Ecke der Zelle, bis sich Ihr Mauszeiger in ein Fadenkreuz ändert. Klicken und ziehen Sie auf die gleiche Zeilennummer wie die zuletzt besiedelte Zeilennummer auf der Registerkarte Rawdata . Alle Formeln und Bereiche in der PPS -Tabelle und in der PPS -Diagramm werden automatisch erweitert.
Es gibt vier Metriken, die für jeden Port verfolgt werden: TX gute Pakete, TX -schlechte Pakete, RX Good PKTs und RX schlechte PKTs. Mit dem Dropdown in Cell B2 auf der Registerkarte PPS -Tabelle wird ausgewählt, welche Metrik in der Tabelle gefüllt und geprägt sein sollte.
Dieses CGI -Skript wird verwendet, um die CSV -Daten abzufragen, die auf Ihrem Überwachungshost akkumuliert wurden, und die Übereinstimmungseinträge zurückzugeben. Der CGI ist in sich geschlossen und stützt sich nur auf den Zugriff auf awk für die Ausführung eines einfachen Inline-Skripts. Es gibt drei Variablen im CGI: CGI:
Beachten Sie, dass Teil-/Zeitspezifikationen zulässig sind, da die Übereinstimmungseinträge durch einen einfachen String -Vergleich bestimmt werden. Die von und zu Daten dürfen über eine Jahresgrenze erstrecken (z. B. von 2019 bis 2020).
Um den Überwachungsserver für Portstatistiken für den als Orange als Orange für den Zeitbereich vom 23.02.2020 00:00 bis 3/7/2020 11:30 Uhr bezeichneten Switch abzufragen, würde der URI aussehen wie:
http://monitoring.mydomain.com/cgi-bin/essstat.cgi?esTPLhost=orange&esTo=2020-03-07%2011:30&esFrom=2020-02-23
Dieses CGI -Skript unterstützt den Betrieb des Arbeitsbuchs essstat.xlsm Excel. Das Skript unterstützt dieselben Abfrageparameter wie essstat.cgi und gibt Daten für dieselben Metriken zurück. Anstatt in jedem Datensatz die Anzahl der RAW -Pakete zurückzugeben, gibt essstat2.cgi die durchschnittlichen Pakete pro Sekunde seit dem vorherigen Datensatz zurück. Das Skript berechnet die tatsächliche Delta -Zeit zwischen dem aktuellen und dem vorherigen Datensatz, um sicherzustellen, dass die Rate korrekt ist. Das Skript hat auch die Handhabung für einzelne Zähler, die auf Null zurückgesetzt werden, da sie die maximale Ganzzahlgröße für den Zähler einwickeln. In einem solchen Fall wird das Paket pro Sekunde aus dem vorherigen Intervall für die betroffene Statistik zurückgegeben.
Der TP-Link Easy Smart Switch verfügt über mehr Funktionen als ein vollständig nicht verwalteter Schalter. Die Verwaltungsumgebung ist jedoch relativ geschlossen, wobei nur ein proprietärer Management-Client (Easy Smart Configuration Utility) oder eine webbasierte Verwaltungsseite auf dem Switch verfügbar ist. Darüber hinaus gibt es keine Unterstützung für die Überwachung des Schalters mit SNMP. Dies bedeutet, dass unser einziger Eintrag in den Switch über das vom proprietäre Client verwendete Protokoll oder durch das Aufnehmen der webbasierten Verwaltungsschnittstelle auf dem Switch erfolgt.
Erstens ein wenig Hintergrund zum UDP-Base Easy Smart Configuration Protocol (ESCP), den dieses Projekt nicht verwendet. Das Easy Smart Configuration Utility interagiert mit dem Schalter über UDP mit Sendungen. Der Client sendet eine UDP -Sendung von Port 29809 auf 29808 eines speziell codierten Erkennungspakets. Kompatible Switches im Netzwerk senden eine Antwort von Port 29808 bis 29809 als die Name, das Modell und die IP -Adresse des Schalters. Ab diesem Zeitpunkt ist es Sache des Clients, eine Anmeldesequenz zu codieren und diese im Netzwerk zu übertragen, mit der Erwartung, dass der spezifische Zielschalter die Anweisung empfängt und verarbeitet. Dies könnte sein, um Informationen in ein anderes Broadcast -Paket zu senden, die Konfiguration des Switchs zu ändern oder andere Aktionen zu ergreifen.
Dieses Design und diese Implementierung haben eine Reihe von Problemen, die einige Bedenken hervorrufen sollten, die von Sicherheitsforschern hervorgehoben wurden (@chRISDCMOORE in der Offenlegung von Informationen in der Information in TP-Link Easy Smart Switches und @Chmod7850 bei der Offenlegung von TP-Link-Multiples-CVES). Während das Hacken in den ESCP einfach genug wäre, mochte ich die Idee, regelmäßig Anmeldeinformationen im Netzwerk im Netzwerk zu übertragen, um Statistiken zu erfassen.
Das Genehmigung, das dieses Projekt verwendet, ist auch der webbasierte Client problematisch. Die Verwendung eines TCP -Unicast -Verbindungen ist besser, aber SSL wird nicht vom Switch implementiert. Während es möglich ist, den Switch so neu zu konfigurieren, um einen anderen administrativen Benutzernamen zu verwenden, gibt es nur einen Benutzernamen für den Zugriff auf den Schalter. Dies schließt den rollenbasierten Zugriff mit einem dedizierten Benutzernamen nur für das Lesen von Statistiken aus. Die Anmeldeinformationen, mit der wir die Statistiken erfassen, kann auch verwendet werden, um auf die Verwaltungsschnittstelle zuzugreifen, die das Zurücksetzen von Zählern, die Neukonfiguration des Schalters oder sogar das Ersetzen der Firmware ermöglichen.
Schlimmer noch sind die in CVE-2017-17746 gemeldeten Schwachstellen . Wie in https://seclists.org/fulldisclosierung/2017/dec/67 beschrieben, wird ein Benutzer von einer bestimmten Quell-IP-Adresse, die sich mit der webbasierten Verwaltungsschnittstelle des Switchs befasst, nach dem authentifizierten Switch behandelt. Diese Bedingung wird durch die Ausführung der Python -Skripte in diesem Projekt erstellt, in dem sich andere Benutzer angemeldet haben oder durch denselben Host überlegt haben, dann einen nicht authentifizierten Zugriff auf die Verwaltungsschnittstelle des Switchs. Dieses Problem kann gemindert werden, indem die Skripte von einem dedizierten Verwaltungshost ausgeführt werden. Die Verwendung eines dedizierten Out-of-Band-Management-LAN kann auch Schutz bieten, aber es ist unwahrscheinlich, dass diese Switches in einer solchen ausführlich strukturierten Umgebung verwendet werden.
Peter Smode
psmode [at] kitsnet.us