웹사이트 검색

Ubuntu 14.04에서 SNMP 데몬 및 클라이언트를 설치 및 구성하는 방법


소개

시스템 관리자의 역할 중 상당 부분은 서버 및 인프라에 대한 정확한 정보를 수집하는 것입니다. 이러한 유형의 정보를 수집하고 처리하기 위한 다양한 도구와 옵션이 있습니다. 그들 중 다수는 SNMP라는 기술을 기반으로 합니다.

SNMP는 단순 네트워크 관리 프로토콜을 나타냅니다. 이는 서버가 현재 상태에 대한 정보를 공유할 수 있는 방법이며 관리자가 미리 정의된 값을 수정할 수 있는 채널이기도 합니다. 프로토콜 자체는 매우 단순하지만 SNMP를 구현하는 프로그램의 구조는 매우 복잡할 수 있습니다.

지난 가이드에서는 SNMP 프로토콜의 기본 사항에 대해 배웠습니다. 이 가이드에서는 SNMP를 사용하여 통신하도록 도구를 설정하는 방법을 시연하기 시작합니다. 시연을 위해 두 개의 Ubuntu 14.04 서버를 사용하지만 대부분의 다른 시스템은 몇 가지 수정 사항을 따라갈 수 있어야 합니다.

SNMP 데몬 및 유틸리티 설치

일부 Ubuntu 시스템에 데몬과 도구를 설치하여 시스템에서 SNMP를 구현하는 방법을 탐색할 수 있습니다.

우리는 두 개의 서버를 사용할 것입니다. 하나는 관리자 부분을 포함하고 다른 서버는 에이전트를 포함합니다. 관리자 시스템에도 에이전트를 설치하도록 선택할 수 있지만 별도로 유지하면 각 구성 요소에서 제공하는 기능을 쉽게 보여줄 수 있습니다.

첫 번째 서버에서 apt 데이터베이스를 업데이트하고 관리자 구성 요소를 설치합니다. 이와 함께 이름으로 대부분의 MIB 트리에 액세스할 수 있는 표준 MIB에 대한 독점 정보가 포함된 snmp-mibs-downloader라는 다른 패키지도 다운로드합니다.

sudo apt-get update
sudo apt-get install snmp snmp-mibs-downloader

데몬을 실행할 두 번째 서버에서 다음을 입력하여 필요한 구성 요소를 설치할 수 있습니다.

sudo apt-get update
sudo apt-get install snmpd

이제 이러한 구성 요소를 설치했으므로 설정을 구성해야 합니다.

SNMP 관리자 구성

위에서 언급했듯이 대부분의 작업은 에이전트 구성 요소에서 발생하므로 실제로 이 시스템에서 구성이 매우 쉽습니다. 클라이언트가 설치한 추가 MIB 데이터를 사용할 수 있도록 파일 하나만 수정하면 됩니다.

sudo 권한으로 텍스트 편집기에서 /etc/snmp/snmp.conf 파일을 엽니다.

sudo nano /etc/snmp/snmp.conf

이 파일에는 몇 개의 주석과 주석이 없는 한 줄이 있습니다. 관리자가 MIB 파일을 가져오도록 허용하려면 mibs : 행을 주석 처리하기만 하면 됩니다.

#mibs :

완료되면 파일을 저장하고 닫습니다.

이제 관리자 부분 구성을 마쳤지만 에이전트 컴퓨터 구성을 돕기 위해 이 서버를 계속 사용해야 합니다.

SNMP 에이전트 시스템 구성

진정한 클라이언트-서버 시스템으로서 에이전트 컴퓨터에는 자체 SNMP 설정을 구성하는 데 필요한 외부 도구가 없습니다. 일부 구성 파일을 수정하여 일부 변경할 수 있지만 필요한 대부분의 변경은 관리 서버에서 에이전트 서버에 연결하여 수행됩니다.

시작하려면 에이전트 컴퓨터에서 sudo 권한으로 데몬의 구성 파일을 열어야 합니다.

sudo nano /etc/snmp/snmpd.conf

내부에서 몇 가지를 변경해야 합니다. 이들은 주로 다른 서버에서 관리할 수 있도록 구성을 부트스트랩하는 데 사용됩니다.

