본문 바로가기
Technical/System

Linux에서 SNMPv3 설정 하기

by 박성규 2025. 4. 1.

SNMP란 Simple Network Management Protocol의 약자로 장비를 모니터링하고 관리하기 위한 통신 프로토콜이다. 쉽게 말해 장비들의 건강 상태를 확인하거나 설정을 변경할 수 있는 통신규약인 것이다.

 

SNMP를 사용하는 장비들은 라우터, 스위치, 방화벽등 통신 관련 장비 뿐만 아니라 서버, 프린트, 스토리지등 네트워크 장치를 가진 장비라면 snmp를 사용 할 수 있다. 단, 장비의 OS가 됐든 소프웨어가 됐든 기능을 지원 한다면 말이다.

 

SNMPv3는 SNMPv1과 v2c에 있는 심각한 보안 취약점을 해결하기 위해 설계된 버전인다. SNMP를 사용해야 하는 서버라면 기본으로 제공되는 SNMPv1과 SNMPv2c 보단 SNMPv3를 사용하는 것을 권장한다. 

 

OS 버전 : Rocky 9.2

net-snmp 버전 : 5.9.1

 

 

1. Net-SNMP 확인 및 설치 하기

  기본 패키지

  - net-snmp-libs-5.9.1-17.el9.x86_64
  - net-snmp-agent-libs-5.9.1-17.el9.x86_64
  - net-snmp-5.9.1-17.el9.x86_64

 

  유틸 패키지

  - net-snmp-utils-5.9.1-17.el9.x86_64

  * 유틸 패키지는 snmpv3가 동작되는지 확인할 때 필요한 패키지임

 

Net-SNMP 설치 여부 확인

# rpm -qa | grep net-snmp
net-snmp-libs-5.9.1-9.el9.x86_64

 

Net-SNMP 설치 하기

# yum install -y net-snmp net-snmp-utils
Transaction Summary
==========================================================================
Install  5 Packages
Upgrade  1 Package

Total download size: 1.9 M
Downloading Packages:
(1/6): net-snmp-utils-5.9.1-17.el9.x86_64.rpm                                          994 kB/s | 186 kB     00:00    
(2/6): net-snmp-5.9.1-17.el9.x86_64.rpm                                                  1.5 MB/s | 295 kB     00:00    
(3/6): perl-Term-ReadLine-1.17-481.el9.noarch.rpm                                 848 kB/s |  18 kB      00:00    
(4/6): perl-File-Copy-2.34-481.el9.noarch.rpm                                          719 kB/s |  19 kB      00:00    
(5/6): net-snmp-agent-libs-5.9.1-17.el9.x86_64.rpm                                 3.0 MB/s | 693 kB     00:00    
(6/6): net-snmp-libs-5.9.1-17.el9.x86_64.rpm                                           5.4 MB/s | 740 kB     00:00    
-----------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                           1.8 MB/s | 1.9 MB     00:01     
Rocky Linux 9 - AppStream                                                                       1.7 MB/s | 1.7 kB      00:00    

 

 

 

2. SNMP 서비스 중지

# systemctl stop snmpd

 

 

3. snmpd.conf 파일 수정하여 v2c 설정 제거

  snmp를 설치하면 /etc/snmp/snmpd.conf 파일이 생성 되는데 snmpd.conf 파일에는 snmpv2c 기본 설정이  되어 있다.

  vi 편집기를 이용하여 snmpv2c에 대한 community 정보를 삭제 하거나 주석처리 해준다.

  * 만약을 대비하여 snmpd.conf 파일을 백업 두는 것도 좋은 방법이다.

 

# vi /etc/snmp/snmpd.conf

#com2sec notConfigUser  default       public     <=== 주석처리

 * 만약 다른 community 명으로 사용중이라면 해당 community를 주석 처리 한다.

 

 

4. SNMPv3 유저 생성 하기

사용자 생성 하는 방법은 두가지가 있다. 

첫번째는 /etc/snmp/snmpd.conf 파일에서 사용자 정보를 등록해 놓는 방법과

두번째는 net-snmp-create-v3-user 스크립트를 사용하여 사용자를 생성 하는 방법이다.

두번째 방법은 RHEL 계열의 리눅스에서만 사용이 가능하다.

 

v3 사용자를 생성할때 인증 알고리즘과 암호화 알고리즘을 지정해야 하는데 여기서는 SHA와 AES로 생성하였다.

 

1) 첫번째 방법 : snmpd.conf에 사용자 등록하기

# vi /etc/snmp/snmpd.conf

아래 내용 추가 및 저장하기
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 등)

 

2) 두번째 방법 : net-snmp-create-v3-user 스크립트를 사용하기

# net-snmp-create-v3-user -ro -A myAuthPass -X myPrivPass -a SHA -x AES myUser

