TP-Link Easyスマートスイッチは、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/fulldiscluse/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
スイッチからデータを蓄積する最も簡単な方法は、 --1lineオプションでessstat.pyを実行し、出力をCSVファイルに追加することです。その後、CSVファイルのコピーを引き下げて、このExcelワークブックを介して生データを処理して、利用可能なデータを自動的に再現する動的なチャートを作成できます。
最初のステップは、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を作成し、監視する各スイッチに1つのスケジュールを追加します。これをかなり自己管理するには、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という名前の2つのスイッチが監視されています。スイッチごとに、データ収集は各1時間から10分ごとに実行されます。 orangeのデータは、2020年の暦年中に/var/log/essstat/essstat-orange-2020.csv essstat/essstat-orange-2020.csvに蓄積されます。
このマクロ対応のExcelワークブックは、おそらくポート統計を読んでチャートする最良の方法です。ワークブックは、 essstat2.cgiスクリプトを使用して、クエリを自動的に構築し、監視サーバーに対してWeb Get操作を実行します。ローカルインストール用にワークブックを構成するには、監視ホストとCGIスクリプトの名前を操作するWebサーバーを指すように、定義された名前essstatBaseURL変更する必要があります。 WindowsでExcel 2019でこの更新を作成するには、[Excel式]タブをクリックし、リボンのName Managerボタンをクリックします。 essstatBaseURLのエントリをクリックして、エントリを変更します。緑色のチェックマークでボタンをクリックして、変更を保存し、ダイアログを閉じて更新されたワークブックを保存してください。これは一度だけ行う必要があります。
ワークブックを使用する場合、スイッチの名前とレポートと日付へのレポートは、 WebDataタブの左上にあるパラメーターテーブルで指定されています。 Update From Webをクリックして、データをテーブルに取得し、 PPSチャートタブのプロットを動的に更新します。調査中のスイッチには8つのポートしかない場合、追加のポートは自動的に非表示になります。
スイッチの名前とメトリックプロットされたメトリックは、チャートのタイトルに表示されます。メトリックがテーブルにロードされると、 'チャートメトリックlabel. Moving between theses metrics for the same switch does *not* require doing another 。
* LocalPortNamesタブのテーブルを使用すると、チャートに表示されているデフォルトのポート名をオーバーライドできます。このテーブルは完全にオプションであり、特定のスイッチ上のすべてのポートのエントリを定義する必要はありません(特定のスイッチ用のいくつかのポートのみのポート名のオーバーライドを定義することはまったく問題ありません)。複数のスイッチがある場合は、すべてのスイッチを1つのテーブルに追加できます。
このExcel Workbookプロトタイプは、CSVファイルに蓄積されているEssstat.pyからのRAW --1lineデータ出力のコピーを処理するために使用できます。ファイルを新しい名前にコピーすることから始めて、監視対象のスイッチの名前を組み込みます。これは、スイッチ監視ノートブックになります。例えば:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
次に、監視ホストに蓄積されたCSVデータのコピーをダウンロードし、Switch Monitoring WorkbookだけでなくExcelで開きます。この段階では、CSVからSwitch MonitoringノートブックのRawdataタブにデータを値でコピーする必要があります。これを行うには、ExcelのCSVファイルに移動し、左上セルA1を選択します。 Windowsでは、キーシーケンスCtrl-Shift-End使用してすべてのデータを選択し、 Ctrl-Insertを押してすべてをコピーできます。次に、Switch Monitoring Workbookに移動し、 A2のRawdataタブの最初のデータセル(見出しの下)を選択します。右クリックして、値を貼り付けるオプションを選択します。生データを整備すると、下にスクロールして最後の人口の列をメモする必要があります。元のCSVファイルを閉じることができます。
[PPSテーブル]タブをクリックして、分析テーブルを拡張し、チャート化するメトリックを選択します。重要なのは、使用可能な生の範囲に合わせて構造化されたテーブル範囲を拡張することです。 Ctrl-Endを押して、テーブルの端を見つけます。マウスポインターが交差毛に変化するまで、セルの左下隅にある小さな正方形のマウス。 [Rawdata]タブの最後の人口列番号と同じ行番号にクリックしてドラッグダウンします。 PPSテーブルとPPSチャートのすべての式と範囲は自動的に拡張されます。
各ポートで追跡されている4つのメトリックがあります:TX Good Packets、TX Bad Packets、RX Good PKTS、RX Bad PKTS。 PPSテーブルタブのCell B2のドロップダウンを使用して、テーブルにどのメトリックを入力してチャート化するかを選択します。
このCGIスクリプトは、監視ホストとリターンマッチングエントリに蓄積されたCSVデータを照会するために使用されます。 CGIは自己完結型であり、単純なインラインスクリプトの実行のためにAWKにアクセスするとのみ依存しています。 CGIには3つの変数が実装されています。
一致するエントリは単純な文字列比較によって決定されるため、部分的な日付/時刻の仕様は許可されていることに注意してください。 FROMと日付は、1年の境界にまたがる(2019年から2020年まで)に及ぶことができます。
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と同じクエリパラメーターをサポートし、同じメトリックのデータを返します。ただし、RAWパケットを各レコードに返す代わりに、 essstat2.cgi前のレコード以降、2番目の平均パケットを返します。スクリプトは、レートが正確であることを確認するために、現在と前のレコードの間の実際のデルタ時間を計算します。スクリプトには、カウンターの最大整数サイズをラップするため、個々のカウンターの処理がゼロにリセットされます。このような場合、前の間隔から2番目のパケットが影響を受ける統計のために返されます。
TP-Link Easy Smartスイッチには、完全に管理されていないスイッチよりも多くの機能があります。ただし、管理環境は比較的閉鎖されており、独自の管理クライアント(簡単なスマート構成ユーティリティ)または利用可能なスイッチ上のWebベースの管理ページのみがあります。さらに、SNMPでスイッチを監視するサポートはありません。これは、スイッチへの唯一のエントリは、独自のクライアントが使用するプロトコルを介して、またはスイッチ上のWebベースの管理インターフェイスをスケープすることによって行われることを意味します。
まず、このプロジェクトが使用していないUDPベースのEasy Smart構成プロトコル(ESCP)の小さな背景。 Easy Smart構成ユーティリティは、ブロードキャストを使用してUDPのスイッチと対話します。クライアントは、特別にエンコードされたディスカバリーパケットのポート29809から29808にUDP放送を送信します。ネットワーク上の互換性のあるスイッチは、スイッチの名前、モデル、IPアドレスを含むよりも、ポート29808から29809から29809への応答をブロードキャストします。この時点から、特定のターゲットスイッチが命令を受信して処理することを期待して、ログインシーケンスをエンコードしてネットワーク上でブロードキャストするのはクライアント次第です。これは、別のブロードキャストパケットで情報を送信したり、スイッチの構成を変更したり、他のアクションを実行したりすることができます。
この設計と実装には、セキュリティ研究者によって強調されているいくつかの懸念を引き起こすべき多くの問題があります(@ChrisDCMOORE情報開示のTP-Link Easy Smart Switchesおよび @Chmod7850の脆弱性開示TP-Link Multiples CVEの@CHMOD7850)。 ESCPへのハッキングは簡単ですが、統計を取得するために、定期的にネットワーク全体で文字通り放送の資格を文字通り放送するという考えが本当に好きではありませんでした。
このプロジェクトが使用するApprach、Webベースのクライアントも問題があります。 TCPユニキャスト接続を使用する方が優れていますが、SSLはスイッチによって実装されていません。スイッチを再構成して別の管理ユーザー名を使用することは可能ですが、スイッチにアクセスするためのユーザー名は1つだけです。これにより、統計のみを読むための専用のユーザー名でロールベースのアクセスを使用することができます。統計を取得するために使用する資格情報を使用して、管理インターフェイスにアクセスして、カウンターのリセット、スイッチの再構成、またはファームウェアの交換を可能にすることもできます。
さらに悪いことに、CVE-2017-17746で報告されている脆弱性です。 https://seclists.org/fulldiscluse/2017/dec/67で説明されているように、特定のソースIPアドレスのユーザーがスイッチのWebベースの管理インターフェイスに認証されると、同じソースIPアドレスの他のユーザーは認証として扱われます。この条件は、このプロジェクトでPythonスクリプトの実行によって作成されます。このプロジェクトでは、他のユーザーが同じホストにログインまたはトンネリングを行い、スイッチの管理インターフェイスへの認定されていないアクセスを行います。この問題は、専用の管理ホストからスクリプトを実行することで軽減できます。専用のバンド外管理LANの使用も保護を提供する可能性がありますが、これらのスイッチは、このような精巧に構造化された環境で使用される可能性は低いです。
ピーター・スモード
psmode [at] kitsnet.us