먼저 agentAddress 지시문을 변경해야 합니다. 현재는 로컬 컴퓨터에서 시작되는 연결만 허용하도록 설정되어 있습니다. 현재 줄을 주석 처리하고 아래 줄의 주석을 제거해야 모든 연결이 허용됩니다(곧 잠글 예정).

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

다음으로 임시로 createUser 행을 삽입해야 합니다. 이러한 지시문은 일반적으로 이 파일에 보관되지 않지만 곧 다시 제거할 예정이므로 크게 문제가 되지 않습니다.

우리가 만들고 있는 사용자는 부트스트랩이라고 하며 첫 번째 "실제\ 사용자를 만들기 위한 템플릿으로 사용됩니다. SNMP 패키지는 사용자 속성을 복제하는 프로세스를 통해 이를 수행합니다.

새 사용자를 정의할 때 인증 유형(MD5 또는 SHA)을 지정하고 8자 이상이어야 하는 암호를 제공해야 합니다. 우리처럼 전송에 암호화를 사용하려는 경우 개인 정보 보호 프로토콜(DES 또는 AES)과 선택적으로 개인 정보 보호 프로토콜 암호를 지정해야 합니다. 프라이버시 프로토콜 암호가 제공되지 않으면 프라이버시 프로토콜에도 인증 암호가 사용됩니다.

사용자 생성 라인은 다음과 같습니다.

createUser bootstrap MD5 temp_password DES

이제 새 사용자를 지정했으므로 이 사용자가 갖게 될 액세스 수준을 설정해야 합니다. 부트스트랩 사용자와 demo라는 새로운 사용자를 위해 이것을 설정할 것입니다. rwuser 지시문을 사용하여 읽기 및 쓰기 액세스를 허용합니다(대안은 읽기 전용 액세스를 위한 rouser입니다).

사용자 뒤에 priv를 지정하여 암호화 사용을 시행합니다. 사용자를 MIB의 특정 부분으로 제한하려는 경우 줄 끝에 사용자가 액세스해야 하는 최상위 OID를 지정할 수 있습니다.

우리의 목적을 위해 두 줄 모두 매우 간단합니다.

rwuser bootstrap priv
rwuser demo priv

이러한 변경을 마치면 파일을 저장하고 닫습니다.

이러한 변경 사항을 구현하려면 snmpd 서비스를 다시 시작하십시오.

sudo service snmpd restart

이제 관리 소프트웨어를 설치한 시스템에서 에이전트 서버에 연결하여 일반 사용자를 생성할 수 있습니다.

사용자 관리에 사용되는 snmpusm 도구를 사용하여 이 작업을 수행합니다. 제대로 작동하려면 에이전트 서버의 IP 주소를 알아야 합니다.

시작하기 전에 SNMP 명령을 보내는 일반적인 구조에 대해 조금 이야기하겠습니다.

SNMP 명령의 일반 구조

snmp 패키지(net-snmp 소프트웨어 제품군)에 포함된 도구 모음을 사용할 때 명령을 호출해야 하는 방식에 몇 가지 패턴이 있음을 알 수 있습니다.

