IT보안 학습

SNMP 프로토콜 총정리

김구티2 2023. 12. 8. 13:46

1. SNMP의 개념

SNMP(Simple Network Management Protocol)는 이름에서도 알 수 있듯, 네트워크 장치를 모니터링하고 관리하는 데 사용되는 인터넷 표준 프로토콜이다. 운영되는 네트워크의 안정성, 효율성을 높이기 위해 구성, 장애, 통계, 상태 정보를 실시간으로 수집 및 분석하는 네트워크 관리 시스템이라 할 수 있다. 애플리케이션 계층에 위치하는 SNMP는 라우터, 스위치, 방화벽, 서버, 무선 장치 간의 통신 등 다양한 곳에 사용된다. 그리고 NMS(Network Management System)는 SNMP 프로토콜을 사용해서 네트워크 정보를 수집한다.

 

1.1 SNMP의 중요성

네트워크의 구성요소는 정말이지 다양하다. 그런 다양한 네트워크 요소가 올바른 작동을 보장할 수 있는 서비스가 있다면 사용하지 않을 이유가 없다. SNMP는 데이터 수집 및 통신을 위한 표준 프로토콜과 절차를 따르고, 이는 네트워크 관리를 위한 최고의 솔루션이자, 가장 단순한 솔루션이기도 하다. 그렇기에 널리 사용되는 것이다.

 

2. SNMP의 동작 방식

 

 

SNMP는 위의 그림에서 알 수 있듯, Manager와 Agent로 구분된다. 매니저는 에이전트로부터 받은 정보 요청에 응하고 정보를 전달한다. 여기서 에이전트는 SNMP를 사용할 수 있는 모든 장치를 말하며, 에이전트로부터 받은 정보들을 시각화하여 운영을 더욱 안정적으로 할 수 있는 것이다.

 

위 그림에 GET 명령이 보이는데, SNMP는 SNMP GET 요청이라고도 하는 프로토콜 데이터 단위를 SNMP에 응답하는 네트워크 장치에 보내는 방식으로 작동한다고 말할 수도 있다. 이러한 모든 통신은 추적이 되며, 네트워크 모니터링 도구는 GET 요청을 사용하여 SNMP에서 데이터를 가져온다. 그리고 트래픽은 다양한 소스에서 네트워크로 유입된다. SNMP는 장치에 사전 구성되어 있으며, 프로토콜이 활성화되면 장치는 성능 통계를 저장한다. 각 네트워크 서버에는 여러 개의 MIB(Management Information Base) 파일이 있는데, MIB는 SNMP에서 모니터링해야 하는 객체(Object) 정보를 가지고 있다. 즉, MIB는 네트워크 장치의 구성 요소 및 상태 정보에 대한 설명이라 할 수 있다.

 

대부분의 경우, SNMP는 SNMP 관리자와 응답을 보내는 에이전트에 의해 시작된 통신을 사용하는 동기식 모델에서 작동한다. 일반적으로 SNMP는 UDP를 전송 프로토콜로 사용하는데, SNMP 트래픽 용도로 잘 알려진 UDP 포트는 161(SNMP)과 162(SNMP TRAP)이다. 이 두 가지의 포트는 기본값이며, 모든 버전의 SNMP에서 동일하다.

 

그리고 이 SNMP 프로토콜은 특이하게도 이름에 'Simple'이 들어가는데, 이는 프로토콜 아키텍처의 복잡하지 않은 특성 때문에 그런 것이다. SNMP는 비밀번호 재설정이나 구성 설정 변경과 같은 Read나 Write 명령을 실행할 수 있다. 또한, 사용 중인 대역폭, CPU 및 메모리에 대해 계속 보고할 수 있다. 그렇기에 SNMP는 가장 널리 사용되는 프로토콜 중 하나가 되었으며, 위의 개념에서 설명했듯 라우터, 스위치, 무선 엑세스 포인트 같은 전통적인 네트워크 장치부터 프린터, 스캐너 같은 엔드 포인트에 이르기까지 광범위한 하드웨어에서 지원되는 것이다.

 

※ SNMP의 구성요소인 SNMP 매니저와 SNMP 에이전트는 서로 통신하기 위해 일치해야 하는 것이 존재한다. 그 대상은 버전, 커뮤니티, PDU가 있다. 아래에서 기술하겠지만, SNMP에는 버전이 존재한다. v1, v2, v3가 있는데, 보통 신작 게임기가 나온다고 가정하면, 신작 게임기는 구작 게임기와 호환이 되어야 할 것이다. 기존 이용자들에게 모두 신작을 구매하라고 강요할 수는 없으니 말이다. 그런데 이 SNMP는 상위 버전이 하위 버전을 호환해주지 않는다. 그렇기에 버전에 대한 일치가 필요한 것이다. 다음은 커뮤니티 스트링. 관리 시스템의 그룹을 정의하는 용어로, 동일한 커뮤니티의 멤버만 SNMP 메시지를 교환할 수 있다. 그렇기에 커뮤니티 스트링의 일치가 필요하다. 커뮤니티 스트링의 디폴트 값은 Public과 Private이며, 서로 동일한 값으로 맞춰야 하기 때문에 반드시 수정이 필요하다고 볼 수 있다. 마지막으로, PDU(Protocol Data Unit). 데이터 유닛이 서로 일치해야 한다. 아래의 표를 통해 PDU 타입에 대한 정보를 제공한다. 

 

