SNMP(간이 망 관리 프로토콜)란?

수많은 네트워크 장비를 한 화면에서 관리하게 해 준 SNMP의 구조와 버전별 보안 차이, 운영에서 조심할 점을 개념 중심으로 풀어 봅니다.

한눈에 보기

SNMP(Simple Network Management Protocol)는 라우터·스위치·프린터 같은 장비가 자신의 상태를 표준화된 방식으로 내놓고, 관리 서버가 이를 주기적으로 모아 보게 하는 프로토콜입니다. 장비가 수십 대만 넘어가도 하나하나 접속해 확인하기 어렵기 때문에 만들어졌고, 지금도 모니터링 도구의 기본 수집 수단으로 쓰입니다. 이 글에서는 등장 배경, 매니저·에이전트·MIB 구조, v1·v2c·v3의 보안 차이, 실제로 보고된 취약점 사례, 그리고 값 계산 실습을 다룹니다.

어디서 왔을까: 등장 배경과 버전의 흐름

위키백과 기준으로 최초의 SNMP 표준 문서(RFC 1065·1066·1067)는 1988년에 나왔고, 1990년에 RFC 1155·1156·1157로 정리되었으며 1991년 MIB-II(RFC 1213)가 뒤를 이었습니다. SNMPv2c(RFC 1901~1908)는 대량 조회용 GetBulk 요청과 64비트 카운터를 더했지만 커뮤니티 기반 보안은 그대로 두었습니다. 보안을 본격적으로 다룬 것이 RFC 3411~3418로 정의된 SNMPv3이며, IETF는 이를 완전한 인터넷 표준(STD 62)으로 지정하고 있습니다. 즉 "Simple"이라는 이름처럼 초기 설계는 단순함에 무게를 두었고, 보안은 뒤에 보강된 셈입니다.

🖧

SNMP(간이 망 관리 프로토콜)란

라우터, 스위치, 프린터 같은 네트워크 장비의 상태를 중앙에서 한 번에 조회하고 관리할 수 있게 해주는 표준 프로토콜입니다.

기업이나 데이터센터처럼 관리해야 할 네트워크 장비가 수십, 수백 대에 이르면 장비마다 일일이 접속해 상태를 확인하기 어렵습니다. SNMP(Simple Network Management Protocol)는 장비들이 공통된 방식으로 자신의 상태 정보(트래픽량, 온도, 오류 횟수 등)를 보고하고, 관리자가 이를 한 화면에서 모아볼 수 있게 해주는 네트워크 관리의 오래된 표준입니다.

🧑‍💻

매니저-에이전트 구조

정보를 조회하는 관리 소프트웨어인 매니저와, 각 장비에서 실행되며 정보를 제공하는 에이전트가 한 쌍을 이루어 동작합니다.

네트워크 모니터링 서버(매니저)가 라우터나 스위치(에이전트)에게 "지금 이 포트의 트래픽이 얼마나 되는지" 질의하면, 에이전트는 자신이 갖고 있는 값을 읽어 응답합니다. 하나의 매니저가 수많은 에이전트에게 동시에 정보를 요청하고 취합함으로써, 전체 네트워크의 상태를 한눈에 파악하는 대시보드를 구성할 수 있습니다.

🗃️

MIB와 OID: 값을 가리키는 주소 체계

장비가 제공할 수 있는 모든 정보 항목의 목록을 MIB(관리 정보 베이스)라 하고, 그 안의 각 항목은 OID라는 고유 번호로 식별됩니다.

MIB(Management Information Base)는 "이 장비가 어떤 값들을 갖고 있는지"를 정의한 일종의 명세서이고, OID(Object Identifier)는 그 안의 개별 항목을 가리키는 점(.)으로 구분된 숫자 주소입니다. 예를 들어 특정 OID를 조회하면 장비의 가동 시간, 다른 OID를 조회하면 특정 포트의 수신 바이트 수를 얻는 식으로, 관리자는 원하는 정보의 OID만 알면 어떤 제조사의 장비든 같은 방식으로 값을 읽을 수 있습니다.

🔑

SNMPv1·v2c의 커뮤니티 스트링

초기 버전의 SNMP는 비밀번호와 비슷한 역할을 하는 "커뮤니티 스트링"이라는 문자열만으로 접근을 통제했습니다.

기본값으로 조회 권한은 "public", 설정 변경 권한은 "private" 같은 문자열이 관행적으로 쓰였는데, 이 값이 평문으로 네트워크에 전송되기 때문에 도청에 취약하다는 것이 큰 약점으로 지적되어 왔습니다. 그럼에도 여전히 오래된 장비나 내부 폐쇄망에서는 SNMPv1·v2c가 단순함 때문에 남아 있는 경우가 있습니다.

