CMU-SNMP의 소개와 사용법 노 정 민 한국 항공 대학교 항공통신정보공학과 대학원 http://esc.cl.hangkong.ac.kr/~hmask hmask@esc.cl.hangkong.ac.kr CMU-SNMP는 카네기 멜론 대학에서 개발한 SNMP 관리 프로그램이다. CMU-SNMP는 SNMP 에이전트와 몇 가지 SNMP 응용 프로그램들을 포함하 고 있으며, SNMPv1과 SNMPv2를 지원한다(SNMPv2의 보안 문제해결을 위해 초기 버전인 SNMPv2party 모델은 지원하지 않고 SNMPv2usec 모델을 지원 한다). 현재 가장 최신 버전은 3.6이며 리눅스 안정커널 v2.0.35, 실험커널 v2.1.125와 libc v5.4.38이상에서 동작한다. 하지만 버전 3.4 이상은 큰 차이가 없으므로 낮 은 버전을 사용해도 상관없다. CMU SNMP에서 지원하는 MIB는 다음과 같다. - MIB-2(RFC 1213) - Identification MIB(RFC 1414) - Host Resources MIB(RFC 1514) - TUBS Linux MIB(리눅스 사양에 맞는 실험적인 MIB) 1. 설치 CMU-SNMP는 다음의 site에서 구할 수 있다. Main ftp site ftp://ftp.ibr.cs.tu-bs.de/pub/local/linux-cmu-snmp/ Mirror ftp://sunsite.unc.edu/pub/Linux/system/network/admin(국외) ftp://ftp.kreonet.re.kr/pub/Linux/sunsite/system/network/admin(국내) 배포판은 소스 버전과 바이너리 버전의 두 가지 종류가 있으며, 3.4 버전을 기 준으로 설명하고자 한다. 각각의 파일이름은 다음과 같다. - cmu-snmp-linux-3.4-src.tar.gz(소스 버전) - cmu-snmp-linux-3.4-bin.tar.gz(바이너리 버전) 설치 방법 설치하는 방법은 바이너리 버전을 설치하는 방법과 소스를 컴파일해서 설치하 는 방법 등 두 가지가 있다. (1) 바이너리 설치 바이너리 배포판을 설치하기 위해서는 먼저 리눅스 시스템이 ELF를 지원해야 한다(ELF libc, ELF kernel). 그리고 기존의 snmpd 데몬이나 snmplib를 사용 하고 있으면 삭제한 다음에 설치해야 한다. 설치 과정은 다음과 같다. - root로 login - cd /(root 디렉토리로 이동한다.) - tar xvzf .../cmu-snmp-linux-3.4-bin.tar.gz (배포판을 푼다.) - cd /tmp/cmu-snmp-linux/etc - ./installconf -mini (agent의 패스워드를 설정한다.) - /etc/rc.local 파일에 다음과 같이 ‘snmpd’ 데몬을 추가한다. - /usr/sbin/snmpd -f ; echo ‘snmpd’ (2) 소스 설치 - root로 login - tar xvzf .../cmu-snmp-linux-3.4-src.tar.gz (적당한 디렉토리에 소스를 푼다.) - cd cmu-snmp-linux-3.4 - ./configure - make(컴파일 한다.) - make install - cd ./etc - ./installconf -mini (agent의 패스워드를 설정한다.) - /etc/rc.local 파일에 다음과 같이 ‘snmpd’ 데몬을 추가한다. /usr/sbin/snmpd -f ; echo ‘snmpd’ 설치를 끝났으면 재 부팅한 다음 snmpwalk 프로그램을 사용하여 테스트 해보 자. 그림 1은 snmpwalk를 사용하여 시스템 테이블을 살펴본 것으로 현재 설정 되어 있는 시스템 내용을 확인할 수 있다. 2. 응용 프로그램들 (1) snmpd CMU의 SNMP 에이전트로서 SNMPv1과 SNMP 2usec의 질의에 대한 응답을 해준다. 환경 설정은 snmpd.conf 파일에 의해서 이루어지며 관리자는 system .sysName, system.sysLocation과 system.sys Contact 등의 내용을 설정해 줄 수 있다. SNMPv1 질의에 대한 community 이름은 기본적으로 모두 ‘public’이며, host 테이블의 SNMPv2usec 형태의 질의는 보안 내용에 따라 다른 community를 사용한다. 옵션은 다음과 같다. - d : SNMP 패킷 내용을 덤프해서 보여준다. - f : 실행한 다음 백그라운드에서 동작하게 한다. - c : 실행에 필요한 설정 파일을 불러들인다. - a : 실행에 필요한 agent 설정 파일을 불러들인다. (2) snmpd.conf snmpd를 위한 설정파일이다. 파일의 내용은 view와 user, community 설정에 관한 부분과 포트, 인터페이스 설정에 관한 부분의 두 가지로 나뉜다. 전자의 설정은 보안을 위해서 접근 권한을 다음과 같이 세 가지로 구분된다. switch security posture - mini internet subtree에 대해서만 read-only 권한으로만 접근할 수 있다. - semi system subtree와 agent 통계에 대해서만 read-only 권한으 로 접근할 수 있다. - very agent 통계에 대해서만 read-only 권한으로 접근할 수 있다. 처음 설치(installconf)할 때 이 스위치에 따라서 패스워드를 정해 줄 수 있다. 그 외 다른 설정에 대한 키와 파라미터는 다음과 같다. 이를 바탕으로 설정한 snmpd.conf 파일의 예는 다음과 같다. 이를 바탕으로 설정한 snmpd.conf 파일의 예는 다음과 같다. (3) snmpget SNMP 에이전트에게 Get Request를 해서 Response를 받아오는 프로그램이다. 사용법 : snmpget host community variable COMMUNITY Argument snmpget 프로그램은 SNMPv1/SNMPv2c/SNMPv2u sec을 전부 지원하기 때문 에, 이들을 argument를 통해서 구분한다. - community 문자열의 첫 자가 “+”로 시작되면 SNMPv2c (cmomunity-based SNMPv2)로 인식한다. - community 문자열의 첫 자가 “-”로 시작되면 SNMPv2u(User-based - security model)로 인식한다. - 그 외 다른 community 문자열은 전부 SNMPv1로 인식한다. SNMPv2u의 전체적인 community문자열은 다음과 같다. /userName/[authenticationKey]/[privacyKey]/[contextSelector] 여기서 키 값은 문자열과 hex 코드를 사용할 수 있으며, hex 코드를 사용할 때 는 반드시 맨 앞에 ‘0x’를 추가해야 한다. 사용 예는 다음과 같다. /joy : QoS = noAuth/noPriv, userName = "joe" /boneless/chicken/ranch : QoS = auth/priv, userName ="boneless", authKey ="chicken", privKey ="ranch" /maplesyrup/sugarbush// : QoS = auth/noPriv, context ="other", userName ="maplesyrup" authKey ="sugarbush" /glenn/0x4ca25023b00a6689ef21cb1b6fa9cb0e : QoS = auth/noPriv, context="", userName ="glenn" authKey ="0x4ca25023b00a6689ef21cb1b6fa9cb0e" +public : SNMPv2c public : SNMPv1 (4) snmpgetnext SNMP 에이전트에게 Get Next Request를 사용하여 여러 개의 Response를 되 돌려 받는다. 사용법 : snmpgetnext host community variable-name [variable-name] . . . (5) snmptrap SNMP 트랩 메시지를 지정한 호스트에 전송한다. 사용법 : snmptrap host community trap-type specific-type device-description device description 트랩 메시지에 전달할 장치에 관한 설명으로 system. sysDescr.0에 저장되는 변수 값이다. # snmptrap nic.andrew.cmu.edu public 0 0 ‘SUN 3/60: SUNOS 4.0’ # (nic.andrew.cmu.edu의 시스템에 coldStart 트랩을 전송한다) (6) snmptrapd 외부에서 전달된 SNMP 트랩 메시지를 162번 포트를 통해서 받는다. 옵션은 다음과 같다. - p : 메시지를 화면에 출력한다. - s : syslog를 사용하여 메시지를 저장한다. 이런 syslog 메시지는 LOG_WARNING 레벨로 전달된다. - v 1 : SNMPv1 트랩 메시지를 받는다. - d : 패킷을 덤프하여 출력한다. snmptrapd를 동작시키고 snmptrap을 사용하여 localhost로 트랩 메시지를 전송 한 예. snmpd.conf의 예 # snmpd.conf - created Mon Aug 30 16:26:04 KST 1999 # view configuration # viewName OID included/excluded # internet view all .1.3.6.1 included # internet view mini .1.3.6.1 included # for v1 public exclude exclude mib-2.ident.identInfo # and mib-2.host.hrSWRun in the mini view: view xmini .1.3.6.1 included view xmini .1.3.6.1.2.1.24.1 excluded view xmini .1.3.6.1.2.1.25.4 excluded # system, snmp, usecAgent, usecStats view semi .1.3.6.1.2.1.1 included view semi .1.3.6.1.2.1.11 included view semi .1.3.6.1.6.3.6.1.1 included view semi .1.3.6.1.6.3.6.1.2 included # . . . 중략 # community configuration # commName readV writeV community public xmini - ## uncomment for private entry: # community private mini mini ## port to use (default is 161): # port: 161 ## the entry of system.Contact and system.Location: sysContact: Not Configured sysLocation: Not Configured ## the system name is per default determined from the hostname: # sysName: chappell ## trap sink address and community string. (passed to snmptrap(1)utility). ## authentraps contains the value of snmpEnableAuthenTraps; (default is `disabled’). trap sink: localhost trap community: public snmpEnableAuthenTraps: disabled ## specify type and speed of interfaces: if the last char is an asterisk, any suffix will match. interface: lo0 24 20000000 interface: eth* 6 10000000 interface: sl* 28 28800 interface: ppp* 23 28800