본문 바로가기

CentOS

SNMP 설치하기

SNMP(Simple Network Management Protocol)는 네트워크에서 관리되는 장치(라우터, 스위치, 서버 등등)에 대한 정보를 수집하거나 수정할 수 있는 인터넷 표준 프로토콜이다. 장치의 CPU/메모리/디스크 사용량을 수집한다거나, 네트워크 인터페이스를 업/다운시키는 등의 작업이 가능하다.

 

SNMP에는 3가지 버전이 있다.

1. 버전 1(v1) : COMMUNITY STRING을 이용해 제한적인 접근이 가능한 첫번째 버전이다. 그런데 데이터가 암호화되지 않은 채 전송되기 때문에 취약점 공격에 노출되곤 한다. COMMUNITY STRING이 일종의 패스워드 역할을 하지만 패킷을 떠보면 평문 그대로 노출된다.
2. 버전 2(v2c) : 버전 1이 32비트 데이터만 취급 가능했던 것과 달리 64비트 데이터 카운터까지 지원한다. 덤으로 많은 양의 데이터를 한 번에 불러올 수 있는 GetBulkRequest를 도입했다. 하지만 여전히 데이터는 암호화되지 않았다.
3. 버전 3 : 드디어 데이터 암호화가 적용되었다.

버전 3에는 데이터 암호화 이외에도 많은 변화가 있었다. 자세한 내용은 위키를 참조하자.

https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Protocol_versions

 

Simple Network Management Protocol - Wikipedia

Simple Network Management Protocol (SNMP) is an Internet Standard protocol for collecting and organizing information about managed devices on IP networks and for modifying that information to change device behavior. Devices that typically support SNMP incl

en.wikipedia.org

일단 로컬에서만 SNMP를 사용할 계획이어서 버전 2를 사용할 계획이다. 그리고 기본 포트인 161번도 그대로 사용하는 대신 SNMP를 localhost에서만 쿼리할 수 있도록 제한할 것이다..

 

CENTOS를 Minimal install로 설치했다면 snmp를 설치해야한다.

# dnf install net-snmp net-snmp-utils

snmp 테스트를 위해 snmpwalk를 사용하기 위해선 net-snmp-utils를 같이 설치해줘야 한다. 설치를 마쳤다면 snmpd(snmp deamon) 서비스를 실행해야 한다. 그전에 앞서 몇 가지 설정을 해야 한다.

# cd /etc/snmp/
# cp snmpd.conf snmpd.conf_bak
# vi snmpd.conf

config 파일 내에 설정 순서가 워낙 잘 나와있어서 그대로 따라가면 된다.

 

1. community을 security name에 매핑

# First, map the community name "public" into a "security name"

#           sec.name   source      community
com2sec  localUser   localhost   XXXXXX

커뮤니티 스트링을 security name에 매핑하는 과정이다. 취향에 따라 설정한다.

 

2. security name을 그룹에 매핑

# Second, map the security name into a group name:

#       groupName  securityModel  securityName
group localGroup    v2c                localUser
group localGroup    v3                 v3User

1번에서 만들었던 security name들을 group에 매핑한다. 어차피 버전 1은 사용하지 않을 계획이어서 v2c를 설정했다. 덤으로 v3User도 미리 매핑해두었다. v3User는 나중에 따로 유저를 생성할 계획이다.

 

3. view 생성하기

# Third, create a view for us to let the group have rights to:

# Make at least snmpwalk -v 1 localhost -c public system fast again.
#        name          incl/excl     subtree            mask(optional)
view    systemview   included    .1

그룹에게 허용해줄 subtree(OID)들을 명시한 뷰를 생성한다. 다음 단계에 나오겠지만 여기서 만든 view를 group에게 매핑해준다.

OID는 대부분의 장치들이 공통적으로 가지는 tree가 있고, 장치별 또는 제조사별로 특수한 값을 가지는 tree도 있다. 난 주로 HW Resource 사용량 체크에 사용되는 OID만 필요하지만 일단 tree의 최상단 값으로 정의했다.

 

4. 그룹에게 view 권한 주기

# Finally, grant the group read-only access to the systemview view.

#         group         context  sec.model  sec.level   prefix   read           write   notif
access  localGroup    ""         any          noauth     exact   systemview  none   none

지금까지 만들었던 group과 view를 매핑하면 끝. 몇 개의 예시 설정이 snmpd.conf 아래쪽에 나와있으므로 그곳을 참조해도 된다.

 

이제 저장하고 빠져나와서 snmp 데몬을 실행해준다.

# systemctl start snmpd

서비스가 제대로 실행되었는지 확인해본다.

# netstat -an | grep 161

 

이제 위에서 설정한 값을 토대로 쿼리를 날려본다.

# snmpbulkget -v 2c -c XXXXXX localhost  .1

결과 화면

 

community string을 잘 못 넣거나, agent ip를 잘 못 넣었을 때 어떻게 되는지도 확인해본다.

 

community string을 잘 못 넣은 경우
community string은 일치하지만 설정하지 않은 source ip로 snmp를 요청했을 경우

만약 1번에서 localhost 이외의 내부 네트워크 ip(192.168.XX.XX/24)도 설정했을 때, 해당 네트워크에 있는 다른 컴퓨터에서 테스트해보려면 MIB Browser를 구글에서 찾아 설치해서 테스트해볼 수도 있다.

 

그전에 방화벽(firewalld)을 설정해야 하는데, 이번에는 기본 포트(udp 161)를 그대로 사용하기 때문에 firewalld에 snmp 서비스를 추가해주는 것으로 끝낸다.

# firewall-cmd --permanent --add-service snmp

 

 

 

'CentOS' 카테고리의 다른 글

MariaDB Trouble Shooting  (0) 2020.02.29
MariaDB 설치하기  (0) 2020.02.28
JAVA 설치하기  (0) 2020.02.27
git 설치하기  (0) 2020.02.27
SSH 포트 변경하기  (0) 2020.02.26