가장 먼저 해야 할 일은 통신하려는 SNMP 데몬으로 인증하는 것입니다. 여기에는 일반적으로 꽤 많은 정보를 제공하는 것이 포함됩니다. 일반적인 것은 아래와 같습니다.

  • -v VERSION: 이 플래그는 사용하려는 SNMP 프로토콜의 버전을 지정하는 데 사용됩니다. 이 가이드에서는 v3를 사용합니다.
  • -c COMMUNITY: 인증을 위해 SNMP v1 또는 v2 스타일 커뮤니티 문자열을 사용하는 경우 이 플래그가 사용됩니다. v3 스타일의 사용자 기반 인증을 사용하고 있으므로 이것이 필요하지 않습니다.
  • -u USER-NAME: 이 매개변수는 인증하려는 사용자 이름을 지정하는 데 사용됩니다. SNMP를 사용하여 무엇이든 읽거나 수정하려면 알려진 사용자 이름으로 인증해야 합니다.
  • -l LEVEL: 연결하려는 보안 수준을 지정하는 데 사용됩니다. 가능한 값은 noAuthNoPriv(인증 및 암호화 없음), authNoPriv(인증 및 암호화 없음), authPriv(인증 및 암호화)입니다. 사용 중인 사용자 이름은 지정한 보안 수준에서 작동하도록 구성해야 합니다. 그렇지 않으면 인증에 성공하지 못합니다.
  • -a PROTOCOL: 이 매개변수는 사용되는 인증 프로토콜을 지정하는 데 사용됩니다. 가능한 값은 MD5 또는 SHA입니다. 이것은 사용자가 생성될 때 지정된 정보와 일치해야 합니다.
  • -x PROTOCOL: 이 매개변수는 사용되는 암호화 프로토콜을 지정하는 데 사용됩니다. 가능한 값은 DES 또는 AES입니다. 이것은 사용자가 생성될 때 지정된 정보와 일치해야 합니다. 이는 사용자의 권한 사양 뒤에 priv가 있을 때마다 필요하므로 암호화가 필수입니다.
  • -A PASSPHRASE: 사용자가 생성될 때 지정한 인증 암호를 부여하는 데 사용됩니다.
  • -X PASSPHRASE: 사용자가 생성될 때 지정된 암호화 암호입니다. 지정되지 않았지만 암호화 알고리즘이 제공된 경우 인증 암호가 사용됩니다. 이것은 -x 매개변수가 제공되거나 사용자의 권한 사양 뒤에 priv가 있어 암호화가 필요한 경우에 필요합니다.

이 정보를 사용하여 명령 구성을 시작할 수 있습니다. 부트스트랩 사용자를 설정하는 방법을 고려할 때 해당 계정으로 사용할 명령은 다음과 같습니다.

snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options

예를 들어 관리 서버에서 다음을 입력하여 부트스트랩 계정을 사용할 수 있는지 테스트할 수 있습니다.

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host 1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64

1.3.6.1.2.1.1.1.0 문자열은 시스템 정보 표시를 담당하는 OID입니다. 기본적으로 원격 시스템에서 uname -a의 출력을 반환합니다.

이제 SNMP 데몬을 실행하는 서버에 대해 올바르게 인증할 수 있음을 확인했으므로 계속해서 일반 사용자 계정을 만들 수 있습니다.

일반 사용자 계정 설정

snmpd.conf 파일에서 demo 사용자 계정에 대한 권한을 지정했지만 실제로 이 사용자를 아직 생성하지 않았습니다. bootstrap 사용자를 새 사용자의 템플릿으로 사용할 것입니다.

관리 서버에서 snmpusm 도구와 다음 일반 구문을 사용하여 템플릿에서 사용자를 생성할 수 있습니다.

snmpusm authentication_info remote_host create new_user existing_user

따라서 통과해야 하는 인증 플래그에 대해 알고 있는 것과 이미 가지고 있는 사용자 계정(bootstrap)을 활용하여 이미 정의한 사용자 권한에 맞는 사용자를 만들 수 있습니다(< 코드>데모).

명령은 다음과 같습니다.

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host create demo bootstrap

다음 메시지를 수신해야 합니다.

User successfully created.

이제 원격 서버에 완전히 작동하는 demo라는 사용자가 있습니다. 그러나 여전히 bootstrap 계정과 동일한 인증 정보를 사용하고 있습니다. 암호를 다른 것으로 변경해야 합니다. 이번에는 데모 계정을 사용하여 인증하겠습니다. 비밀번호는 8자 이상이어야 합니다.

snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host passwd temp_password my_new_password

다음 메시지가 다시 수신되어야 합니다.

SNMPv3 Key(s) successfully changed.

SNMP 서비스가 실행된 기간을 원격 서버에 요청하여 새 자격 증명과 암호를 테스트할 수 있습니다. snmpget 명령을 사용하여 다른 시스템에서 단일 값을 가져옵니다.

이번에는 다운로드한 추가 MIB 정의를 활용합니다. 이를 사용하여 OID 숫자 ID 대신 이름으로 값을 요청할 수 있습니다.

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0

원격 SNMP 데몬이 마지막으로 다시 시작된 시간을 나타내는 값을 다시 가져와야 합니다.

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18