🔐

SNMPv3: 인증과 암호화 강화

SNMPv3는 사용자 기반의 인증과 통신 내용 암호화를 도입해, 커뮤니티 스트링에 의존하던 이전 버전의 보안 약점을 보완했습니다.

SNMPv3는 사용자별로 별도의 인증 정보를 부여하고, 필요하면 조회·응답 내용 자체를 암호화해 도청으로부터 보호할 수 있습니다. 보안이 중요한 환경이라면 가능한 한 SNMPv1·v2c보다 SNMPv3를 사용하도록 권장되며, 신규 장비 대부분은 세 버전을 모두 지원해 상황에 맞게 선택할 수 있게 되어 있습니다.

🔌

사용 포트와 트랩(Trap)

매니저가 에이전트에게 묻는 질의는 UDP 161번 포트를, 에이전트가 이상 상황을 먼저 알리는 트랩은 UDP 162번 포트를 사용합니다.

평소에는 매니저가 주기적으로 에이전트에게 값을 요청하는 방식(폴링)으로 동작하지만, 폴링 주기 사이에 장비 다운이나 포트 장애 같은 긴급한 상황이 생기면 에이전트가 매니저의 질의를 기다리지 않고 스스로 알림(트랩)을 즉시 전송할 수 있습니다. 이 두 가지 방식을 함께 쓰면 정기적인 상태 확인과 긴급 상황에 대한 빠른 대응을 모두 챙길 수 있습니다.

📊

SNMP를 활용하는 모니터링 소프트웨어

여러 오픈소스·상용 네트워크 모니터링 도구들이 SNMP를 기본 수집 방식으로 사용해, 장비 상태를 그래프나 대시보드 형태로 시각화해줍니다.

관리자는 이런 도구에 각 장비의 IP 주소와 커뮤니티 스트링(또는 SNMPv3 인증 정보)만 등록해두면, 트래픽 추이·장비 온도·오류율 같은 값을 시간에 따라 자동으로 수집하고 그래프로 확인할 수 있습니다. 임계값을 넘으면 관리자에게 알림을 보내도록 설정해, 장애가 커지기 전에 미리 대응하는 용도로도 널리 활용됩니다.

버전별 비교

구분SNMPv1SNMPv2cSNMPv3
관련 RFCRFC 1155~1157 등RFC 1901~1908RFC 3411~3418
접근 통제커뮤니티 문자열커뮤니티 문자열사용자 기반(USM)
인증없음(문자열 일치만)없음(문자열 일치만)메시지 인증 제공
암호화없음(평문)없음(평문)선택적 제공
특징기본 Get/Set/TrapGetBulk, 64비트 카운터 추가보안 모델·접근 제어 분리

v3의 USM(User-based Security Model, RFC 3414)이 막으려는 위협은 메시지 변조와 사용자 사칭(masquerade)이 주이고, 도청(disclosure)과 메시지 재전송·순서 조작은 제한적으로 다룹니다. 서비스 거부(DoS)와 트래픽 분석은 대상에서 제외한다고 RFC가 밝힙니다. 즉 v3를 써도 "모든 공격이 막힌다"는 뜻은 아닙니다.

실제 사례

사례 1. 2002년 SNMPv1 구현 취약점 (설계가 아닌 구현의 문제)

