본문 바로가기
Technical/System

Windows 서버에서 SNMPv3 설정하기 (Net-SNMP)

by 박성규 2025. 4. 23.

Microsoft는 Windows Server 2012(R2)부터 SNMP(Simple Network Management Protocol)를 사용하지 않도록 권장하고 있다. 이는 SNMP의 보안 취약성 때문으로 추정되며 Windows 10 1809 및 Windows Server 2016부터는 SNMP 기능이 기본적으로 설치되지 않으며, 수동으로 추가해야 한다. 수동으로 추가를 하더라도 이는 snmpv1과 snmpv2c 만 지원 할 뿐 snmpv3에 대한 기능이나 지원은 어떠한 것도 하지 않고 있다.

 

윈도우 서버에 SNMPv3를 사용하기 위해선 별도의 프로그램을 사용해야 하는 상황이다.

윈도우용 SNMPv3 프로그램은 여러가지가 있으나 여기선 무료인 Net-SNMP 패키지를 이용하여 설정하는 방법을 알아보려 한다.

 

리눅스에서 snmp를 구성해본 사람은 눈치 챘겠지만 리눅스에서 사용하는 Net-SNMP를 윈도우버전으로 컴파일 한 패키지이다. 실제로 설정하는 방법도 리눅스와 동일하다.

 

Net-SNMP는 원래 리눅스계열의 OS에서 사용하는 SNMP 패키지이다. 그렇기 때문에  www.net-snmp.org  사이트나 sourceforge.net에 방문하면 쉽게 리눅스용 Net-SNMP 패키지를 쉽게 다운 받을 수 있다. 하지만 윈도우 버전의 Net-SNMP 패키지를 구하기란 쉽지 않다. 예전만 해도 개발자들이 리눅스용 Net-SNMP패키지를  윈도우용으로 컴파일하여 올려주기도 했는데 쉽지 않은 일인지 이거 마저 구하기 힘들어 졌다.  sourceforge.net에 Net-SNMP 5.5 버전이 있기는 한데 설치 하여 테스트를 해봤지만 동작되는 부분이 뭔가 깔끔하지 못하다는 생각이 들었다.

 

SNMP에 대해 잘 모르지만 테스트한 경험으로 봤은때 기본적으로 Net-SNMP 프로그램과 OpenSSL이 필요하고 snmpwalk를 사용하려면 perl 도 설치가 되어야 하는 것 같다. 그리고 각 프로그램의 버전 호환성도 따져야 한다.

 

그러다 우연치 않게 특정 회사에서 만든 SNMPv3 설치 프로그램에서 Net-SNMP 5.8 버전의 패키지를 구할 수 있었고 패키지로 테스트를 해보니 잘 작동되었다.

 

여기서는 Net-SNMP 5.8 버전 기준으로 테스트 했다. 

 

테스트환경

OS 버전 : Windows Server 2016

Net-SNMP 버전 : 5.8.0.6 (OpenSSL 1.0.2)

 

* 패키지 필요시 댓글로 이메일주소 남기기.

 

 

OpenSSL은 Net-SNMP 패키지에 포함되어 있어 별도로 설치를 하지 않아도 된다. 잘은 모르지만 OpenSSL과 연동하는것 같진 않고 SNMPv3가 동작할때 libeay32.dll 파일이 필요한데 이 파일이 OpenSSL에 들어 있기 때문인것 같다. 

OpenSSL 패키지에 들어 있는 저 파일을 Net-SNMP폴더에 복사해 넣어 주니 정상적으로 동작이 이뤄 졌으니 말이다. 

 

 

1. 사용중인 SNMP 서비스 중지 및 SNMP 기능 제거 (재부팅 필요)

Windows 서버에서 snmp 서비스를 사용 중이라면 서비스 중지를 시킨다.

 

실행 -> services.msc -> SNMP 서비스

시작유형 : 사용 안 함

서비스 상태 : 중지

 

 

 

서버 관리자에서 SNMP의 기능을 제거한다.

 

내 PC 우클릭 -> 관리

관리(M) -> 역할 및 기능 제거

 

 

 

제거를 완료 하려면 서버를 재부팅 해야 한다.

 

 

 

2. Net-SNMP 패키지를 C:\usr 경로에 압축 풀기

  Net-SNMP 파일들의 경로는 C:\usr 폴더에 위치 해야 한다.

 

 

C:\usr 폴더 확인

 

 

3. C:\usr\etc\snmp\snmpd.conf 파일에 v3 사용자 만들기 

C:\usr\etc\snmp 에 있는 snmpd.conf 파일을 더블클릭하면 .conf 형식의 파일은 열수 없다고 나온다.

이때 '이 PC에 있는 앱 사용'을 클릭하고 사용할 앱을 '메모장'을 선택한다.

 

 

