SNMP 프로토콜로 원격 호스트의 정보를 가져와 보기

snmp에 대해 정리하고 net-snmp 서비스를 사용해 원격 호스트의 정보를 가져와 봤습니다.
2021.10.09

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 EC2 인스턴스에 net-snmp 서비스를 설치하고, SNMP 통신을 해봤습니다.

SNMP란?

SNMP ( Simple Network Management Protocol )는 IP 네트워크 에서 관리되는 장치에 대한 정보를 수집 및 구성하고 장치 동작을 변경하기 위해 해당 정보를 수정 하기 위한 인터넷 표준 프로토콜입니다 .

즉 네트워크상 장치로부터 정보를 수집하거나 관리하는 데 사용 됩니다.

OID란?

네트워크를 구성할 수 있는 IT장비들은 SNMP 프로토콜을 통해서 정보를 주고받습니다. 이때 주고받는 정보를 MIB(Management information base)라고 합니다. 이 때 MIB에는 CPU 사용량, 매모리 사용량, 인스턴스 정보 등등이 들어가 있습니다. 여기서 OID(Object IDentifier)는 MIB에 들어가 있는 정보에 대한 ID 값이라고 보면 됩니다.

OID는 이러한 트리구조로 되어있으며, 숫자와 문자열로 구성되어 있습니다.

예를들어, Internet은 1.3.6.1, dpsAlarmControl은 1.3.6.1.4.1.2682.1의 구조로 되어있습니다.

  • system.sysDescr text 시스템 정보-회사, 모델, OS종류 등
  • system.sysLocation text 시스템의 물리적 위치
  • system.sysContact text 시스템 구입자에 대한 연락 정보
  • system.sysName text 시스템의 이름, 보통 완전한 DNS명
  • interfaces.ifNumber int 존재하는 네트워크 인터페이스의 개수
  • interfaces.ifTable table 각 인터페이스에 대한 정보비트 테이블
  • ip.ipForwarding int 시스템이 게이트웨이면 1, 아니면 2

그 외에, 숫자가 아닌 문자를 통해서 정보를 가져올 수도 있습니다.

EC2 인스턴스에서 SNMP 구성

sudo yum install net-snmp
sudo yum install net-snmp-utils

각 2대의 EC2 인스턴스에 snmp를 설치합니다.

sudo service snmpd start

snmp 데몬을 실행시킵니다.

snmp는 udp 162, 162번 포트를 사용하기 때문에 OID를 받아올 인스턴스의 보안그룹에 UDP 161번 포트를 열어줍니다. 특정 인스턴스에만 허용하고 싶을 경우 원본을 해당 인스턴스의 아이피 주소로 바꾸면 됩니다.

cd etc/snmp
vi snmpd.conf

해당 위치에 snmpd.conf로 들어오게 되면 snmp에 대한 구성을 설정할 수 있습니다.

예를 들어, 커뮤니티 이름, 보안 이름, 소스 IP를 설정할 수 있는 데, 여기서 커뮤니티 이름은 snmp를 연결할 때 사용하는 암호로 사용됩니다.

아무런 아이피를 적어주지 않고, default로 설정하면 어디서든 들어올 수 있게 됩니다.

특정 아이피 주소만 허용하고 싶으면 이런식으로 default 값을 수정하면 됩니다.

SNMP 테스트

snmpget -v2c -c public 52.199.167.240 system.sysDescr.0

해당 명령어로 인스턴스에 대한 정보를 가져와 보겠습니다.

명령어를 입력해 보면 해당 인스턴스의 IP 주소와 인스턴스 유형을 포함한 정보를 가져옵니다.

snmpget -v2c -c public 52.199.167.240 system.sysContact.0

이어서 시스템 사용자에 대한 정보를 가져와 보겠습니다.

사용자 정보 또 한 성공적으로 가져오는 것을 볼 수 있습니다.

참고