CERT/CC의 취약점 노트(VU#107186)에 따르면, 핀란드 오울루 대학의 보안 프로그래밍 그룹(OUSPG)이 PROTOS 테스트 도구로 여러 제품의 SNMPv1 처리 코드를 시험해 다수의 결함을 찾았고 2002년 1월에 공개되었습니다. 결함은 서비스 거부, 포맷 스트링, 버퍼 오버플로 등이었고, 일부는 올바른 커뮤니티 문자열 없이도 유발될 수 있었으며 제품에 따라 영향이 달랐습니다. 배울 점은 두 가지입니다. 하나는 프로토콜이 단순해도 구현에서 입력 검증이 허술하면 장비 자체가 위험해진다는 점, 다른 하나는 SNMP 포트를 신뢰할 수 없는 네트워크에 열어 두는 것의 위험이 구현 결함까지 포함한다는 점입니다. 그래서 SNMP는 관리망에서만 접근시키고 장비 펌웨어를 최신으로 유지하는 것이 기본 방어선입니다.

사례 2. 평문 커뮤니티 스트링의 구조적 한계 (설계의 사례)

v1·v2c에서는 커뮤니티 문자열이 평문으로 오가고 IP 위조에도 취약하다고 위키백과가 정리합니다. 읽기용 "public"과 쓰기용 "private" 같은 널리 알려진 기본값이 그대로 남아 있는 경우가 많다는 점도 지적됩니다. 이 사례의 요점은 공격 방법이 아니라 개념입니다. 같은 구간을 지나가는 트래픽을 볼 수 있는 사람은 문자열을 알 수 있고, 문자열을 알면 같은 권한을 얻는다는 구조라서 v3의 사용자별 인증이 필요해졌다는 흐름입니다. 실무에서는 기본값을 바꾸고, 읽기 전용 권한을 쓰고, 관리 서버의 IP로만 접근을 허용하며, 가능하면 v3로 옮기는 순서로 위험을 줄입니다.

사례 3. 가상 예시: 인터페이스 트래픽을 bps로 환산하기

가상 예시입니다. 모니터링 서버가 5분(300초) 간격으로 스위치 포트의 수신 바이트 카운터(MIB-II의 ifInOctets 계열)를 읽었다고 합시다. 첫 값이 4,000,000,000, 다음 값이 200,000,000이면 숫자가 줄어든 것처럼 보이지만, 32비트 카운터는 4,294,967,296에서 0으로 되돌아가므로(래핑) 실제 증가량은 4,294,967,296 − 4,000,000,000 + 200,000,000 = 494,967,296 바이트입니다. 이를 초당 비트로 환산하면 494,967,296 × 8 ÷ 300 ≈ 13,199,128 bps(약 13.2Mbps)입니다. 빠른 링크에서는 32비트 카운터가 금방 한 바퀴를 돌 수 있어 폴링 간격 안에 두 번 이상 래핑되면 값을 알 수 없게 됩니다. v2c에서 64비트 카운터가 추가된 것도 이런 이유와 맞닿아 있습니다.

직접 점검해 보기: 체크리스트

흔한 오해와 정정

한계와 더 알아볼 점

SNMP는 상태 지표 수집에는 강하지만 대량의 세부 로그나 흐름 단위 분석에는 다른 도구(로그 수집, 플로우 분석)를 함께 쓰는 경우가 많습니다. 최근에는 장비 API나 스트리밍 텔레메트리를 쓰는 환경도 늘고 있어 SNMP의 위치는 환경에 따라 다릅니다. 위키백과는 DTLS·TLS 위의 SNMP가 10161·10162 포트를 쓴다고 정리하는데, 이런 보안 전송 방식의 지원 여부는 장비마다 다르므로 제조사 문서를 확인하세요.

OSI 7계층 어디에 해당할까요

SNMP 같은 응용 계층 프로토콜이 전체 네트워크 구조에서 어디에 위치하는지 궁금하다면OSI 7계층 모델 완전정복도 확인해보세요.

방화벽 정책과 함께 고려하세요

SNMP 포트를 외부에 노출하지 않도록 방화벽 정책을 함께 점검하고 싶다면방화벽(Firewall)이란? 기초 개념 정리도 참고해보세요. 자주 쓰는 포트 번호는 포트 번호 총정리에서 한눈에 볼 수 있습니다.

자주 묻는 질문

SNMP는 일반 가정에서도 쓰이나요?

일부 고급형 공유기나 NAS 장비도 SNMP 모니터링 기능을 지원하지만, 주로 관리해야 할 장비 수가 많은 기업·데이터센터 환경에서 훨씬 폭넓게 활용됩니다.

커뮤니티 스트링을 기본값 그대로 두면 위험한가요?

네, "public"·"private" 같은 기본값을 그대로 두고 SNMP 포트를 외부에 노출하면 누구나 장비 정보를 조회하거나 최악의 경우 설정을 변경할 수 있어 반드시 값을 변경하고 접근을 제한된 IP로만 허용해야 합니다.

폴링과 트랩은 어떻게 나눠 쓰나요?

폴링은 관리 서버가 주기적으로 값을 물어 추이를 쌓는 방식이고, 트랩은 장비가 이상 상황을 먼저 알리는 방식입니다. 추이 그래프는 폴링, 즉각 알림은 트랩이 맡고, 트랩이 유실될 수 있어 둘을 함께 씁니다.

MIB를 모르는 제조사 장비도 조회할 수 있나요?

MIB-II 같은 표준 MIB에 정의된 항목은 제조사와 무관하게 같은 방식으로 읽을 수 있습니다. 제조사 고유 항목은 제조사가 제공하는 MIB 파일을 모니터링 도구에 등록해야 이름으로 해석됩니다.

SNMPv3로 바꾸려면 무엇이 필요한가요?

장비와 관리 서버 양쪽이 v3를 지원해야 하고, 사용자 이름과 인증·암호화 방식, 각각의 비밀값을 정해 양쪽에 같게 등록해야 합니다. 지원 알고리즘은 장비마다 다르므로 제조사 문서를 확인하세요.