SNMP(Simple Network Management Protocol, 단순 네트워크 관리 프로토콜)는 서버, 네트워크 장비, 프린터 등 다양한 IP 기반 장치의 현재 상태 정보를 수집하는 데 사용되는 프로토콜입니다. SNMP를 통해 CPU 사용률, 프로세스 수, 서비스 상태 등 다양한 지표를 확인할 수 있습니다. SNMP의 가장 큰 장점은 거의 모든 장비에서 지원된다는 점과 별도의 모니터링 에이전트를 설치할 필요가 없다는 것입니다.
이 글에서는 CentOS, RHEL, Fedora를 실행하는 리눅스 호스트에 SNMP 에이전트(및 SNMPv3)를 설치하고 구성하는 방법을 단계별로 소개합니다.
리눅스에 SNMP 에이전트 및 진단 도구 설치하기
SNMP 패키지를 설치하기 전에 먼저 dnf(yum)를 사용해 서버에 최신 업데이트를 적용하세요.
# dnf update -y
그다음 기본 저장소에서 SNMP 에이전트와 추가 진단 도구를 함께 설치합니다.
# dnf install net-snmp net-snmp-utils -y
net-snmp 패키지에는 SNMP 데몬(snmpd)이 포함되어 있고, net-snmp-utils에는 snmpwalk 같은 테스트용 유틸리티가 포함되어 있어 두 패키지를 모두 설치하는 것이 좋습니다.
리눅스에서 SNMP 에이전트 활성화 및 구성 방법
SNMP 설정을 시작하기 전에 원본 구성 파일을 백업해 둡니다.
# mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
그런 다음 SNMP 에이전트 설정 파일을 편집합니다.
# nano /etc/snmp/snmpd.conf
파일에 아래 내용을 추가합니다.
rocommunity public syslocation GE-DC2 syscontact gedc2-admins@woshub.com
각 항목의 의미는 다음과 같습니다.
- rocommunity public: 읽기 전용(read-only) 커뮤니티 문자열을 'public'으로 지정합니다. 보안을 위해 기본값 대신 고유한 문자열로 변경하는 것이 좋습니다.
- syslocation: 장비가 위치한 물리적 장소를 나타냅니다.
- syscontact: 해당 장비의 관리자 이메일 주소입니다.
Net-SNMP 에이전트에는 이 외에도 다양한 구성 옵션이 있지만, 여기서는 가장 기본적인 세 가지 파라미터만 다룹니다. 올바른 위치와 유효한 이메일 주소를 입력한 후 파일을 저장하고, snmpd 서비스를 활성화한 뒤 시작합니다.
# systemctl enable snmpd.service
# systemctl start snmpd
서비스가 정상적으로 실행 중인지 확인합니다.
# systemctl status snmpd
방화벽에서 SNMP 포트 허용하기
서버에서 방화벽을 사용 중이라면 TCP/UDP 161번과 162번 포트로의 연결을 허용해야 합니다. firewalld에서 SNMP 포트를 여는 명령어는 다음과 같습니다.
# firewall-cmd --zone=public --add-port=161/udp --permanent
# firewall-cmd --zone=public --add-port=161/tcp --permanent
# firewall-cmd --zone=public --add-port=162/udp --permanent
# firewall-cmd --zone=public --add-port=162/tcp --permanent
# firewall-cmd --reload
snmpwalk로 SNMP 에이전트 조회하기
snmpwalk 도구를 사용하면 SNMP 에이전트를 직접 조회할 수 있습니다. SMMPv2 프로토콜로 로컬에서 서비스를 테스트하려면 아래 명령어를 실행합니다.
# snmpwalk -v 2c -c public -O e 127.0.0.1
SNMP가 올바르게 구성되었다면 에이전트로부터 일련의 SNMP 데이터를 받게 됩니다.
문제 해결: Timeout 오류
구성 파일 설정 후 테스트 명령을 실행했을 때 아래와 같은 오류가 발생할 수 있습니다.
Timeout: No Response from localhost
이 경우 구성 파일을 비우고 위에서 안내한 줄만 추가하면 문제가 해결됩니다. 특정 설정이 필요하다면 반드시 꼼꼼히 검증하세요. 서비스 자체는 문제없이 시작되지만 실제로는 동작하지 않는 상황이 발생할 수 있습니다.
아래 명령으로 서버를 로컬에서 조회할 수도 있습니다.
# snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux server1.test.com 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (106564) 0:17:45.64 SNMPv2-MIB::sysContact.0 = STRING: gedc2-admins@woshub.com SNMPv2-MIB::sysName.0 = STRING: server1.test.com SNMPv2-MIB::sysLocation.0 = STRING: GE-DC2
출력 결과에서 시스템 설명, 운영 시간, 관리자 연락처, 호스트 이름, 위치 정보 등을 확인할 수 있습니다.
원격 접속 테스트
이제 SNMP 에이전트가 원격에서도 접근 가능한지 확인합니다. 다른 서버에서 아래 명령을 실행하세요(사전에 snmp 도구를 설치해야 합니다).
# snmpwalk -v2c -c public 192.168.21.205 system
원격 서버가 SNMP를 통해 대상 서버의 정보를 정상적으로 수신했다면, 이제 해당 서버를 Zabbix나 Cacti 같은 SNMP 기반 모니터링 시스템에 등록할 수 있습니다.
CentOS/RHEL/Fedora에서 SNMPv3 구성하기
앞서 살펴본 구성은 SNMP v1/v2 기반이었습니다. SNMPv3는 인증과 암호화를 지원하는 더 최신이고 안전한 프로토콜 버전입니다. SNMPv3를 구성하려면 비밀번호가 설정된 사용자를 생성하고, 암호화 비밀번호, 접근 권한, 암호화 알고리즘(MD5 또는 SHA)을 지정해야 합니다.
SNMPv3 사용자를 생성하려면 먼저 snmpd 데몬을 중지합니다.
# systemctl stop snmpd
그다음 사용자를 생성합니다.
# net-snmp-create-v3-user -ro -A o2ps2w0dD -a SHA -X r30svV33 -x AES snmpuser
net-snmp-create-v3-user 명령어의 기본 문법은 다음과 같습니다.
net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username]
- -ro: 사용자에게 읽기 전용 권한을 부여합니다.
- -A authpass: 인증 비밀번호를 지정합니다.
- -X privpass: 개인 키(암호화 비밀번호)를 지정합니다.
명령을 실행하면 지정된 비밀번호와 키를 가진 사용자가 생성됩니다.
이제 서비스를 다시 시작합니다.
# systemctl start snmpd
마지막으로 snmpwalk로 SNMP 에이전트를 조회해 보세요. SNMPv3로 조회할 때는 사용자 이름, 비밀번호, 키를 반드시 지정해야 합니다.
# snmpwalk -v3 -a SHA -A o2ps2w0dD -x AES -X r30svV33 -l authPriv -u snmpuser 192.168.21.205 | head
정상적으로 출력되면 SNMPv3 기반의 안전한 모니터링 환경 구성이 완료된 것입니다. 참고로 VMWare ESXi 호스트에 SNMP를 구성하는 방법에 대한 별도의 가이드도 확인해 보시기 바랍니다.