클라이언트 구성 파일 생성

이 시점에서 모든 SNMP 명령에 대한 인증 세부 정보가 각 요청에 대해 상당히 정적임을 알아차렸을 것입니다. 매번 입력하는 대신 연결할 자격 증명을 포함하는 클라이언트 측 구성 파일을 만들 수 있습니다.

클라이언트 구성 파일은 공유하려는 범위에 따라 서로 다른 두 위치에 배치할 수 있습니다.

로그인 자격 증명을 관리 시스템의 유효한 사용자와 공유하려는 경우 구성 세부 정보를 글로벌 snmp.conf 파일에 배치할 수 있습니다. sudo 권한으로 해당 파일을 열어야 합니다.

sudo nano /etc/snmp/snmp.conf

그러나 사용자에 대해서만 인증 자격 증명을 정의하려는 경우 사용자의 홈 디렉터리 내에 숨겨진 .snmp 디렉터리를 만들고 거기에 파일을 만들 수 있습니다.

mkdir ~/.snmp
cd ~/.snmp
nano snmp.conf

구성을 배치할 위치에 대한 결정에 관계없이 내용은 동일합니다.

인증에 사용하는 명령은 아래 표에 있습니다. 오른쪽 열에서 snmp.conf 파일 내에서 이러한 구성 세부 정보를 설정하는 데 사용해야 하는 지시문 이름을 볼 수 있습니다.

Command Flag Description Translated snmp.conf directive
-u USERNAME The SNMPv3 username to authenticate as. defSecurityName USERNAME
-l authPriv The security level to authenticate with. defSecurityLevel authPriv
-a MD5 The authentication protocol to use. defAuthType MD5
-x DES The privacy (encryption) protocol to use. defPrivType DES
-A PASSPHRASE The authentication passphrase for the supplied username. defAuthPassphrase PASSPHRASE
-X PASSPHRASE The privacy passphrase fro the supplied username. defPrivPassphrase PASSPHRASE

이 정보를 사용하여 적절한 snmp.conf 파일을 구성할 수 있습니다. 가이드의 경우 다음과 같습니다.

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase my_new_password
defPrivPassphrase my_new_password

완료되면 파일을 저장하고 닫습니다.

이제 인증 세부 정보를 제공하지 않고 명령을 실행할 수 있습니다. SNMP 명령, 호스트 및 명령 인수만 있으면 됩니다.

입력하는 대신:

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0

다음과 같이 간단히 입력할 수 있습니다.

snmpget remote_host sysUpTime.0

보시다시피 이렇게 하면 각 요청에서 제공해야 하는 정보의 양이 크게 줄어듭니다.

부트스트랩 계정 제거

일반 계정이 올바르게 구성되었으므로 상당히 안전하지 않은 bootstrap 계정을 제거할 수 있습니다.

에이전트 서버에서 sudo 권한으로 /etc/snmp/snmpd.conf 파일을 다시 엽니다.

bootstrap 사용자를 참조하는 이전에 추가한 두 줄을 찾아 주석 처리(또는 제거)합니다.

#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv

파일을 저장하고 닫습니다.

이제 SNMP 데몬을 다시 시작합니다.

sudo service snmpd restart

이렇게 하면 일반 snmpd.conf 파일에 createUser 지시문이 없다는 권장 사항이 충족됩니다. 또한 해당 임시 사용자의 권한도 제거됩니다.

usmUserTable에서 bootstrap 사용자를 완전히 제거하려면 관리 서버에서 다음 명령을 실행하면 됩니다.

snmpusm remote_host delete bootstrap

다음과 같은 응답을 받게 됩니다.

User successfully deleted.

결론

이 시점에서 SNMP 프로토콜을 사용하여 안전하게 통신할 수 있는 완전히 구성된 클라이언트-서버 설정이 있어야 합니다. 다른 호스트에 추가 데몬을 쉽게 추가하고 전체 인프라에서 계정 액세스를 구성할 수 있습니다.

다음 가이드에서는 지금까지 작업해 온 net-snmp 도구의 기본 사용법 중 일부를 살펴보겠습니다. 값을 하나씩 또는 대량으로 검색하는 방법과 데이터를 수정하는 방법을 보여줍니다.