TP-Link Easy Smart Switches는 QOS, VLAN 및 LAG (Link Aggregation Group)를 지원할 수있는 관리 스위치 제품군입니다. 웹 기반 인터페이스를 통해 관리되며, 기본 패킷 카운터를 포함하여 여러 기능을 제공합니다. 불행히도,이 스위치는 이러한 카운터에 대한 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 주소의 사용자가 스위치의 웹 기반 관리 인터페이스로 인증되면 동일한 소스 IP 주소의 다른 사용자는 인증으로 처리됩니다.
이 프로젝트의 Python 스크립트는 일반 사용자 액세스가없는 호스트에서만 사용해야합니다.
EssStat.py 는 가벼운 유틸리티로, 포트 통계를 스위치에서 가져 와서 출력을 쉽게 파싱 가능한 형식으로 끌어 올리는 데 사용됩니다. 추가 코드가 구문 분석에 추가되어 이러한 통계를 출력하거나 저장합니다.
이 가벼운 파이썬 응용 프로그램은 스위치의 웹 기반 관리 인터페이스를 통해 빠른 로그인을 수행 한 다음 현재 포트 통계에 대해 장치를 쿼리합니다. 장치에 액세스하기위한 자격 증명은 명령 줄에 전달됩니다. 이 유틸리티는 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 의 데이터는 2020 년 캘린더 동안 /var/log/essstat/essstat-orange-2020.csv 파일에 축적됩니다.
이 매크로 가능 Excel 통합 문서는 아마도 포트 통계를 읽고 차트하는 가장 좋은 방법 일 것입니다. 통합 문서는 essstat2.cgi 스크립트를 사용하여 모니터링 서버에 대한 쿼리를 자동으로 구성하고 웹 GET 작업을 실행합니다. 로컬 설치 통합 문서를 구성하려면 정의 된 이름 essstatBaseURL 모니터링 호스트에서 작동하는 웹 서버를 가리 키도록 수정해야합니다. Windows의 Excel 2019 에서이 업데이트를하려면 Excel 공식 탭을 클릭 한 다음 리본의 Name Manager 버튼을 클릭하십시오. essstatBaseURL 항목을 클릭하고 적합한 항목을 수정하십시오. Green Checkmark가있는 버튼을 클릭하여 수정을 저장하고 대화 상자를 닫고 업데이트 된 통합 문서를 저장하십시오. 이것은 한 번만 수행해야합니다.
통합 문서를 사용하는 경우 스위치의 이름과 보고서에서보고는 웹 다타 탭의 왼쪽 상단에있는 매개 변수 테이블에 지정됩니다. Update From Web 클릭하여 데이터를 테이블에 가져오고 PPS 차트 탭에서 플롯을 동적으로 업데이트합니다. 연구중인 스위치에 8 개의 포트 만 있으면 추가 포트가 자동으로 숨겨집니다.
스위치의 이름과 음표가 표시된 메트릭은 차트 제목에 나타납니다. 메트릭이 테이블에로드되면 '차트 메트릭 label. Moving between theses metrics for the same switch does *not* require doing another .
* localPortNames 탭의 표를 사용하면 차트에 표시된 기본 포트 이름을 무시할 수 있습니다. 이 테이블은 전적으로 선택적이며 주어진 스위치의 모든 포트에 대한 항목을 정의 할 필요는 없습니다 (주어진 스위치의 두 포트에 대해 포트 이름 재정의를 정의하는 것은 완벽합니다). 여러 스위치가있는 경우 단일 테이블에 모든 스위치를 추가 할 수 있습니다.
이 Excel 통합 문서 프로토 타입은 CSV 파일에 축적 된 EssStat.py 의 RAW --1line 데이터 출력 사본을 처리하는 데 사용될 수 있습니다. 모니터링되는 스위치의 이름을 통합하여 파일을 새 이름으로 복사하여 시작하십시오. 이것은 스위치 모니터링 노트가 될 것입니다. 예를 들어:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
다음으로 모니터링 호스트에 축적 된 CSV 데이터 사본을 다운로드하여 Excel과 스위치 모니터링 통합 문서를 열십시오. 이 단계에서는 CSV에서 스위치 모니터링 노트의 RawData 탭으로 데이터를 값으로 복사해야합니다. 이렇게하려면 Excel의 CSV 파일로 이동하여 왼쪽 상단 셀 A1 선택하십시오. Windows에서 주요 시퀀스 Ctrl-Shift-End 사용하여 모든 데이터를 선택한 다음 Ctrl-Insert 눌러 모든 것을 복사 할 수 있습니다. 그런 다음 스위치 모니터링 통합 문서로 이동하여 A2 의 RawData 탭에서 첫 번째 데이터 셀을 선택하십시오 (왼쪽 상단 셀, 제목 아래). 마우스 오른쪽 버튼을 클릭하고 값을 붙여 넣는 옵션을 선택하십시오. 원시 데이터가 제자리에 있으면 아래로 스크롤하여 마지막 인구가있는 행을 기록해야합니다. 원래 CSV 파일을 닫을 수 있습니다.
PPS 테이블 탭을 클릭하여 분석 테이블을 확장하고 차트를 작성할 메트릭을 선택하십시오. 핵심은 사용 가능한 RawData 와 일치하도록 구조화 된 테이블 범위를 확장하는 것입니다. Ctrl-End 눌러 테이블의 끝을 찾으십시오. 마우스 포인터가 크로스 헤어로 변할 때까지 셀의 왼쪽 아래쪽 모서리에있는 작은 사각형 위의 마우스. RawData 탭의 마지막 인구가있는 행 번호와 동일한 행 번호로 클릭하고 아래로 드래그하십시오. PPS 테이블 및 PPS 차트 의 모든 공식 및 범위는 자동으로 확장됩니다.
각 포트마다 추적되는 4 가지 메트릭이 있습니다 : TX Good Packets, TX Bad Packets, RX Good PKT 및 RX BAD PKT. PPS 테이블 탭의 셀 B2 의 드롭 다운은 테이블에 채워야하는 메트릭을 선택하고 차트를 선택하는 데 사용됩니다.
이 CGI 스크립트는 모니터링 호스트에 축적 된 CSV 데이터를 쿼리하고 매칭 항목을 반환하는 데 사용됩니다. CGI는 자체 포함되어 있으며 간단한 인라인 스크립트를 실행하기 위해 AWK에 액세스 할 때만 의존합니다. CGI에는 세 가지 변수가 있습니다.
일치하는 항목은 간단한 문자열 비교에 의해 결정되므로 부분 날짜/시간 사양이 허용됩니다. From and To To To는 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 와 동일한 쿼리 매개 변수를 지원하고 동일한 메트릭에 대한 데이터를 반환합니다. 그러나 각 레코드에서 원시 패킷을 반환하는 대신 essstat2.cgi 이전 레코드 이후 초 평균 패킷을 반환합니다. 스크립트는 현재 레코드와 이전 레코드 사이의 실제 델타 시간을 계산하여 속도가 정확한지 확인합니다. 스크립트에는 카운터의 최대 정수 크기를 감싸면서 0으로 재설정하는 개별 카운터에 대한 처리 기능이 있습니다. 이 경우, 이전 간격으로부터의 두 번째 속도 당 패킷은 영향을받는 통계에 대해 반환됩니다.
TP-Link Easy Smart Switch는 완전히 관리되지 않는 스위치보다 더 많은 기능이 있습니다. 그러나 관리 환경은 비교적 폐쇄되어 있으며 독점 관리 클라이언트 (Easy Smart Configuration Utility) 또는 스위치의 웹 기반 관리 페이지 만 사용하여 비교적 폐쇄되었습니다. 또한 SNMP로 스위치를 모니터링하는 데 지원이 없습니다. 이는 스위치에 대한 유일한 항목이 독점 클라이언트가 사용하는 프로토콜을 통해 또는 스위치에서 웹 기반 관리 인터페이스를 스포팅하여 이루어질 것임을 의미합니다.
먼저,이 프로젝트가 사용 하지 않는 UDP- 기반 ESP (Easy Smart Configuration Protocol)에 대한 약간의 배경. 쉬운 스마트 구성 유틸리티는 방송과 함께 UDP 오버 UDP와 상호 작용합니다. 클라이언트는 특별히 인코딩 된 디스커버리 패킷의 포트 29809에서 29808로 UDP 방송을 보냅니다. 네트워크의 호환 스위치는 스위치의 이름, 모델 및 IP 주소를 포함하는 것보다 포트 29808에서 29809의 응답을 방송합니다. 이 시점부터 로그인 시퀀스를 인코딩하고 네트워크에서이를 브로드 캐스트하는 것은 클라이언트에 달려 있으며, 특정 대상 스위치가 명령어를 수신하고 처리 할 것으로 기대합니다. 이것은 다른 방송 패킷으로 정보를 전송하거나 스위치의 구성을 수정하거나 다른 작업을 수행하는 것일 수 있습니다.
이 설계 및 구현에는 보안 연구원 (TP-Link Easy Smart Switches의 정보 공개 취약성 및 @chmod7850의 @ChrisdcMoore 및 취약성 공개 TP-Link Multiples CVE)이 강조한 문제를 일으킬 수있는 여러 가지 문제가 있습니다. ESCP를 해킹하는 것은 충분히 쉬울 것이지만, 나는 통계를 잡기 위해 정기적으로 네트워크 전체에 걸쳐 문자 그대로 자격 증명에 대한 아이디어가 마음에 들지 않았습니다.
이 프로젝트가 웹 기반 클라이언트 인 사용하는 Apprach도 문제가됩니다. TCP 유니 캐스트 연결을 사용하는 것이 더 좋습니다. 그러나 스위치는 SSL이 구현되지 않습니다. 다른 관리 사용자 이름을 사용하도록 스위치를 재구성 할 수는 있지만 스위치에 액세스 할 수있는 사용자 이름은 단 하나뿐입니다. 이를 통해 읽기 통계에 대한 전용 사용자 이름으로 역할 기반 액세스를 사용하지 않아도됩니다. 통계를 잡는 데 사용하는 자격 증명은 카운터 재설정, 스위치 재구성 또는 펌웨어 교체를 허용하는 관리 인터페이스에 액세스하는 데 사용될 수도 있습니다.
CVE-2017-17746 에보 고 된 취약점은 여전히 더 나쁘다 . https://seclists.org/fulldisclosure/2017/dec/67에 설명 된 바와 같이, 주어진 소스 IP 주소의 사용자가 스위치의 웹 기반 관리 인터페이스로 인증되면 동일한 소스 IP 주소의 다른 사용자는 인증으로 처리됩니다. 이 조건은이 프로젝트에서 Python 스크립트의 실행에 의해 생성되며, 다른 사용자가 동일한 호스트를 통해 로그인하거나 터널링 한 다음 스위치의 관리 인터페이스에 대한 무단 액세스를 얻을 수 있습니다. 이 문제는 전용 관리 호스트에서 스크립트를 실행하여 완화 할 수 있습니다. 전용 대역 외 관리 LAN을 사용하면 보호 기능을 제공 할 수 있지만 이러한 스위치는 정교하게 구조화 된 환경에서 사용되지 않을 것입니다.
피터 스모드
psmode [at] kitsnet.us