메모장으로 파일이 열리면 아래와 같은 형식으 사용자 정보를 입력하고 저장한다. (리눅스와 동일)

createUser myUser SHA "myAuthPass" AES "myPrivPass"
rouser myUser authPriv


예시) createUser innern SHA HappyDay AES NiceDay1!
          rouser innern authPriv

옵션 설명

 ● myUser : SNMP v3 사용자 계정명
 ● SHA : 인증 알고리즘(MD5, SHA, SHA256 등 사용 가능)
 ● myAuthPass : 인증용 패스워드
 ● AES : 암호화 알고리즘(DES, AES 등 사용 가능)
 ● myPrivPass : 암호화용 패스워드
 ● authPriv : 인증 + 암호화 모드 (다른 옵션: authNoPriv, noAuthNoPriv 등)

 

 

 

입력을 완료하면 메모장을 저장한다.

 

 

 

4. SNMP 서비스 시작

C:\usr\bin\snmpd.exe 파일을 더블클릭해서 snmp 데몬을 실행한다.

데몬을 실행하면 위와 같이 커맨드 창이 뜨면 데몬이 정상적으로 실행 된 상태 이다.

이 창을 닫으면 SNMP데몬은 종료 된다.  

 

 

 

5. SNMPv3 실행 여부 확인

데몬 창이 열린 상태에서 새로운 커맨트창을 실행한다.

실행 -> cmd

 

 

커맨드창에서 snmpwalk 명령어로 snmpv3가 동작하고 있는지 확인해야 하는데 snmpwalk 명령어가

시스템 환경설정에 Path로 등록이 되어 있지 않아 명령어를 찾을수 없을 것이다.

그래서 해당 명령어가 있는 위치로 이동해서 명령어를 실행 해야 한다.

snmpwalk 명령어는 c:\usr\bin에 있다.

cd c:\usr\bin

 

 

snmpwalk 명령어로 snmpv3가 동작하는지 확인 한다.

snmpwalk -v 3 -u innern -l authPriv -a SHA -A HappyDay -x AES -X NiceDay1! 127.0.0.1 system

 

명령어를 실행했을 때 다음과 같은 응답결과가 나온다면 SNMPv3가 정상적으로 동작하고 있다는 뜻이다.

 

출력값에 SNMPv2-MIB라고 나온다고 해서 v2 버전을 사용하는 것은 아니다. 이것은 v2c에서 사용하던 모듈이름을 

그대로 가져 온 것이기 때문에 SNMPv2-MIB라고 표시되는 것이다. MIB 모듈명은 바꿀수 있다고는 하는데 매우

복잡하고 여러가지 오류를 발생 할수 있어 권장하지 않는다고 한다. 그냥 변경 할 수 없다고 생각하는 것이 맞는것 같다.

 

만약 로컬 서버가 아닌 다른 서버의 SNMPv3 사용 여부를 확인 하고 싶다면 127.0.0.1 대신 해당 서버의 IP를 입력하면 된다.

 

 

 

 

5. Net-SNMP를 서비스에 등록하기

c:\usr\bin\snmpd.exe 파일을 직접적으로 실행하면 항상 커맨트창을 열어 둬야 하고 실행 시키는데도 불편함이 있을 수 있다.

그래서 서비스로 등록하면 이런 불편함을 해결 할 수 있다.

 

커맨드 창에서 다음 명령어로  서비스를 등록한다.

sc create "Net-SNMP Agent" binPath= "C:\usr/bin/snmpd.exe -service"

 

 

만약 SNMP trap 메시지를 수신해야 하는 서버라면 snmp trap도 서비스로 등록해도 된다.

sc create "Net-SNMP Trap Handler" binPath= "C:\usr/bin/snmptrapd.exe -service"

 

 

실행 -> services.msc 에서 Net-SNMP 서비스가 등록 되었느지 확인한다.

 

 

 

 

* 문제 해결

 

snmpwalk 실행 시 

snmpwalk: Timeout (Sub-id not found: (top) -> system)

  => 해당 서버에 snmp 서비스가 실행되고 있지 않거나 네트워크 통신이 안 될 경우

 

Error in packet.
Reason: authorizationError (access denied to that object)

  => c:\usr\etc\snmp\snmpd.conf 파일에 해당 유저의 정보가 일치 하지 않는 경우

 

snmpwalk: Unknown user name (Sub-id not found: (top) -> system)

  => 해당 유저가 존재 하지 않을 경우

 

Timeout: No Response from 127.0.0.1

  => 암호화 패스워드를 잘못 입력했을 경우

 

snmpwalk: Authentication failure (incorrect password, community or key) (Sub-id not found: (top) -> system)

  => 인증 패스워드를 잘못 입력했을 경우

 

 

댓글