PDU TYPE 설명
0, Get Request Manager가 Agent에게 특정 변수 값을 읽기 위해 요청한다.
1, Get Next Request 기본적으로 Get Request와 같으나, 이미 요청한 변수의 다음 변수 값을 읽기  위해 요청한다. 이를 통해 SNMP에서는 각 정보가 계층 구조로 관리됨을 엿볼 수 있다.
2, Set Request Manager가 Agent에게 특정 변수 값의 변경을 요청한다.
3, Get Response Manager가 보낸 요청에 대해 Agent가 해당 변수 값을 전송한다.
4, Trap Agent의 특정 상황 또는 이벤트 발생을 Manager에게 알릴 때 사용하며, 0~6까지의 Flag 값이 존재한다.
Flag 0, Cold Start Agent 초기화를 한다.
Flag 1, Warm Start Agent 초기화, 하지만 설정의 변화는 없다.
Flag 2, Link Down 통신 연결 링크 하나가 끊어졌다.
Flag 3, Link Up 통신 연결 링크 하나가 연결됐다.
Flag 4, Authentication Failure 서로 간의 커뮤니티가 불일치 한다.
Flag 5, EGP Neighbor Loss EGP의 상태가 변했다.
Flag 6, Enterprise Specific 벤더 별 특정한 코드 값

 

만일 PDU 타입으로 SNMP 통신을 표현한다면,

Manager: 0, Agent: 3

Manager: 1. Agent: 3

Manager: 2, Agent: 3

Agent: 4

이런 식의 양상으로 볼 수 있을 것이다. 

 

그런데 위의 사진에 보면 MIB라는 것을 볼 수 있다. MIB는 무엇일까? SNMP의 Agent는 크게 3가지로 나눌 수 있다.

첫째, SNMP, 둘째로는 MIB(Management Information Base), 마지막으로 SMI(Structure of Management Information)이다.  MIB는 관리자가 조회하거나 설정할 수 있는 개체들의 데이터베이스를 말한다. 이 데이터베이스는 각 개체가 Tree 형식의 구조를 이루며, 기본 10개 그룹으로 구분된다. 이를 MIB List로 부르는데, 각 리스트에는 SNMP 정보, 시스템 정보, 인터페이스 정보, IP 정보, TCP 정보 등 다양한 정보가 포함되어 있다. 그리고 SMI는 MIB를 구성하는 툴이라 보면 되는데, MIB의 데이터 타입, 자원 표현 방식, 자원 명명 방식 등을 관리한다고 볼 수 있다.

 

3. SNMP 버전

앞에서도 말했듯, SNMP는 버전에 따라 호환이 불가하기 때문에 서로 같은 버전을 사용해야 함을 명심해야 한다.

 

ㄱ. SNMP v1

오로지 목적은 '정보 교환', 그 뿐이다. 그렇기에 보안, 인증 따위의 것들은 고려 대상이 아니다. 커뮤니티 스트링만 일치하면 정보 교환을 위한 조건을 충족하기에 보안에 극히 취약하다.

 

ㄴ. SNMP v2

v1의 가장 큰 문제는 보안이었기에, 이를 해결한 것이 v2라고 볼 수 있다. 암호화 기능이 적용되었다.

하지만 v1와 호환이 되지 않았고, 보안 기능이 복잡하게 설정되면서 사용자의 외면을 받았다.

 

ㄷ. SNMP v2c

v2에서 개정된 버전으로, v2를 외면한 사용자들의 선택을 받았다. v2에서의 복잡한 보안 기능을 배제하고, 향상된 프로토콜 패킷 유형, MIB 구조 등이 더해졌다. 그리고 v1에서 쓰인 커뮤니티 기반 구조를 사용하고 있다.

 

ㄹ. SNMP v3

v3은 SNMP 엔티티의 원격 구성을 지원한다. 또한, 암호화와 인증을 모두 추가하여 별도로, 혹은 동시에 사용할 수 있어 가장 안전한 버전이라고 할 수 있다.

 

※ SNMP v2와 v3의 공존 가능성

위에서 SNMP 버전에 대해 논할 때, 상위 버전은 하위 버전을 호환하지 않는다고 서술했다. 하지만 v2와 v3는 공존할 수 있다. 일반적인 관리 시나리오를 따졌을 때, 네트워크 관리 시스템은 서로 다른 버전의 SNMP 에이전트와 통신한다. 3가지 버전을 모두 지원하는 다국어 Agent가 있을 때, 그 Agent는 하나의 버전만 지원하는 Agent와 공존할 수 있다. 즉, 버전에 따른 공존 여부는 Agent에 달렸다고 볼 수 있다. 그러나 v2와 v3가 있다면, v2를 v3으로 마이그레이션하여 이전 버전이 사용되지 않도록 하는 것이 가장 합리적인 선택일 것이다.

 

 

728x90