Smart Smart Smarktes TP-Link-это семейство управляемых коммутаторов, способных поддержать QoS, VLAN и группы агрегации (лаги). Они управляются через веб-интерфейс, предоставляя доступ ряд функций, включая основные счетчики пакетов на порт. К сожалению, эти коммутаторы не реализуют SNMP для доступа к этим счетчикам, и при этом они не реализуют отдельный URL для прямого доступа к этой информации. Этот проект рассматривает эту проблему для создания статистики для каждого порта из одного вызова командной строки с выводом, который может быть проанализирован для форматированного вывода или введена в систему мониторинга, такую как Zabbix.
Этот проект был протестирован на моделях переключателя TP-Link TL-SG1016DE и TL-SG108E. Он также должен быть совместимы с другими членами этой семьи, включая TL-SG105E и TL-SG1024DE.
*** ПРЕДУПРЕЖДЕНИЕ ***
У Easy Smart Switch Family есть ряд неразрешенных уязвимостей, включая CVE-2017-17746. Как описано в https://seclists.org/fulldisculuestion/2017/dec/67, после того, как пользователь из данного исходного IP-адреса будет аутентифицируется в интерфейс управления на основе веб-сайта, любой другой пользователь из того же исходного IP-адреса рассматривается как аутентифицированный.
Сценарии Python в этом проекте следует использовать только от хоста, который не имеет общего доступа пользователей.
Essstat.py - это легкая утилита, используемая для вытягивания статистики порта из переключателя и вывода в легко продуманном формате. Дополнительный код будет добавлен в Parse, и выводится или сохранит эту статистику.
Это легкое приложение Python выполняет быстрый вход через административный интерфейс на основе веб -коммутатора, а затем запрашивает устройство для текущей статистики порта. Учетные данные для доступа к устройству передаются в командной строке. Утилита была закодирована с 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, чтобы создать динамическую диаграмму, которая автоматически пересекает доступные данные.
Первым шагом является настройка каталога, в котором файлы 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 минут, начиная с каждых часа. Данные для orange будут накапливаться в файле /var/log/essstat/essstat-orange-2020.csv в течение 2020 календарного года.
Эта макро-поддержка Excel Workbook, вероятно, является лучшим способом прочитать и наметить статистику порта. Рабочая книга автоматически построит запрос и выполнит операцию веб -получения по сравнению с сервером мониторинга, используя скрипт essstat2.cgi . Чтобы настроить рабочую книгу для вашей локальной установки, определенное имя essstatBaseURL должно быть изменено, чтобы указать на WebServer, работающий на вашем хосте мониторинга, и имя сценария CGI. Чтобы сделать это обновление в Excel 2019 в Windows, нажмите вкладку Excel Formulas , затем нажмите кнопку Name Manager на ленте. Нажмите на запись для essstatBaseURL и измените запись в соответствии с этим. Обязательно нажмите кнопку с зеленой галочкой, чтобы сохранить модификацию, закройте диалог и сохранить обновленную рабочую книгу. Это должно быть сделано только один раз.
При использовании рабочей книги название переключателя и отчетность и в настоящее время/раз указано в таблице параметров в левом верхнем левом углу вкладки WebData . Нажмите Update From Web , чтобы принести данные в таблицу и динамически обновить график на вкладке PPS . Если исследуемый переключатель имеет только восемь портов, дополнительные порты будут спрятаны автоматически.
Название переключателя и метрического графика отображается в заголовке диаграммы. После того, как метрики были загружены в таблицу, различные метрики могут быть загружены в диаграмму, выбирая из выбора в раскрывающейся ячейке рядом с метрическим метрическим метрическим label. Moving between theses metrics for the same switch does *not* require doing another обновление из операции Web.
Таблица на вкладке * LocalPortNames позволяет переопределить имена портов по умолчанию, показанные на диаграмме. Эта таблица является совершенно необязательной, и определение записей для всех портов на данном переключателе не требуется (вполне хорошо определить переопределение имени порта только для пары портов для данного коммутатора). Если у вас есть несколько переключателей, вы можете добавить записи для всех из них в одной таблице.
Этот прототип рабочей книги Excel может использоваться для обработки копии вывода данных RAW --1line с Essstat.py , которая была накоплена в файле CSV. Начните с копирования файла на новое имя, включив имя контролируемого переключателя. Это будет ноутбук мониторинга переключателя. Например:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
Затем загрузите копию данных CSV, которые были накоплены на вашем хосте мониторинга, и откройте их в Excel, а также рабочую книгу по мониторингу коммутатора. На этом этапе вам нужно будет скопировать данные из CSV на вкладку RawData в ноутбуке по мониторингу коммутатора по значению . Для этого перейдите в файл CSV в Excel и выберите верхнюю левую ячейку, A1 . В Windows вы можете использовать последовательность клавиш Ctrl-Shift-End чтобы выбрать все данные, затем нажмите Ctrl-Insert чтобы скопировать все их. Затем перейдите в рабочую книгу по мониторингу коммутатора и выберите первую ячейку данных на вкладке RawData на A2 (верхняя левая ячейка, под заголовками). Щелкните правой кнопкой мыши и выберите опцию, чтобы вставить значения. С необработанными данными, вы должны прокрутить вниз, чтобы отметить последнюю заполненную строку. Оригинальный файл CSV теперь может быть закрыт.
Нажмите на вкладку таблицы PPS , чтобы расширить таблицу анализа, и выберите метрику для диаграммы. Ключ - расширить диапазон структурированных таблиц в соответствии с доступными RawData . Нажмите Ctrl-End , чтобы найти конец таблицы. Мышь над крошечным квадратом в нижнем левом углу ячейки, пока указатель вашей мыши не изменится на перекрестную черту. Нажмите и перетащите до того же номера строки, что и последний заполненный номер строки на вкладке Rawdata . Все формулы и диапазоны в таблице PPS и диаграмме PPS будут автоматически расширяться.
Есть четыре метрики, которые отслеживаются для каждого порта: TX Good Packets, TX Bad Packets, RX Good PKT и RX Bad PKT. Выпадающая часть в ячейке B2 на вкладке таблицы PPS используется для выбора, какая метрика должна быть заполнена в таблице и размещена.
Этот скрипт CGI используется для запроса данных CSV, которые были накоплены на вашем хосте мониторинга и возвращают соответствующие записи. CGI является автономной, полагаясь только на доступ к AWK для выполнения простого встроенного сценария. В CGI есть три переменные, непредвзятые:
Обратите внимание, что частичные спецификации даты/времени допускаются, поскольку соответствующие записи определяются простым сравнением строк. Даты от и до и до годовой границы (например, с 2019 по 2020 год).
Чтобы запросить сервер мониторинга для статистики порта для коммутатора, известного как Orange, за время диапазона от 23.02.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 вернет среднюю пакеты в секунду с момента предыдущей записи. Сценарий рассчитывает фактическое время дельты между текущей и предыдущей записью, чтобы убедиться, что скорость является точной. Сценарий также имеет обработку для отдельных счетчиков, сбрасывающихся до нуля, когда они обертывают максимальный целый ряд размер для счетчика. В таком случае пакет на секунду из предыдущего интервала будет возвращен для затронутой статистики.
Smart Smart Smart Tp-Link Easy имеет больше возможностей, чем полностью неуправляемый переключатель. Тем не менее, среда управления относительно закрыта, с лишь собственным клиентом управления (утилита Easy Smart Configuration) или страницей управления на основе веб-сайта на доступном коммутаторе. Кроме того, нет поддержки для мониторинга переключателя с помощью SNMP. Это означает, что наше единственное вход в переключатель будет осуществляться через протокол, используемый проприетарным клиентом, или путем использования интерфейса управления веб-сайтом на коммутаторе.
Во-первых, небольшой фон по протоколу UDP-базы Easy Smart Configuration (ESCP), который этот проект не использует. Утилита Easy Smart Configuration взаимодействует с переключением UDP с трансляциями. Клиент отправит трансляцию UDP с порта 29809 на 29808 специально закодированного пакета Discovery. Совместимые переключатели в сети будут транслировать ответ от порта 29808 до 29809, чем включает имя, модель и IP -адрес переключателя. С этого момента клиент должен кодировать последовательность входа в систему и транслировать ее в сети с ожиданием, что конкретный целевой коммутатор будет получать и обрабатывать инструкцию. Это может быть для отправки обратной информации в другом вещательном пакете, изменение конфигурации переключателя или предпринять какое -либо другое действие.
Этот дизайн и реализация имеют ряд вопросов, которые должны вызвать некоторую обеспокоенность, которые были подчеркнуты исследователями безопасности (@chrisdcmoore в уязвимости раскрытия информации в TP-Link Easy Smart Switches и @CHMOD7850 в раскрытии уязвимости CVES). В то время как взломать в ESCP было бы достаточно просто, мне действительно не понравилась идея буквально вещания учетных данных по сети на регулярной основе для получения статистики.
Утверждается, что этот проект использует, веб-клиент, также является проблематичным. Использование подключений TCP одноадресной инреста лучше, но SSL не реализуется коммутатором. Хотя можно перенастроить переключатель, чтобы использовать другое имя пользователя, есть только одно имя пользователя для доступа к коммутатору. Это исключает использование доступа на основе ролей с выделенным именем пользователя только для статистики чтения. Учетные данные, которые мы используем для получения статистики, также могут использоваться для доступа к интерфейсу управления, позволяя сбросить счетчики, реконфигурировать переключатель или даже замену прошивки.
Хуже всего уязвимости, сообщаемые в CVE-2017-17746 . Как описано в https://seclists.org/fulldisculuestion/2017/dec/67, после того, как пользователь из данного исходного IP-адреса будет аутентифицируется в интерфейс управления на основе веб-сайта, любой другой пользователь из того же исходного IP-адреса рассматривается как аутентифицированный. Это условие создается путем выполнения сценариев Python в этом проекте, где другие пользователи вошли в турнир или туннелирование через один и тот же хост, тогда будут иметь неавтотипный доступ к интерфейсу управления коммутатором. Эта проблема может быть смягчена, запустив сценарии от специального управленческого хоста. Использование выделенной внеполосной локальной сети также может обеспечить защиту, но эти коммутаторы вряд ли будут использоваться в такой тщательно структурированной среде.
Питер Шмод
psmode [at] kitsnet.us