예시) # net-snmp-create-v3-user -ro -A HappyDay -X "NiceDay1!" -a SHA -x AES innern
         adding the following line to /var/lib/net-snmp/snmpd.conf:
              createUser innern SHA "HappyDay" AES "NiceDay1!"
         adding the following line to /etc/snmp/snmpd.conf:
              rouser innern

옵션 설명

 ● myUser : SNMP v3 사용자 계정명

 ●  -ro : read-only 계정
 ●  -A : 인증 패스워드
 ●  -a : 인증 알고리즘(MD5, SHA 등)
 ●  -X : 암호화(privacy) 패스워드
 ●  -x : 암호화 알고리즘(DES, AES 등)

 

사용자 생성 후 /etc/snmp/snmpd.conf 파일 맨 아래 rouser가 등록되어 있는 것을 확인 할 수 있다.

 

5. SNMP 서비스 시작

# systemctl start snmpd

 

* 만약 방화벽을 사용 중이라면 snmp 포트인 161포트를 열여 줘야 합니다.

# firewall-cmd --permanent --add-port=161/udp
# firewall-cmd --reload

 

 

6. SNMPv3 실행 여부 확인

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

snmpwalk 명령어는 net-snmp-utils 를 설치해야 사용 가능하다.

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

SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost.localdomain 5.14.0-284.11.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 17:09:15 UTC 2023 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (6504) 0:01:05.04
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: localhost.localdomain
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.6 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: IP-MIB::ip

-------------------  생  략  --------------

 

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

 

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

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

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

 

만약 로컬 서버가 아닌 다른 서버의 SNMPv3 사용 여부를 확인 하고 싶다면 127.0.0.1 대신 해당 서버의 IP를 입력하면 되고 다른 서버가 Windows 서버라면 명령어 맨 마지막에 있는 system 을 빼고 ip까지만 입력하면 된다. 뭐 사실 리눅스 서버에 snmpwalk 실행 할 때 system 문구를 입력하지 않아도 되긴 하나 출력값이 다르게 나온다.

 

 

7. SNMPv3 사용자 삭제 방법

실수로 사용자를 잘못 생성했거나 더이상 사용하지 않아 사용자를 삭제를 해야 할 경우 등록된 유저를 삭제해 주면 된다.

 

 1) 첫번째 방법으로 사용자를 생성 했을 경우

   /etc/snmp/snmpd.conf 파일에 등록했던 유저 정보를 주석처리하거나 삭제 해 준다.

1) /etc/snmp/snmpd.conf 파일 열기

# vi /etc/snmp/snmpd.conf

#createUser innern SHA HappyDay AES "NiceDay1!"    <==== 주석처리
#rouser innern authPriv      <==== 주석처리



2) /var/lib/net-snmp/snmp.conf 파일에 사용자 정보 삭제

# vi /var/lib/net-snmp/snmp.conf

#usmUser 1 3 0x80001f8880c3fd831eb5faeb6700000000 "innern" "innern" NULL .1.3.6.1.6.3.10.1.1.3 0x26b6da9cf79833f21c0f8c7fa0b2eb5726bf03bb .1.3.6.1.6.3.10.1.2.4 0x1f57f817a3fec19578f9d761a9cfde79 ""      <==== 주석처리



3) SNMP 서비스 재시작
# systemctl restart snmpd

 

 

 2) 두번째 방법으로 사용자를 생성 했을 경우

  /etc/snmp/snmpd.conf 파일에 생성된 사용자 정보를 주석처리하거나 삭제하고

  /var/lib/net-snmp/snmp.conf 파일에 해당 사용자 정보를 주석처리하거나 삭제해 주면 된다.

1) /etc/snmp/snmpd.conf 파일에 사용자 정보 삭제

# vi /etc/snmp/snmpd.conf

#rouser innern        <==== 주석처리



2) /var/lib/net-snmp/snmp.conf 파일에 사용자 정보 삭제

# vi /var/lib/net-snmp/snmp.conf

#usmUser 1 3 0x80001f8880c3fd831eb5faeb6700000000 "innern" "innern" NULL .1.3.6.1.6.3.10.1.1.3 0x26b6da9cf79833f21c0f8c7fa0b2eb5726bf03bb .1.3.6.1.6.3.10.1.2.4 0x1f57f817a3fec19578f9d761a9cfde79 ""      <==== 주석처리



3) SNMP 서비스 재시작
# systemctl restart snmpd

 

 

 

* 문제 해결

 

snmpwalk 실행 시 

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

  => 해당 서버에 snmp 서비스가 실행되고 있지 않을 때 발생

 

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

  => /etc/snmp/snmpd.conf 파일에 해당 유저의 정보가 없는 경우

       /etc/snmp/snmpd.conf 파일에 있는 유저와 /var/lib/net-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)

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

 

* 패스워드가 영문과 숫자로만 구성되어 있을 경우 " " 없이 입력해도 되지만 특수문자가 들어갈 경우 " "를

입력해 줘야 한다.

댓글