리눅스 SNMP 확인 - linugseu SNMP hwag-in

GUI 환경에서는 다양한 MIB Browser를 활용하여, 원격 호스트의 MIB를 탐색할 수 있다. 하지만 CLI 환경에서는 사용하는 방법만 익히게 되면, 보다 많은 기능을 제공하는 Net-SNMP가 있다. 따라서 Net-SNMP를 우분투 환경에 설치하고, 유용한 명령어에 대해 다루고자 한다. 

 `SNMP`는 이전 글에서 간략히 어떤 기능을 제공하는 프로토콜인지에 대해 다루었다. 지금부터 나오는 내용을 이해하기 위해서는 `SNMP`에서 사용하는 용어와 구성 요소들에 대해 이해하여야 한다.

 `SNMP`의 기능 중 manager, agent를 모두 사용할 수 있는 `Net-SNMP`가 있다. 해당 프로그램은 과거에는 압축된 소스 파일을 직접 설치하여야 했지만, 현재는 간단히 설치할 수 있는 환경을 제공한다.

install & configure

$ sudo apt update
$ sudo apt install snmp snmpd

 설치 환경은 `ubuntu 16.04`이다. 위의 명령어와 같이 간단히 설치가 가능하며, `snmp`는 `Net-SNMP`를 설치하는 것이다. `snmpd`는 이름에서 알 수 있듯이 `snmp`를 데몬화 해주는 것이다.

$ sudo vim /etc/snmp/snmpd.conf

14 # Listen for connections from the local system only
15 # agentAddress upd:127.0.0.1:161
16 # Listen for connections on all interfaces (both IPv4 *and* IPv6)
17 agentAddress upd:161,upd6:[::1]:161

$ sudo service snmpd restart

 위와 같이 `/etc/snmp/snmpd.conf`에 15번 라인을 주석 처리하고, 17번 라인의 주석을 해제하여야 외부에서 접근이 가능하다. 또한 해당 파일에서 41번 라인 이후(ACCESS CONTROL)에 접근하고자 하는 커뮤니티를 설정하면 된다. (ex: rocommunity test 192.168.0.0/16). 정상적으로 수정하였다면, `snmpd`를 재시작하여 변경된 부분을 반영하여야 한다.

$ netstat -na | grep udp
upd	0		0 0.0.0.0:161		0.0.0.0:*
upd6	0		0 ::1:161		:::*

 정상적으로 반영되었다면, netstat에서 위와 같이 정상적으로 반영된 것을 확인할 수 있다. 만약 방화벽을 사용 중이라면 `sudo ufw allow 161`을 통해 외부에서 접근 가능하도록 추가 설정을 진행하여야 한다.

Net-SNMP command

 명령어는 크게 어떤 데이터를 반환하느냐에 따라 명령어를 나눌 수 있다. 반환하는 데이터는 스칼라, 벡터로 나뉜다. 여러 가지 명령어들이 있지만 간단한 테스트 용도나 자주 사용하는 명령어는 아래와 같다.

(각 명령어들은 대부분 `-v snmp version`, `-c community name`, `ip addr or hostname`을 명시하여야 한다.)

snmpstatus

$ snmpstatus -v 2c -c public localhost

[UDP: [127.0.0.1]:161->[0.0.0.0]:47309]=>[Linux kwon-virtualBox 4.15.0-132-generic #136~16.04.1-ubuntu SMP Tue 12 18:22:20 UTC 2021 x86_64] Up: 0:49:04.77 Interface: 2, Recv/Trans packets: 0/0 | IP: 0/0

  위의 실행 결과에서도 알 수 있듯이, 간단히 특정 호스트의 상태 정보를 확인 할 수 있다.

snmpget

$ snmpget -v 2c -c public localhost sysName.0

 특정 인스턴트 만을 조회하고자 할 때 사용한다.

snmpwalk

$ snmpwalk -v 2c -c public localhost

 `snmpget`과 달리 호스트의 모든 인스턴스를 조회할 수 있다.

access remote host

 경우에 따라, 내가 지정한 커뮤니티(IP 또는 IP 대역)에 대해서만 SNMP 통신이 가능하게 할 수도 있을 것이다. 이를 위해서는 위와 같이 설정하는 것이 아니라 아래와 같이 설정을 하여야 한다.

$ sudo vim /etc/snmp/snmpd.conf

14 # Listen for connections from the local system only
15 agentAddress upd:127.0.0.1:161
16 # Listen for connections on all interfaces (both IPv4 *and* IPv6)
17 agentAddress upd:161,upd6:[::1]:161

51 #rocommunity public default -V systemonly
52 #rocommunity6 public default -v systemonly
53 rocommunity ETH0 192.168.0.0/16

$ sudo service snmpd restart

 remote host에 public community를 주석 처리 하고, `ETH0`라는 rocommunity를 지정한다. 또한, 특정 IP 대역만 허용한다. 따라서 해당 설정의 경우 remote host로 snmp 통신을 하기 위해서는 `snmpstatus -v 2c -c ETH0 remote host ip`를 입력하고, 해당 명령어를 실행하는 agent의 IP 대역이 `192.168.0.0` 대역이어야 한다.

 즉, community의 이름을 관리자 또는 사용자만 알 수 있는 것으로 변경하고 IP 대역을 제한한다면 snmp v3의 보안 기능을 사용하지 않아도 외부 접근을 막을 수 있다.

리눅스 SNMP 확인 - linugseu SNMP hwag-in

snmp설치

yum –y install net-snmp를 설치

혹시 먼저 올려논 iptables와 충돌로 인해 설치가 안될 수 있으니

잠시 중지시키거나 초기화해준다

리눅스 SNMP 확인 - linugseu SNMP hwag-in

net-snmp-utils도 설치

snmp를 실행 시켜준다

/etc/snmp로 이동하여 snmpd.conf 백업파일 생성

이후 원본파일 백지로 만들어준다.

snmpd.conf 파일을 편집해준다.

이후 snmpd 재시작을 해준다.

udp 161번 포트상태 확인

snmp tester를 이용해서 연결확인

이후 iptables의 정책을 이용하여 snmp 접근을 제어할 수 있다

'리눅스 실습' 카테고리의 다른 글

(Linux) Proxy 서버 만들기  (0) 2019.08.07
(Linux) snmp 설치  (0) 2019.07.25
(Linux) iptables 스크립트 작성  (0) 2019.07.23
(Linux) iptables 구성  (0) 2019.07.23
(Linux) zero board 설치  (0) 2019.07.18
(Linux)리눅스 디스크 1ea 추가  (0) 2019.05.20